используйте PlaySound () в C ++ / OpenGL для воспроизведения звука в фоновом режиме - PullRequest
4 голосов
/ 10 января 2012

Я пытаюсь воспроизвести wav-файл на фоне игры, встроенной в c ++ с opengl. Я использую следующую строку для воспроизведения файла WAV:

 PlaySound("starwars.wav", NULL, SND_FILENAME|SND_LOOP);

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

Ответы [ 3 ]

8 голосов
/ 10 января 2012

Вы хотите передать

SND_ASYNC

Это приведет к немедленному возвращению PlaySound, а не к ожиданию завершения воспроизведения звука, что в вашем случае не так, как вызацикливание.IIRC PlaySound позволяет воспроизводить только один звук в любое время, поэтому лучше всего искать библиотеку звуков, особенно если вы создаете игру.

В заключение, чтобы ваш семпл работал:

PlaySound("starwars.wav", NULL, SND_ASYNC|SND_FILENAME|SND_LOOP);

Пожалуйста, посмотрите это

1 голос
/ 13 июня 2012

Если вы используете формат playSound ("*. Wav", NULL, SND_SYNC | SND_LOOP), вы практически не можете контролировать анимацию игры, которая будет заморожена с помощью цикла, включенного в функцию playSound (), котораяэто SND_LOOP, но если вы измените SND_SYNC на SND_ASYNC, он будет работать именно так, как вы заказали, но не забывайте, что это работает для окон, и не забудьте включить WINMM.LIB (библиотека мультимедиа окон) в проекте / opengl / visual c ++ /ссылка

1 голос
/ 10 января 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...