读取多声道音频

[与此页面关联的功能 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

最后,要使声道以离散方式输出(不折叠到立体声),必须按照以下步骤在输出上设置正确的媒体类型:

  1. 调用 IWMReader::GetOutputFormatCount 以获取相关音频输出支持的格式数。 输出格式索引从零开始。
  2. 对于每种受支持的格式,调用 IWMReader::GetOutputFormat 以检索输出媒体属性对象上的 IWMOutputMediaProps 接口。
  3. 调用 IWMMediaProps::GetMediaType 以检索媒体类型。
  4. 如果检索到的媒体类型是所需的多通道类型,则通过调用 IWMReader::SetOutputProps 对其进行设置。

设置离散输出和扬声器配置后,读取器枚举的输出格式应包括使用 WAVEFORMATEXTENSIBLE 结构的多声道格式。 如果在设置属性之前枚举输出格式,则仅包含 1 或 2 个通道且每个通道最多 16 位的格式。 与其他音频格式一样,应仅使用阅读器枚举的格式;不要自行配置。

注意

仅当应用程序在 Microsoft Windows XP 或更高版本的 Microsoft Windows 上运行时,才能输出多声道音频。

 

输入、流和输出

读取 ASF 文件

输出设置

使用 High-Resolution PCM 音频