Мое приложение использует XAudio2 для воспроизведения звука. Когда он вызывает CreateMasteringVoice
он передает NULL
параметру szDeviceId
, который согласно эта страница документации выполняет следующие действия:
Если вы указали параметр NULL или szDeviceId для IXAudio2::CreateMasteringVoice, система использует виртуальный аудиоклиент для представления конечной точки аудио. В этом случае, если базовое устройство рендеринга WASAPI становится недоступным, система автоматически выбирает новое устройство рендеринга звука для рендеринга, обработка звука продолжается, а OnCriticalError не возникает.
Однако я обнаружил, что если все аудиоустройства удалены или отключены, то OnCriticalError
все еще вызывается, и в этот момент, если я когда-нибудь захочу, чтобы звук снова работал в моем приложении, ему нужно вызвать CreateMasteringVoice
еще раз, когда хотя бы одно аудиоустройство будет подключено и включено.
Итак, мой вопрос: как мое приложение сообщает, когда оно должно воссоздать основной голос? (То есть, когда есть хотя бы одно работающее аудиоустройство.) Есть ли лучший способ, кроме как неоднократно пытаться воссоздать мастеринговый голос, пока он не увенчается успехом?
Обратите внимание, что я не могу проверить результат GetDeviceCount
, потому что он был удален с версии XAudio2 2.8.