Я следил за учебным пособием на веб-сайте Microsoft и создал свою собственную структуру классов SoundEngine и Sound, чтобы абстрагировать код в main, однако всякий раз, когда я делаю вызов, такой как batmanWav->play()
, он будет воспроизводить звук, только если я напишу std::cin.get()
или system("PAUSE")
Почему это? Я попытаюсь перенести это в игру, над которой уже работали, но я, очевидно, не хочу, чтобы игра останавливалась каждый раз, когда воспроизводится звук.
РЕДАКТИРОВАТЬ: меня попросили показать код, в котором есть проблемы
int main()
{
CoInitializeEx(nullptr, COINIT_MULTITHREADED);
Sound batman("batman.wav");
Sound alien("alien.wav");
alien.play();
batman.play();
system("PAUSE");
CoUninitialize();
}
Звук.cpp
HRESULT Sound::play()
{
HRESULT hr = S_OK;
if (FAILED(hr = pSourceVoice->Start(0)))
return hr;
return hr;
}
Для каждого объекта Sound я инициализировал исходный голос, и каждый из них ссылается на один и тот же основной голос и объект IXAudio2 *pXAudio2
. Код, который я использовал для загрузки данных волнового файла, был взят прямо из документов MSDN.
SoundEngine
иSound
, если это необходимо. - person Nicholas Hernandez   schedule 03.06.2018CoUninitialize()
, вероятно, остановит звуки до того, как они начнут воспроизводиться. А если бы это было не так, программа завершилась бы до того, как начали бы воспроизводиться звуки. - person Galik   schedule 03.06.2018