指定 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 数据范围。