Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

PlaySound() под ряд несколько файлов, но не SND_SYNC

748
08 ноября 2009 года
AlphaOmega
159 / / 28.09.2004
Приветствую всех!

Интересует вопрос.
Как с помощью PlaySound() воспроизвести под ряд несколько файлов?
Флаг SND_SYNC не подходит, так как он замораживает всю программу на время воспроизведения файла.

Есть мысли?
297
08 ноября 2009 года
koodeer
1.2K / / 02.05.2009
Используйте флаг SND_ASYNC.
748
08 ноября 2009 года
AlphaOmega
159 / / 28.09.2004
Цитата: koodeer
Используйте флаг SND_ASYNC.



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

52K
09 ноября 2009 года
ruprogman
20 / / 26.10.2009
  1. Склейте все файлы в один waw-редактором.
  2. Пните PlaySound с флагом SND_SYNC в отдельный поток (как-то раз я проделывал такое с Beep)))
  3. Попробуйте оживить этот код (работает 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));
288
09 ноября 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: AlphaOmega

Флаг SND_SYNC не подходит, так как он замораживает всю программу на время воспроизведения файла.



Отдельный поток, цикл, SND_SYNC.

748
09 ноября 2009 года
AlphaOmega
159 / / 28.09.2004
Склеить файлы нельзя ибо тогда это всё будет весить очень много. У меня задача произнести голосом (wav файлы) высоту и скорость полёта. записывать все возможные величины от 1 до 11000 - сами понимаете - не тема. Поэтому я разбил их на составляющие и пытаюсь их воспроизвести по очереди "сто" "двадцать" и "пять" например.

какой бы поток ни был (отдельный или нет), он всё равно флагом SND_SYNC замораживает игру напрочь на момент воспроизведения.

Цикл типа while вместе со sleep`ом попробую, но кажется sleep вызовет тот же эффект.
288
09 ноября 2009 года
nikitozz
1.2K / / 09.03.2007
Вот
 
Код:
unsigned int __stdcall SoundThread(void * lpParam)
{
    while (true)
    {
        PlaySound("WindowsLogon", NULL, SND_SYNC);
    }
}
..................
_beginthreadex(NULL, 0, SoundThread, NULL, 0, NULL);


Звук проигрывается пока не убью приложение. При этом приложение нормально отвечает.
748
09 ноября 2009 года
AlphaOmega
159 / / 28.09.2004
Цитата: nikitozz
Звук проигрывается пока не убью приложение. При этом приложение нормально отвечает.


В том то всё и дело, что приложение не отдельное, а встраиваемое модулем в игру. И именно по этому даже в этом случае SND_SYNC всё равно морозит игру.

Получается так - самолёт летит, замирает в воздухе пока произносятся его высота и скорость и только после этого продолжает полёт. Это недопустимо.

288
09 ноября 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: AlphaOmega
В том то всё и дело, что приложение не отдельное, а встраиваемое модулем в игру. И именно по этому даже в этом случае SND_SYNC всё равно морозит игру.



И все равно не пойму, как рабочий поток может заморозить игру. Может туплю. :)

748
09 ноября 2009 года
AlphaOmega
159 / / 28.09.2004
Цитата: nikitozz
И все равно не пойму, как рабочий поток может заморозить игру. Может туплю. :)

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

Остаётся попробовать while с sleep. Как попробую - отпишусь.

748
09 ноября 2009 года
AlphaOmega
159 / / 28.09.2004
Не получилось :(

* на Sleep`е морзит
* на while даже при SND_ASYNC морозит
* на отдельной thread морозит, причём нарушает логику кода и вызывает ложные срабатывания других хвуков.

:(
288
09 ноября 2009 года
nikitozz
1.2K / / 09.03.2007
Ну что ж. Тогда попробуйте какие-нибудь другие средства для воспроизведения звука. Ну или код в студию. :)
748
09 ноября 2009 года
AlphaOmega
159 / / 28.09.2004
Цитата: nikitozz
Ну что ж. Тогда попробуйте какие-нибудь другие средства для воспроизведения звука. Ну или код в студию. :)


Буду пробовать другие методы.
А код - да обычный код - одна строка (или несколько как выше) - всё компилится, всё работает, но в игре останавлиет процесс на момент воспроизведения. Так что код тут не при чём. Во всяком случае если откомпилировать его в ехе и запустить - всё будет норм работать - там мы заморозку не увидим.... а вот в игре....

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог