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

 

Если бы у меня стояла такая задача:

1. Создал бы файл где указано для каждого звука его длина

2. Создал бы новый чарт (назвал бы его не для работы) и повесил специальный индикатор проигрователь

3. Индикатор создает глобальную переменную терминала для учета размера стека заказов мелодий

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

5. Далее индикатор парсит все глобальные переменные терминала на приставку  sound_  затем ищет минимум среди number и проверив длину мелодии в файле проигрывает ее и удаляет Глоб Перем

6. Ели не находит sound_NAME_number то смотрит размер стека и семафорно обнуляет.

 

6. Во всех экспертах или индикаторах где надо проигрывать звуки должна использоваться одна и та же функция для этой цели

7. Функция семафорно изменяет значение глобальной переменной терминала - размер стека - и берет число number

8. Затем формирует имя sound_NAME_number и просто создает глобальную переменную   терминала с таким именем

 

9. ВОт и все,  number наверное можно вставлять не только в имя но просто как значение глобальной переменной терминала

10. У кого какая критика и у кого есть время? 

 
eevviill:

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

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

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

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

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

if(PlaySound("1.wav"))

PlaySound("2.wav") ;

Нет никакого способа определить, закончено воспроизведение данного конкретного звука или нет. По той самой причине, что звуки воспроизводятся асинхронно. Функция PlaySound сказала системе воспроизвести некий вавчик и отвалила.
 
stringo:
Нет никакого способа определить, закончено воспроизведение данного конкретного звука или нет. По той самой причине, что звуки воспроизводятся асинхронно. Функция PlaySound сказала системе воспроизвести некий вавчик и отвалила.
На данный момент информационно-технического прогресса даже в JavaScript можно узнать о статусе воспроизведения.
 
Integer:
На данный момент информационно-технического прогресса даже в JavaScript можно узнать о статусе воспроизведения.

Кому это нужно?

Маленький экскурс в историю. На заре MT4 в языке MQL4 была функция SpeechText. Мы вовремя от неё отказались. Ибо не соответствовало затратам.

Определение статуса воспроизведения тоже не соответствует затратам.

 
stringo:
 ...звуки воспроизводятся асинхронно. Функция PlaySound сказала системе воспроизвести некий вавчик и отвалила.
Так а зачем вы останавливаете вывод предыдущих звуков, который играются в данный момент?  Пусть воспроизводятся параллельно и всё.
 
stringo:

Кому это нужно?

Маленький экскурс в историю. На заре MT4 в языке MQL4 была функция SpeechText. Мы вовремя от неё отказались. Ибо не соответствовало затратам.

Определение статуса воспроизведения тоже не соответствует затратам.

То вы пишите что нет возможности узнать, то что это дорого.

Что дорого? Дописать пару строчек кода? 

 
eevviill:

То вы пишите что нет возможности узнать, то что это дорого.

Что дорого? Дописать пару строчек кода? 

Скажем так. "Нет простого и однозначного способа узнать". Когда нет однозначного способа, который работал бы на любом железе, это как раз и означает "нет никакой возможности"

Городить диспетчер звуков из-за менее, чем 1 процента использующих мы не будем.

 
Не нужно сильно городить, позицию воспроизведения определять, достаточно определить играет/не играет. Процесс, а в него PlaySound синхронно.
 
Integer:
Не нужно сильно городить, позицию воспроизведения определять, достаточно определить играет/не играет. Процесс, а в него PlaySound синхронно.
Ок. Определили, что играет. Что делать дальше? Останавливать или дать доиграть?
 
stringo:
Ок. Определили, что играет. Что делать дальше? Останавливать или дать доиграть?

А кто определяет? 

Если вы будете еще и определять, тогда дать доиграть и запустить следующий файл по списку. 

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

Причина обращения: