检测音频设备的到达/断开

时间:2010-12-28 11:59:56

标签: c++ audio directsound

我想为我的应用添加功能,以便检测Windows操作系统上播放/捕获设备的到达和断开连接。就像在Skype中 - 当你拔掉设备时 - 它会显示设备丢失的通知,例如请你选择另一个。

我正在使用DirectSound。我认为有两种方法可以解决这个问题。

  1. 在单独的线程中调用EnumerateDevices回调并手动检测更改。
  2. 以某种方式处理WM_DEVICECHANGE消息。但AFAIK WM_DEVICECHANGE有一些限制。顺便说一句,它不适用于“智能”音频卡 - 允许将任何类型的设备插入任何接收器。如果我在设备管理器中禁用设备 - WM_DEVICHANGE到达。如果我手动拔下我的耳机插孔 - 没有任何反应。但我需要处理这种情况。
  3. 请建议正确的方法。

    提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以使用Core Audio SDK

注册在Windows Vista及更高版本中添加/删除音频设备通知

IMMDeviceEnumerator :: RegisterEndpointNotificationCallback

请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/dd371403(v=vs.85).aspx