Два Playsound - страница 5

 
emarketgal:

Прошло уже несколько лет. Интересно кому-либо удалось решить эту проблему?  Мне аналогично необходимо проиграть несколько файлов последовательно, пока не могу решить эту проблему проигрывается через PlaySound только последний файл.

Каждую группу файлов, которую нужно последовательно проиграть друг за другом, объединяю в один композиционный объединенный файл. Файлов получается много. По условию проигрывается требуемый композиционный файл, что на слух эквивалентно проигрыванию требуемой группы файлов
 

Если я правильно понимаю, Вы в реальном времени из нескольких файлов формируете  один, а потом проигрываете? Можно рассказать подробности, как реализовать эту технологию на MQL5 и MQL4.

 
emarketgal:

Если я правильно понимаю, Вы в реальном времени из нескольких файлов формируете  один, а потом проигрываете? Можно рассказать подробности, как реализовать эту технологию на MQL5 и MQL4.

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

 
emarketgal:

Прошло уже несколько лет. Интересно кому-либо удалось решить эту проблему?  Мне аналогично необходимо проиграть несколько файлов последовательно, пока не могу решить эту проблему проигрывается через PlaySound только последний файл.


Попробуйте через Sleep()

void OnStart()
{
  PlaySound("alert.wav");
  Print(" Play alert");
  Sleep(5*1000);
  
  PlaySound("connect.wav");
  Print(" Play connect");
  Sleep(5*1000);
    
  PlaySound("news.wav");
  Print(" Play news");
}
 
Vasiliy Pushkaryov:

Попробуйте через Sleep()

Да, но Sleep остановит полностью всю программу, а это не совсем хорошо в большинстве случаев.

 
Vitaly Muzichenko:

Да, но Sleep остановит полностью всю программу, а это не совсем хорошо в большинстве случаев.


Это да, больше чем помочь, не знаю.

 

Sleep в индикаторах не работает, в этом вся проблема. А так можно было использовать на худой конец.

 

Вот пример советника, воспроизводящего последовательность звуков. Индикатор чуть проще прикреплен. Звуки в архиве

//+------------------------------------------------------------------+
//| Советник создает 4 кнопки:                       Э-123_Звук.mq4  |
//| Butt_1, Butt_2, Butt-3 - поместить звуки в массив                |
//| Butt_0  - Выход                                                  |
//+------------------------------------------------------------------+
#property strict

string snd[30];
int n=0;

//+------------------------------------------------------------------+
//| Инициализация - создать кнопки, установить таймер                |
//+------------------------------------------------------------------+
void OnInit()
{
//--- Кнопка Выход
   ObjectCreate("Butt_0",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"Butt_0",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
   ObjectSetInteger(0,"Butt_0",OBJPROP_XDISTANCE,160);
   ObjectSetInteger(0,"Butt_0",OBJPROP_YDISTANCE,114);
   ObjectSetInteger(0,"Butt_0",OBJPROP_XSIZE,130);
   ObjectSetInteger(0,"Butt_0",OBJPROP_YSIZE,25);
   ObjectSetString (0,"Butt_0",OBJPROP_TEXT,"Выход");
   ObjectSetInteger(0,"Butt_0",OBJPROP_COLOR,Black);
   ObjectSetInteger(0,"Butt_0",OBJPROP_BGCOLOR,Orange);
   ObjectSetInteger(0,"Butt_0",OBJPROP_BORDER_COLOR,Green);
   ObjectSetInteger(0,"Butt_0",OBJPROP_HIDDEN,true);
   ObjectSetInteger(0,"Butt_0",OBJPROP_STATE,false);
   ObjectSetInteger(0,"Butt_0",OBJPROP_FONTSIZE,12);


//--- Кнопка Butt_1
   ObjectCreate("Butt_1",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"Butt_1",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
   ObjectSetInteger(0,"Butt_1",OBJPROP_XDISTANCE,160);
   ObjectSetInteger(0,"Butt_1",OBJPROP_YDISTANCE,21);
   ObjectSetInteger(0,"Butt_1",OBJPROP_XSIZE,130);
   ObjectSetInteger(0,"Butt_1",OBJPROP_YSIZE,25);
   ObjectSetString (0,"Butt_1",OBJPROP_TEXT,"Butt_1");
   ObjectSetInteger(0,"Butt_1",OBJPROP_COLOR,White);
   ObjectSetInteger(0,"Butt_1",OBJPROP_BGCOLOR,Green);
   ObjectSetInteger(0,"Butt_1",OBJPROP_BORDER_COLOR,Green);
   ObjectSetInteger(0,"Butt_1",OBJPROP_HIDDEN,true);
   ObjectSetInteger(0,"Butt_1",OBJPROP_STATE,false);
   ObjectSetInteger(0,"Butt_1",OBJPROP_FONTSIZE,12);


//--- Кнопка Butt_2
   ObjectCreate("Butt_2",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"Butt_2",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
   ObjectSetInteger(0,"Butt_2",OBJPROP_XDISTANCE,160);
   ObjectSetInteger(0,"Butt_2",OBJPROP_YDISTANCE,52);
   ObjectSetInteger(0,"Butt_2",OBJPROP_XSIZE,130);
   ObjectSetInteger(0,"Butt_2",OBJPROP_YSIZE,25);
   ObjectSetString (0,"Butt_2",OBJPROP_TEXT,"Butt_2");
   ObjectSetInteger(0,"Butt_2",OBJPROP_COLOR,White);
   ObjectSetInteger(0,"Butt_2",OBJPROP_BGCOLOR,Green);
   ObjectSetInteger(0,"Butt_2",OBJPROP_BORDER_COLOR,Green);
   ObjectSetInteger(0,"Butt_2",OBJPROP_HIDDEN,true);
   ObjectSetInteger(0,"Butt_2",OBJPROP_STATE,false);
   ObjectSetInteger(0,"Butt_2",OBJPROP_FONTSIZE,12);

//--- Кнопка Butt_3
   ObjectCreate("Butt_3",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"Butt_3",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
   ObjectSetInteger(0,"Butt_3",OBJPROP_XDISTANCE,160);
   ObjectSetInteger(0,"Butt_3",OBJPROP_YDISTANCE,83);
   ObjectSetInteger(0,"Butt_3",OBJPROP_XSIZE,130);
   ObjectSetInteger(0,"Butt_3",OBJPROP_YSIZE,25);
   ObjectSetString (0,"Butt_3",OBJPROP_TEXT,"Butt_3");
   ObjectSetInteger(0,"Butt_3",OBJPROP_COLOR,White);
   ObjectSetInteger(0,"Butt_3",OBJPROP_BGCOLOR,Green);
   ObjectSetInteger(0,"Butt_3",OBJPROP_BORDER_COLOR,Green);
   ObjectSetInteger(0,"Butt_3",OBJPROP_HIDDEN,true);
   ObjectSetInteger(0,"Butt_3",OBJPROP_STATE,false);
   ObjectSetInteger(0,"Butt_3",OBJPROP_FONTSIZE,12);

   EventSetTimer(1);  // Длина самого длинного звука, сек
}

//+------------------------------------------------------------------+
//| Деинициализация - удаление всех объектов с именами Butt_         |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  ObjectsDeleteAll(0, "Butt_");
}


//+------------------------------------------------------------------+
//| Реакция на нажатия кнопок                                        |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
  if(sparam=="Butt_1")
  {
    ObjectSetInteger(0,"Butt_1",OBJPROP_STATE,false);
    ObjectSetInteger(0,"Butt_1",OBJPROP_BGCOLOR,Yellow);
    ObjectSetString (0,"Butt_1",OBJPROP_TEXT,"ЗВУК 1");
    ObjectSetInteger(0,"Butt_1",OBJPROP_COLOR,Black);
    snd[n]="1.wav"; n++;
    Sleep(50);
    ObjectSetInteger(0,"Butt_1",OBJPROP_BGCOLOR,Green);
    ObjectSetString(0,"Butt_1",OBJPROP_TEXT,"Butt_1");
    ObjectSetInteger(0,"Butt_1",OBJPROP_COLOR,White);
  }

  if(sparam=="Butt_2")
  {
    ObjectSetInteger(0,"Butt_2",OBJPROP_STATE,false);
    ObjectSetInteger(0,"Butt_2",OBJPROP_BGCOLOR,Yellow);
    ObjectSetString (0,"Butt_2",OBJPROP_TEXT,"ЗВУК 2");
    ObjectSetInteger(0,"Butt_2",OBJPROP_COLOR,Black);
    snd[n]="2.wav"; n++;
    Sleep(50);
    ObjectSetInteger(0,"Butt_2",OBJPROP_BGCOLOR,Green);
    ObjectSetString(0,"Butt_2",OBJPROP_TEXT,"Butt_2");
    ObjectSetInteger(0,"Butt_2",OBJPROP_COLOR,White);
  }

  if(sparam=="Butt_3")
  {
    ObjectSetInteger(0,"Butt_3",OBJPROP_STATE,false);
    ObjectSetInteger(0,"Butt_3",OBJPROP_BGCOLOR,Yellow);
    ObjectSetString (0,"Butt_3",OBJPROP_TEXT,"ЗВУК 3");
    ObjectSetInteger(0,"Butt_3",OBJPROP_COLOR,Black);
    snd[n]="3.wav"; n++;
    Sleep(50);
    ObjectSetInteger(0,"Butt_3",OBJPROP_BGCOLOR,Green);
    ObjectSetString(0,"Butt_3",OBJPROP_TEXT,"Butt_3");
    ObjectSetInteger(0,"Butt_3",OBJPROP_COLOR,White);
  }


  if(sparam=="Butt_0")
  {
    ObjectSetInteger(0,"Butt_0",OBJPROP_BGCOLOR,Yellow);
    ObjectSetString (0,"Butt_0",OBJPROP_TEXT,"УХОЖУ");
    ObjectSetInteger(0,"Butt_0",OBJPROP_COLOR,Black);
    Sleep(1000);
    ExpertRemove();
  } 
}

void OnTimer()
{
  if(n)
  {
    n--;
    PlaySound(snd[0]);        // FIFO - первый пришел - первый ушел
    ArrayCopy(snd,snd,0,1,n);
  }
}
Если быстро понажимать на кнопки - будет последовательно воспроизведены соответствующие звуки
Файлы:
E-123_ZVUK.mq4  12 kb
123.zip  24 kb
 

Короче так: объявление массива и счетчика звуков
string snd[30];
int n=0;

В функции OnInit() нужно запустить таймер
EventSetTimer(1);  // Длина самого длинного звука, сек

При необходимости воспроизвести звук помещаем его имя в буфер, например
snd[n]="1.wav"; n++;

Звуки воспроизводит функция:
void OnTimer()
{
  if(n)  // Проверка очереди звуков
  {
    n--;
    PlaySound(snd[0]);                // FIFO - первый пришел - первый ушел
    ArrayCopy(snd,snd,0,1,n);     // Удаление воспроизведенного звука из массива-очереди
  }
}