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

Posted

技术标签:

【中文标题】WASAPI:IAudioClient->Initialize 成功,即使 IAudioClient->IsFormatSupported 以相同格式失败【英文标题】:WASAPI: IAudioClient->Initialize succeeds even when IAudioClient->IsFormatSupported fails with same format 【发布时间】:2011-10-05 18:24:31 【问题描述】:

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

如果我真的尝试初始化音频客户端,那么有些格式会成功,但在 IsFormatSupported() 中失败。

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

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

【问题讨论】:

【参考方案1】:

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

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

恐怕没有真正实用的方法可以解决这个问题。

【讨论】:

以上是关于WASAPI:IAudioClient->Initialize 成功,即使 IAudioClient->IsFormatSupported 以相同格式失败的主要内容,如果未能解决你的问题,请参考以下文章

IAudioClient::Initialize 返回 (E_InvalidArg,0x80070057,-2147024809)

WASAPI GetDisplayName 返回空白

在 VS 2010 中链接 WASAPI

WASAPI 捕获的数据包不对齐

WASAPI 的问题

WASAPI + windows 商店应用初始化