Взрыв звуковой нити в игровом проекте MFC останавливает музыку, которая играет - PullRequest
1 голос
/ 27 июня 2010

Мэйби, кто-то здесь может объяснить мне, что я делаю не так.Это после прочтения большого количества статей в сети и выполнения того, что говорится в статьях, должно работать, но это не работает для меня.

Я занимаюсь разработкой красивой маленькой игры с фоновой музыкой и звуком взрыва.Для взрыва, который я знаю, мне нужно использовать потоки, или моя музыка останавливается, когда происходит первый взрыв.Я использую потоки, но музыка по-прежнему останавливается.

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

Вот мой код.Это очень просто, но звук взрыва не работает.

  1. Это глобальное снижение в файле * .h:

    UINT CMonstersThread(LPVOID Param);

  2. Это функция потока в файле * .cpp:

UINT CMonstersThread(LPVOID Param)
    {
        PlaySoundA("sounds\\expl06.wav", NULL, SND_ASYNC);
        AfxEndThread(0);
        return FALSE;
    }

Это вызов для потока каждый раз, когда удаляется «дружественный» (в том же файле * .cpp):

AfxBeginThread(CMonstersThread,NULL,THREAD_PRIORITY_NORMAL,0,0,NULL);

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

Ответы [ 4 ]

1 голос
/ 28 июня 2010

Я не думаю, что можно воспроизводить несколько звуков параллельно, используя любую из функций Windows, таких как PlaySound или sndPlaySound.Как уже было предложено, вы можете захотеть взглянуть на DirectSound или похожие API.

1 голос
/ 28 июня 2010

Я бы предложил использовать XAudio2 из последней версии DirectX SDK для воспроизведения аудио. Я возьму немного больше работы и кода, но конечный результат будет лучше, потому что вы сможете загрузить звуковой файл отдельно от его воспроизведения.

С «PlaySound» вы заметите задержку звука, если попытаетесь использовать его сразу после события, например, щелчка мышью или умирающего / взрывающего монстра, и вы не поразите это XAudio2. Я знаю это по опыту.

Поскольку вы уже используете Visual Studio, я также предлагаю вам попробовать использовать VS 2010, если это возможно, потому что [Concurrency Runtime, Parallel Pattern Library и Agents Library]] 1 делают многопоточность и выполнение задач немного меньше код.

Есть также примеры на http://code.msdn.com/concrtextras, и здесь вы можете найти что-то полезное.

-Rick

0 голосов
/ 28 июня 2010

Единственная проблема, которую я вижу в опубликованном вами коде, заключается в том, что CMonstersThread не объявлен как __stdcall.

Вы говорите, что в каком-то другом потоке есть проблемы, но, не видя кода, довольно сложно догадаться, в чем его проблемы.

0 голосов
/ 28 июня 2010

Возможно, вы захотите использовать более полнофункциональную библиотеку для воспроизведения музыки и звука, например irrKang .Я не уверен, что winmm.dll даст вам то, что вам нужно.

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