Скачать MetaTrader 5

PlaySound()-script-function

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
pansa
582
pansa  

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

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

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

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

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

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

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

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

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);

Dmitry Fedoseev
43861
Dmitry Fedoseev  

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

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

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

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

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

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

Берите за так

 

 #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);


}

Dmitry Fedoseev
43861
Dmitry Fedoseev  
Код не вставляется, получается пустота.
Alexey Viktorov
9322
Alexey Viktorov  
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);


}

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

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

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

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

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

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

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

панса

Dmitry Fedoseev
43861
Dmitry Fedoseev  

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

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

#include <WinMediaPlayer.mqh> 

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

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

Файлы:
pansa
582
pansa  

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

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

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

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

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

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

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

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

панса

Dmitry Fedoseev
43861
Dmitry Fedoseev  
Да уж рассказывайте в чем проблема, что не получается? Ошибки компиляции? Какие?
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий