PlaySound() под ряд несколько файлов, но не SND_SYNC
Интересует вопрос.
Как с помощью PlaySound() воспроизвести под ряд несколько файлов?
Флаг SND_SYNC не подходит, так как он замораживает всю программу на время воспроизведения файла.
Есть мысли?
Этот флаг используется сейчас, но он не позволяет воспроизводить звуки под ряд.
Мне нужно чтобы проиграв один файл, без паузы начинал играть другой файл.
Использование таймеров невозможно, т.к. модуль пишется для игры, а в ней возможен только один "проход" по коду.
- Склейте все файлы в один waw-редактором.
- Пните PlaySound с флагом SND_SYNC в отдельный поток (как-то раз я проделывал такое с Beep)))
- Попробуйте оживить этот код (работает 1/10))):Код:PlaySound(_T("WindowsLogon"), NULL, SND_ASYNC | SND_NOSTOP);
Sleep(1);
while(!PlaySound(_T("SystemExclamation"), NULL, SND_ASYNC | SND_NOSTOP));
Sleep(1);
while(!PlaySound(_T("WindowsLogoff"), NULL, SND_ASYNC | SND_NOSTOP));
Флаг SND_SYNC не подходит, так как он замораживает всю программу на время воспроизведения файла.
Отдельный поток, цикл, SND_SYNC.
какой бы поток ни был (отдельный или нет), он всё равно флагом SND_SYNC замораживает игру напрочь на момент воспроизведения.
Цикл типа while вместе со sleep`ом попробую, но кажется sleep вызовет тот же эффект.
{
while (true)
{
PlaySound("WindowsLogon", NULL, SND_SYNC);
}
}
..................
_beginthreadex(NULL, 0, SoundThread, NULL, 0, NULL);
Звук проигрывается пока не убью приложение. При этом приложение нормально отвечает.
В том то всё и дело, что приложение не отдельное, а встраиваемое модулем в игру. И именно по этому даже в этом случае SND_SYNC всё равно морозит игру.
Получается так - самолёт летит, замирает в воздухе пока произносятся его высота и скорость и только после этого продолжает полёт. Это недопустимо.
И все равно не пойму, как рабочий поток может заморозить игру. Может туплю. :)
Я сам этого не пойму. Особенно учитывая что во время выполнения этого модуля выполняются ещё с десяток других (каждый прибор на самолёте - отдельный модуль). Но факт остаётся фактом. SND_SYNC морозит.
Остаётся попробовать while с sleep. Как попробую - отпишусь.
* на Sleep`е морзит
* на while даже при SND_ASYNC морозит
* на отдельной thread морозит, причём нарушает логику кода и вызывает ложные срабатывания других хвуков.
:(
Буду пробовать другие методы.
А код - да обычный код - одна строка (или несколько как выше) - всё компилится, всё работает, но в игре останавлиет процесс на момент воспроизведения. Так что код тут не при чём. Во всяком случае если откомпилировать его в ехе и запустить - всё будет норм работать - там мы заморозку не увидим.... а вот в игре....