Windows 波形函数 - 用于 8 和 16 以外的位深度的 WAVEOUTCAPS

Windows Waveform Functions - WAVEOUTCAPS for bitdepths other than 8 and 16

WAVEOUTCAPS 结构的 Microsoft documentation 列出了音频设备可以支持的多种格式:

我没有看到这里列出任何 24 位变量,虽然我已经确认我的声卡能够通过调用 WaveOutOpen 打开 24 位输出(并通过播放 24 位音频文件那个输出)。

我猜微软在某处为 18/20/24/32/48/64 位输出定义了额外的变量,但我找不到它们。我尝试在网上搜索但没有任何结果,我尝试使用 Visual Studio 搜索我当前名称 space 中以“WAVE_FORMAT_”开头的变量,但没有找到任何额外定义的变量这样的格式。

是否可以使用函数 WaveOutGetDevCap() 或任何类似函数检查 Windows 上的 4/18/20/24/32/48/64 位输出可用性?如果是,怎么做?

waveOutXxx 是 legacy API 你,一般来说,现在不应该被使用。此 API 是 real 音频 API 之上的仿真层,不必支持 [=] 时不存在的 24 位场景10=]。没有为较新的格式定义特定的新常量,而且它们太多了,不可能每个都有一个单独的位。

您可以编写一个 WAVEFORMATEX 结构来描述您的高位数格式(您通常会使用它的 WAVEFORMATEXTENSIBLE 变体)并根据 waveOutOpen 函数检查它。

或者,更确切地说,使用 WASAPI 和 IAudioClient::Initialize,请参阅 Rendering a Stream 了解详细信息以及那里使用 WAVEFORMATEX 结构的方式。