Windows Core Audio Api在捕获设备上获取所有支持的格式
Windows Core Audio Api get all supported formats on capture device
我想在设备属性 -> 高级 -> 默认格式 部分中枚举捕获设备上所有支持的格式。
我想使用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::Activate 方法获取指向IAudioClient接口的指针。 IAudioClient
接口允许您检查设备是否支持音频格式(方法IAudioClient::IsFormatSupported,音频格式由WAVEFORMATEX结构描述)。不幸的是,目前Core Audio API中没有方法可以返回设备支持的格式列表,因此您需要枚举WAVEFORMATEX成员结构的可能值,并自行检查设备是否支持每种格式。
但是,您可以使用 IMMDevice 属性存储 (IMMDevice::OpenPropertyStore) 获取用户在 DefaultFormat 部分中选择的格式,然后检查PKEY_AudioEngine_DeviceFormat
键(此处为说明:MSDN:PKEY_AudioEngine_DeviceFormat)。
阅读以下内容会很有用:
- MSDN:设备格式
- MSDN:设备属性
- MSDN:音频终结点属性
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 编译时未启用intel oneApi CUDA支持
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用CMake检测支持的C++标准
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 如何获取具有 Freetype2 的真正类型字体支持的代码点列表 C++
- 如何在 SDL2 中获取视频卡的所有支持分辨率
- 为了支持移动语义,应通过unique_ptr,值或rvalue获取功能参数
- Windows Core Audio Api在捕获设备上获取所有支持的格式
- QT https SSL支持静态QT静态程序构建 - 获取“协议”https“未知”
- C++ 获取支持的相机分辨率和帧速率 OSX
- 获取所有支持的屏幕分辨率
- 无法在Qt 5.0.2(Linux)中使用QCamera获取相机支持的分辨率以进行图像捕获