Еще один момент. Поставил подряд две функции PlaySound и почему то проигрывается только последний. Хотелось бы чтобы все по очереди. Что делать???
На сколько я знаю пауза в индикаторах не допускается, по крайней мере при помощи функции sleep. Какую функцию порекомендуете вы?
Хотелось чтобы модератор высказал свое мнение по этому вопросу. А то ответ -"...надо просто реже играть музыку." кажется не серьезным.
у модератора действительно другие задачи.
По поводу музыки. Не начинайте новую пока не закончится старая - что-то типа того - играйте реже.
Здравствуйте! Пытаюсь озвучить сигналы своего индикатора при помощи функции PlaySound. Оформил, скомпелировал, болтает, процесс идет нормально!!! НО, без но не обошлось, с функцией Alert работает не полноценно. Только начинает воспроизводить нужный текст функция PlaySound (там несколько слов, типа "Сигнал вверх №1") как ее перебивает сигнал Алерта. Можно ли сделать так, чтобы функция PlaySound проигрывала полностью свой текст до конца после чего выходило окошко алерта со своим сигналом, или наоборот с начала алерт, потом функция PlaySound, не принципиально. Пробовал и перед алертом ставить PlaySound и после. Все равно почему то в первую очередь начинает звучать первые буквы из PlaySound потом алерт. Если функция PlaySound используется одна без алерта, то проигрывает все до конца. Ниже привожу свой код. С коментом, к стати, PlaySound работает фолноценно.
if (TimeBar!=Time[0] && AlertON && i==0 && S!=0)
{
Alert(Symbol()+ " " + "(" + " " + "M" + Period() + ")" + " = " + NameFigur);
Comment(Symbol(),Period());
PlaySound(Voice);
TimeBar=Time[0];
}
Прошу помочь, кодом, советом, ссылкой, короче кто чем может.
P.S. прежде чем писать сюда, порыскал в интернете, почитал статейки. но не помогло. К стати, нашел в инете пример, типа работающий, код один в один как у меня, но у меня не проходит.
Остается один вариант.
При создании звуковых файлов делать тишину-паузу на длину звука Alert а.
//+------------------------------------------------------------------+
//| SoundTest.mqh |
//| Copyright 2010, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#import "winmm.dll"
int mciSendStringW(const string,long,uint,int); // версия для передачи NULL в качестве строки в x64
int mciSendStringW(const string,int,uint,int); // версия для передачи NULL в качестве строки в x86
int mciSendStringW(const string,string &,uint,int); // версия для передачи строки в x86/x64
int mciGetErrorStringW(int,string &,uint); // получение текста ошибки в x86/x64
#import
//+------------------------------------------------------------------+
//| Подпапка песочницы |
//+------------------------------------------------------------------+
#ifdef __MQL5__
const string ExtMQL="MQL5";
#else
const string ExtMQL="MQL4";
#endif
//+------------------------------------------------------------------+
//| Вызов правильной версии функции (от битности процесса) |
//+------------------------------------------------------------------+
int mciSendString(string str)
{
if(_IsX64)
return(mciSendStringW(str,(long)0,256,0));
//---
return(mciSendStringW(str,(int)0,256,0));
}
//+------------------------------------------------------------------+
//| Открытие файла |
//+------------------------------------------------------------------+
int SoundOpen(const string name,const string path)
{
static string data_path=NULL;
//---
if(data_path==NULL)
data_path=TerminalInfoString(TERMINAL_DATA_PATH)+"\\"+ExtMQL+"\\Files\\";
//---
return(mciSendString("OPEN \""+data_path+path+"\" TYPE MpegVideo ALIAS \""+name+"\""));
}
//+------------------------------------------------------------------+
//| Воспроизведение с позиции (по умолчанию с позиции 0) |
//+------------------------------------------------------------------+
int SoundPlay(const string name,long from_pos=0)
{
return(mciSendString("PLAY \""+name+"\" from "+IntegerToString(from_pos)));
}
//+------------------------------------------------------------------+
//| Закрытие файла |
//+------------------------------------------------------------------+
int SoundClose(const string name)
{
return(mciSendString("CLOSE \""+name+"\""));
}
//+------------------------------------------------------------------+
//| Получение описания ошибки |
//+------------------------------------------------------------------+
string SoundErrDesc(int err)
{
string desc;
StringInit(desc,256);
mciGetErrorStringW(err,desc,256);
return(desc);
}
//+------------------------------------------------------------------+
//| Получение текущей позиции в файле |
//+------------------------------------------------------------------+
long SoundPos(const string name)
{
string res;
StringInit(res,128);
if(mciSendStringW("STATUS \""+name+"\" POSITION",res,256,0)==0)
return(StringToInteger(res));
//---
return(-1);
}
//+------------------------------------------------------------------+
//| Получение длины файла |
//+------------------------------------------------------------------+
long SoundLen(const string name)
{
string res;
StringInit(res,128);
if(mciSendStringW("STATUS \""+name+"\" LENGTH",res,256,0)==0)
return(StringToInteger(res));
//---
return(-1);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnStart()
{
int res;
res=SoundOpen("music","1.mp3");
if(res!=0)
Print("SoundError: ",SoundErrDesc(res));
else
{
res=SoundOpen("music2","1.mp3");
if(res!=0)
Print("SoundError: ",SoundErrDesc(res));
else
{
long len=SoundLen("music");
SoundPlay("music2");
SoundPlay("music",len/2);
while(!IsStopped())
{
long pos=SoundPos("music");
Comment(pos,"/",len,"\n",SoundPos("music2"),"/",len);
if(pos==len)
SoundPlay("music");
}
//---
SoundClose("music");
SoundClose("music2");
}
}
}
//+------------------------------------------------------------------+

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте! Пытаюсь озвучить сигналы своего индикатора при помощи функции PlaySound. Оформил, скомпелировал, болтает, процесс идет нормально!!! НО, без но не обошлось, с функцией Alert работает не полноценно. Только начинает воспроизводить нужный текст функция PlaySound (там несколько слов, типа "Сигнал вверх №1") как ее перебивает сигнал Алерта. Можно ли сделать так, чтобы функция PlaySound проигрывала полностью свой текст до конца после чего выходило окошко алерта со своим сигналом, или наоборот с начала алерт, потом функция PlaySound, не принципиально. Пробовал и перед алертом ставить PlaySound и после. Все равно почему то в первую очередь начинает звучать первые буквы из PlaySound потом алерт. Если функция PlaySound используется одна без алерта, то проигрывает все до конца. Ниже привожу свой код. С коментом, к стати, PlaySound работает фолноценно.
if (TimeBar!=Time[0] && AlertON && i==0 && S!=0)
{
Alert(Symbol()+ " " + "(" + " " + "M" + Period() + ")" + " = " + NameFigur);
Comment(Symbol(),Period());
PlaySound(Voice);
TimeBar=Time[0];
}
Прошу помочь, кодом, советом, ссылкой, короче кто чем может.
P.S. прежде чем писать сюда, порыскал в интернете, почитал статейки. но не помогло. К стати, нашел в инете пример, типа работающий, код один в один как у меня, но у меня не проходит.