Моя игра приложение использует XAudio2.lib и был предназначен для Windows 8 и Windows, 10. Код следующим образом:Почему OnCriticalError вызывается в DirectX версии XAudio2?
#include <Xaudio2.h>
HRESULT hr = XAudio2Create(&s_audioEngine, 0);
hr = s_audioEngine->CreateMasteringVoice(&s_masteringVoice);
s_audioEngine->RegisterForCallbacks(&s_callbacks);
и все было хорошо. Я мог бы отключить гарнитуры, а затем подключить их обратно, и проблем не было. IXAudio2EngineCallback::OnCriticalError(HRESULT error)
никогда не назывался.
Все было в порядке, пока мы не решили поддерживать Windows 7. Я узнал, что в этом случае я должен использовать версию XAudio2 DirectX. Поэтому я _WIN32_WINNT=0x0601
в определениях препроцессора, удалены XAudio2.lib
от зависимостей и изменил код
#if (_WIN32_WINNT >= 0x0602 /*_WIN32_WINNT_WIN8*/)
#include <Xaudio2.h>
#else
#include <C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\xaudio2.h>
#endif
Теперь запускает, играет звук, но когда я отключаю гарнитуру, она вызывает IXAudio2EngineCallback::OnCriticalError
, что означает, что я должен перезапустить звуковой движок и воссоздавать все аудиоматериалы.
Я не хочу иметь такую боль, так что я читаю MSDN, и я вижу:
Если указано значение NULL или szDeviceId параметр для IXAudio2 :: CreateMasteringVoice, то система использует виртуальный Аудио Клиент для представления конечной точки аудио. В этом случае, если , лежащее в основе устройства визуализации WASAPI, становится недоступным, система автоматически выбирает новое устройство рендеринга аудио для рендеринга, обработка звука продолжается, а OnCriticalError не поднимается.
Что это значит? Что такое
Если вы указали параметр NULL или szDeviceId?
Может кто-нибудь объяснить, как я могу позвонить CreateMasteringVoice
, чтобы избежать OnCriticalError
?
Я не вижу этого примечания. Я вижу, цитирую: «Обратите внимание, что версия CreateMasteringVoice DirectX SDK XAUDIO2 приняла аргумент DeviceIndex вместо аргумента szDeviceId и StreamCategory, что отражает изменения, необходимые для стандартной модели перечисления устройств Windows». Так звучит так, будто вы ввернуты, когда используете 5-летний SDK. –
Я знаю, что CreateMasteringVoice имеет несколько разные подписи в DX и Windows SDK. Но по умолчанию параметры являются нулями, поэтому он компилируется просто отлично. Поэтому я до сих пор не понимаю, как избежать ошибок при удалении наушников. – Nick