windows - WASAPI:即使 IAudioClient->IsFormatSupported 以相同的格式失败,IAudioClient->Initialize 也会成功

标签 windows session audio wasapi

我试图找出独占模式下特定音频设备支持哪些输出格式。 为此,我正在使用 IAudioClient->IsFormatSupported(),根据文档,它应该可用于此目的。 不幸的是,对于我尝试传递的几乎所有格式,它都会返回 AUDCLNT_E_UNSUPPORTED_FORMAT,默认的 2 声道 44.1khz 音频除外。

如果我真的尝试初始化 audioclient,有一些格式成功了,但在 IsFormatSupported() 中失败了。

只是尝试初始化每种格式不是一种选择,因为这可能会导致其他应用程序停止音频。

有没有其他人看到过这种行为,或者知道是否有其他方法可以找到特定音频设备支持的格式?

最佳答案

我也看到了这种行为。 IsFormatSupported 似乎只接受在 Windows 播放设备设置中标记为“支持”的内容,但 Initialize 似乎最终会询问驱动程序是否确实可行。

在我的具体情况下,我有一个使用 HDMI 作为输出的 Xoxar HDAV1.3 设置。两种播放设备始终可用:扬声器和 S/PDIF 直通设备。例如,如果我尝试为 S/PDIF 播放设备请求 6 个 channel ,IsFormatSupported 将拒绝它(理论上 S/PDIF 仅支持 2 个,这就是我在设置中看到的),但调用 Initialize 会成功并工作(毕竟它输出 HDMI,支持 6 个 channel )。谈论误导性的设备名称!

恐怕没有真正可行的方法来解决这个问题。

关于windows - WASAPI:即使 IAudioClient->IsFormatSupported 以相同的格式失败,IAudioClient->Initialize 也会成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7665865/

相关文章:

ios - 如何更新 spotify session ?

linux - 如何在linux中提取进程层次结构信息?

java - 为什么我无法激活 4 个按钮来开始录音?

android - 如何在 Android Studio 上集成外部 SDK?

php - Windows 上的 PEAR 目录问题

c - Win32 : Returning a minimized and hidden window to top

c++ - 如何以编程方式在 Windows、Mac 和 Ubuntu 中设置音量?

python - 如何限制来自任何浏览器的一个 session 以获取 flask 中的用户名?

c++ - 尝试从Win32 WASAPI C++使用 'Capturing a Stream"创建wav文件

c# - 什么实际处理 Windows 壁纸的绘制?