读取多声道音频
[与此页面关联的功能 Windows Media Format 11 SDK 是一项旧功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 如果可能,Microsoft 强烈建议新代码使用源读取器和接收器编写器,而不是 Windows Media 格式 11 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
Windows Media Audio 9 专业编解码器可以编码多声道音频 (两个以上的声道) 。 读取包含多声道音频的文件时,必须正确配置输出,否则音频将以较低的质量和立体声提供。 若要设置多声道音频传送的输出,必须设置两个输出设置:g_wszEnableDiscreteOutput和g_wszSpeakerConfig。
将 g_wszEnableDiscreteOutput 设置为 TRUE 将设置编解码器以提供高清音频输出。 高清音频由 Windows Media Audio 9 编解码器编码,具有 24 位立体声或多声道样本。 如果此设置为 FALSE,则仅提供 16 位立体声输出。
播放计算机上的扬声器数设置为g_wszSpeakerConfig。 此设置是设置为下表中列出的 DirectSound 扬声器常量之一的 DWORD 值。 若要解析编译器的这些常量名称,必须包含 dsound.h。
常数 | Value | 描述 |
---|---|---|
DSSPEAKER_DIRECTOUT | 0x00000000 | 音频直接传递,无需为扬声器配置。 |
DSSPEAKER_HEADPHONE | 0x00000001 | 客户端计算机配备了耳机。 |
DSSPEAKER_MONO | 0x00000002 | 客户端计算机配备了单声道扬声器。 |
DSSPEAKER_QUAD | 0x00000003 | 客户端计算机配备了四声扬声器。 |
DSSPEAKER_STEREO | 0x00000004 | 客户端计算机配备了立体声扬声器。 |
DSSPEAKER_SURROUND | 0x00000005 | 客户端计算机配备了四声道环绕声扬声器。 |
DSSPEAKER_5POINT1 | 0x00000006 | 客户端计算机配备了五个扬声器和一个低音炮。 |
DSSPEAKER_7POINT1 | 0x00000007 | 客户端计算机配备了七个扬声器和一个低音炮。 |
若要设置这些设置,请使用 IWMReaderAdvanced2::SetOutputSetting。
最后,要使声道以离散方式输出(不折叠到立体声),必须按照以下步骤在输出上设置正确的媒体类型:
- 调用 IWMReader::GetOutputFormatCount 以获取相关音频输出支持的格式数。 输出格式索引从零开始。
- 对于每种受支持的格式,调用 IWMReader::GetOutputFormat 以检索输出媒体属性对象上的 IWMOutputMediaProps 接口。
- 调用 IWMMediaProps::GetMediaType 以检索媒体类型。
- 如果检索到的媒体类型是所需的多通道类型,则通过调用 IWMReader::SetOutputProps 对其进行设置。
设置离散输出和扬声器配置后,读取器枚举的输出格式应包括使用 WAVEFORMATEXTENSIBLE 结构的多声道格式。 如果在设置属性之前枚举输出格式,则仅包含 1 或 2 个通道且每个通道最多 16 位的格式。 与其他音频格式一样,应仅使用阅读器枚举的格式;不要自行配置。
注意
仅当应用程序在 Microsoft Windows XP 或更高版本的 Microsoft Windows 上运行时,才能输出多声道音频。
相关主题