PlaySound()-script-function

 

Добрый день,форумчане!

нашел  в инете заготовку для расширения

функции  выдачи звука!

можно выставить время (как долго)

должно звенеть,

если ты занят более приятным  чем форех!

Кто может из этои заготовки сделать

работающую    функцию?

pansa    

            play_time=TimeCurrent();

         PlaySound(file_to_play);

         for( i = ArraySize(sound_stack)-1; i > 0; i --) //storing the last new played event

            {

             sound_stack[i]=sound_stack[i-1];

             time_stack[i]=time_stack[i-1];

             sound_stack[0]=file_to_play;

             time_stack[0]=play_time;

            }

 

         while (TimeCurrent()-play_time<length)

               {

                first=StringFind(file_to_play,"[",0)+1;

                second=StringFind(file_to_play,"]",first);

                length=second-first;

                if (length<1) length=1; // this var is used to extract the true length

                length=StrToInteger(StringSubstr(file_to_play,first,length));

                if (length<1) length=1;  // this var is the true length (sec) of 'file_to_play' wav file

               }  // a way to force a pause letting a full play

 Print ("Exiting the pause loop after ",TimeCurrent()-play_time," sec.  Playd: ",file_to_play);

Brought By Highlightly

         Print ("Exiting the pause loop after ",TimeCurrent()-play_time," sec.  Playd: ",file_to_play);

 

Все не так просто. Если делать просто, будет привязка к тикам, что нарушит равномерность проигрывания файлов.

Что бы было хорошо надо использовать таймер. Если использовать таймер, значит функция не будет работать в скриптах. Если не использовать таймер, а использовать Sleep(), будет работать в скрипте, но не будет в индикаторе (при этом в скрипте и индикаторе будет задержка всех действий).

К тому же, если использовать таймер, то использование функции усложняется (уже не будет той простоты: скопировал функцию, вызвал функцию).

Проще запускать плеер через WinExec().

Еще проще - сделать длинный звуковой файл и его использовать. 

 
привет, интегер!
вы хорошо объяснили проблемы
с этим скриптом.
тем неменее проблема надежного звука
остается!я уже давно обращал внимание
на вызов микрософт плеера для выдачи
других форматов  мп,мп3,мп4.....
тогда при профите-танец  с саблями а
потерях-реквием....
вы могли бы на  этом заработать
по всему миру нашлись бы покупатели!
панса
 

Берите за так

 

 #property strict


#import "shell32.dll"

   int ShellExecuteA(int hwnd,uchar & lpOperation[],uchar & lpFile[],uchar & lpParameters[],uchar & lpDirectory[],int nShowCmd);

#import


void OnStart(){

   PlayInWinPlayer("C:\\Windows\\Media\\tada.wav");

}


void PlayInWinPlayer(string MediaFile){


   uchar _lpFile[];

   uchar _lpOperation[];

   uchar _lpParameters[];

   uchar _lpDirectory[];   

   

   string lpOperation="open";

   string lpFile="C:\\Program Files\\Windows Media Player\\wmplayer.exe";

   string lpParameters=MediaFile;

   string lpDirectory="";   

   

   StringToCharArray(lpOperation,_lpOperation);   

   StringToCharArray(lpFile,_lpFile);

   StringToCharArray(lpParameters,_lpParameters);  

   StringToCharArray(lpDirectory,_lpDirectory);     

   

   ShellExecuteA(0,_lpOperation,_lpFile,_lpParameters,_lpDirectory,1);


}

 
Код не вставляется, получается пустота.
 
Integer:
Как код не вставляется, получается пустота.

#property strict


#import "shell32.dll"

   int ShellExecuteA(int hwnd,uchar & lpOperation[],uchar & lpFile[],uchar & lpParameters[],uchar & lpDirectory[],int nShowCmd);

#import


void OnStart(){

   PlayInWinPlayer("C:\\Windows\\Media\\tada.wav");

}


void PlayInWinPlayer(string MediaFile){


   uchar _lpFile[];

   uchar _lpOperation[];

   uchar _lpParameters[];

   uchar _lpDirectory[];   

   

   string lpOperation="open";

   string lpFile="C:\\Program Files\\Windows Media Player\\wmplayer.exe";

   string lpParameters=MediaFile;

   string lpDirectory="";   

   

   StringToCharArray(lpOperation,_lpOperation);   

   StringToCharArray(lpFile,_lpFile);

   StringToCharArray(lpParameters,_lpParameters);  

   StringToCharArray(lpDirectory,_lpDirectory);     

   

   ShellExecuteA(0,_lpOperation,_lpFile,_lpParameters,_lpDirectory,1);


}

Странно, у меня вставляется...

 
Привет,интегер! Вообщем коде поместил я в скрипт при пуске скрипта вызывается микрософт плеер и проигрывает тада... чудесно -теперь осталось только повязать с ехпертом! уж обьясните пожалуйста! панса
 

Привет,интегер!

доведите  же  вызов плеера

из индикатора или ехперта

до конца-если будет хорошо

работать-куплю.

панса

 

Ага, продам в обмен на веревку с мылом.

В приложении файл. Его скопировать в Include. Подключать к советнику или индикатору:

#include <WinMediaPlayer.mqh> 

В советнике или индикаторе вызывать функцию PlayInWinPlayer(string). В функцию передается один аргумент - имя файла (полный путь и имя), например "C:\\Windows\\Media\\tada.wav"

Извините, что без шуршащего пакетика и без золотистой ленточки, все кончались. 

Файлы:
 

вот ситуация!

уже все готово и надо готовую

функцию только разместить

в индикаторе и вызвать!

уже 2 дня бьюсь с едитором.

все сделал интегер ,теперь

видимо потерял интерес.

может кто может помочь?

панса

 
Да уж рассказывайте в чем проблема, что не получается? Ошибки компиляции? Какие?