Обнаружение прибытия / отключения аудиоустройства
Я хотел бы добавить в свое приложение функцию, которая позволит обнаруживать приход и отключение устройств воспроизведения / захвата в ОС Windows. Как и в Skype - когда вы отключаете устройство - оно показывает уведомление о том, что устройство потеряно, и, например, просит вас выбрать другое.
Я использую DirectSound. Я думаю, что может быть два пути решения этой проблемы.
- В отдельном потоке вызывайте обратный вызов EnumerateDevices и вручную обнаруживайте изменения.
- Каким-то образом обработать сообщение WM_DEVICECHANGE. Но AFAIK WM_DEVICECHANGE имеет некоторые ограничения. Кстати, он не работает со "умными" звуковыми картами, которые позволяют подключать любые устройства к любой раковине. Если я отключаю устройство в диспетчере устройств - приходит WM_DEVICHANGE. Если я вручную отключу разъем наушников - ничего не произойдет. Но мне нужно справиться с такой ситуацией.
Пожалуйста, посоветуйте правильный подход.
Заранее спасибо.
1 ответ
Вы можете зарегистрироваться для добавления / удаления уведомлений аудиоустройств в Windows Vista и новее, используя Core Audio SDK
IMMDeviceEnumerator:: RegisterEndpointNotificationCallback
См. http://msdn.microsoft.com/en-us/library/windows/desktop/dd371403(v=vs.85).aspx