【问题标题】:Windows Core Audio Api get all supported formats on capture deviceWindows Core Audio Api 在捕获设备上获取所有支持的格式
【发布时间】:2023-03-23 16:06:01
【问题描述】:

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

我想使用 Windows Core Audio Api 来执行此操作,但是我真的找不到合适的接口来读取这些格式。

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

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

【问题讨论】:

标签: c++ winapi audio


【解决方案1】:

IMMDeviceEnumerator接口可以帮助你获取指向你需要的IMMDevice的指针(IMMDevice接口代表一个音频端点设备:渲染或捕获):

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

但是您可以通过使用 IMMDevice 属性存储 (IMMDevice::OpenPropertyStore) 获取用户在 DefaultFormat 部分中选择的格式,然后检查 PKEY_AudioEngine_DeviceFormat 键(这里是描述:MSDN: PKEY_AudioEngine_DeviceFormat)。

阅读会很有用:

【讨论】:

  • 关于 IAudioClient::IsFormatSupported 解决方案,您需要提供 AUDCLNT_SHAREMODE_EXCLUSIVE 标志。如果没有这个标志,音频客户端将支持比音频设备支持更多的输入格式。
猜你喜欢
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
相关资源
最近更新 更多