指定 WMA Pro 数据范围

头文件 Mmreg.h 定义值0x0164为 WMA Pro-over-S/PDIF 的波形格式标记:

  #define WAVE_FORMAT_WMASPDIF  0x0164

通过使用头文件 Ksmedia.h 中的DEFINE_WAVEFORMATEX_GUID宏,可以使用波形格式标记来指定相应的格式子类型 GUID,如下所示:

  #define KSDATAFORMAT_SUBTYPE_WMA_SPDIF    \
                      DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_WMASPDIF)

下面的代码示例演示 WaveCyclic 或 WavePci 微型端口驱动程序如何为支持 WMA Pro-over-S/PDIF 和 AC-3-over-S/PDIF 格式的引脚指定 KSDATARANGE_AUDIO 表项:

static KSDATARANGE_AUDIO PinDataRangesSpdifOut[] =
{
  // 48-kHz WMA Pro over S/PDIF
  {
    {
      sizeof(KSDATARANGE_AUDIO),
      0,
      0,
      0,
      STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
      STATICGUIDOF(KSDATAFORMAT_SUBTYPE_WMA_SPDIF),
      STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
    },
    2,       // Max number of channels
    16,      // Minimum number of bits per sample
    16,      // Maximum number of bits per channel
    48000,   // Minimum rate
    48000    // Maximum rate
  },

  // 44.1-kHz WMA Pro over S/PDIF
  {
    {
      sizeof(KSDATARANGE_AUDIO),
      0,
      0,
      0,
      STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
      STATICGUIDOF(KSDATAFORMAT_SUBTYPE_WMA_SPDIF),
      STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
    },
    2,       // Max number of channels
    16,      // Minimum number of bits per sample
    16,      // Maximum number of bits per channel
    44100,   // Minimum rate
    44100    // Maximum rate
  },

  // 48-kHz AC-3 over S/PDIF
  {
    {
      sizeof(KSDATARANGE_AUDIO),
      0,
      0,
      0,
      STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
      STATICGUIDOF(KSDATAFORMAT_SUBTYPE_AC3_SPDIF),
      STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
    },
    2,       // Max number of channels
    16,      // Minimum number of bits per sample
    16,      // Maximum number of bits per channel
    48000,   // Minimum rate
    48000    // Maximum rate
  },
};

在此代码示例中,第一个和第二个数据范围以采样率为 48 kHz 和 44.1 kHz 指定 WMA Pro-over-S/PDIF 数据格式。 使用这两个选项,音频应用程序可以播放以这两种采样率之一录制的 WMA Pro 音频流,前提是外部解码器也可以处理采样率。

WMA Pro 同步帧大小在 48 kHz 和 44.1 kHz 上相同,两个数据范围使用相同的 PCM 参数值--两个通道和每个通道 16 位。 有关使用 PCM 参数指定 WMA Pro-over-S/PDIF 和 AC-3-over-S/PDIF 格式的数据范围的信息,请参阅 非 PCM 流的 S/PDIF 直通传输。

第三个数据范围指定 AC-3-over-S/PDIF 数据格式。 有关详细信息,请参阅 指定 AC-3 数据范围

前面的示例不允许 DirectSound 在 Microsoft Windows 2000 SP2 和 Windows 98 标准版 + 修补程序上处理非 PCM WMA Pro-over-S/PDIF 和 AC-3-over-S/PDIF 格式。 若要启用此功能,需要修改示例代码,以便对于使用说明符KSDATAFORMAT_SPECIFIER_WAVEFORMATEX的三个数据范围中的每一个,必须包含第二个数据范围,但使用说明符KSDATAFORMAT_SPECIFIER_DSOUND除外。 有关示例,请参阅 指定 AC-3 数据范围