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

 

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

Еще простой способ. Использовать Sleep() после PlaySound(). Но нужно знать длительность звуковых файлов.  В индикаторах не будет работать. Но нечто подобное можно сделать через таймер. Хоть таймер, хоть Sleep() нужно знать длительность файлов.

Еще способ. Использовать API sndPlaySound(), но подойдет только для экспертов, в индикаторах работать будет, но не стоит такого делать.  

Еще способ. Немного акробатический. Тоже используется API. Формировать один звуковой файл из нескольких других звуковых файлов.

 
snmax:
docs.mql4 говорит "Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить. "  : (((

А почему в МКском DailyPivotPoints.mq4 используется  Sleep() и ничего?! : )))

  cnt = 0;
  while(true)
  {
    if(iTime(Symbol(),PERIOD_D1,0) >= (Time[0]-PERIOD_D1*60)) break;
    cnt++;
    if(cnt > 5) return(0);
    Sleep(1000);
  }
 
borilunad:

А почему в МКском DailyPivotPoints.mq4 используется  Sleep() и ничего?! : )))


Sleep  в индикаторах не работает
 
Я не спорю, но он там есть, и компилятор не против ни раньше, ни сейчас! И зачем Автор поставил, если не работает?!
 

Это реально проблема.

Например алерт и звук в индикаторе. Звук не играет.

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

Сделать функции Alert. PlaySound и т.д. не типа void, а bool с проверкой окончания функции(тру когда уже звук доиграл)

Тогда можно было бы писать так 

if(PlaySound("1.wav"))

PlaySound("2.wav") ;

 

Если повесить на отдельное окно обработчика в качестве эксперта

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

 

Вообще конечно это явный косяк разработчиков.  Неважно в каком режиме проигрываются файлы (синхронном или асинхронном), но должно воспроизводится всё, что отправлено.  Т.е. звуки должны идти либо друг за другом, либо параллельно,  а не тупо пропускаться.  Напишите им в сервис-деск по этой проблеме.

 

Когда два PlaySound подряд, будет играть последний, это правильно.

С алертом странность. То, что играет звук алерта, а не следующий файл через PlaySound(), раньше играл PlaySound.

Alert("1");
PlaySound("timeout"); 

Ну напишите, в сервис деск и что? В лучшем случае не ответят,  или же "объяснят" что вы ничего не понимаете.

 
Integer:

Когда два PlaySound подряд, будет играть последний, это правильно.  

Почему это правильно?  Почему не первый?
 
Meat:
Почему это правильно?  Почему не первый?
Так проще, само собой должно получиться. 
Причина обращения: