Windows Core Audio Api在捕获设备上获取所有支持的格式



我想在设备属性 -> 高级 -> 默认格式 部分中枚举捕获设备上所有支持的格式。

我想使用Windows Core Audio Api来做到这一点,但是我找不到合适的界面来读取这些格式。

https://msdn.microsoft.com/en-us/library/windows/desktop/dd370858(v=vs.85).aspx#

知道哪个界面可以为我提供这样的功能吗?

有一个 IMMDeviceEnumerator 接口,可以帮助您获取指向所需 IMMDevice 的指针(IMMDevice接口表示音频端点设备:渲染或捕获):

  • 您可以使用 IMMDeviceEnumerator::EnumAudioEndpoint 方法获取系统中的所有活动捕获设备,或者
  • 可以调用 IMMDeviceEnumerator::GetDefaultAudioEndpoint 来获取指向默认捕获设备的指针。
无论如何,当你有指向需要查找支持的格式的IMMDevice的

指针时,你可以使用IMMDevice::Activate 方法获取指向IAudioClient接口的指针。 IAudioClient接口允许您检查设备是否支持音频格式(方法IAudioClient::IsFormatSupported,音频格式由WAVEFORMATEX结构描述)。不幸的是,目前Core Audio API中没有方法可以返回设备支持的格式列表,因此您需要枚举WAVEFORMATEX成员结构的可能值,并自行检查设备是否支持每种格式。

但是,您可以使用 IMMDevice 属性存储 (IMMDevice::OpenPropertyStore) 获取用户在 DefaultFormat 部分中选择的格式,然后检查PKEY_AudioEngine_DeviceFormat键(此处为说明:MSDN:PKEY_AudioEngine_DeviceFormat)。

阅读以下内容会很有用:

  • MSDN:设备格式
  • MSDN:设备属性
  • MSDN:音频终结点属性

最新更新