WAVEFORMATEXTENSIBLE 结构 (mmreg.h)
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
WAVEFORMATEXTENSIBLE 结构定义波形音频数据的格式,这些格式具有两个以上的通道或高于 WAVEFORMATEX 允许的采样分辨率。 它还可用于定义由 WAVEFORMATEX 定义的任何格式。
语法
typedef struct {
WAVEFORMATEX Format;
union {
WORD wValidBitsPerSample;
WORD wSamplesPerBlock;
WORD wReserved;
} Samples;
DWORD dwChannelMask;
GUID SubFormat;
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
成员
Format
指定基本格式的 WAVEFORMATEX 结构。 wFormatTag 成员必须WAVE_FORMAT_EXTENSIBLE。 cbSize 成员必须至少为 22。
Samples
描述示例格式的联合。
Samples.wValidBitsPerSample
信号中的精度位数。 通常等于 WAVEFORMATEX.wBitsPerSample。 但是, wBitsPerSample 是容器大小,必须是 8 的倍数,而 wValidBitsPerSample 可以是任何不超过容器大小的值。 例如,如果格式使用 20 位样本, 则 wBitsPerSample 必须至少为 24,但 wValidBitsPerSample 为 20。
Samples.wSamplesPerBlock
一个压缩的音频数据块中包含的样本数。 此值用于缓冲区估计。 此值用于每个块中样本数固定的压缩格式。 如果每个压缩的音频数据块中包含可变数量的样本,则可以将此值设置为 0。 在这种情况下,需要通过其他方式获取缓冲区估计和位置信息。
Samples.wReserved
保留供操作系统内部使用。 设置为 0。
dwChannelMask
位掩码,用于指定流中通道到说话人位置的分配。
SubFormat
数据的子格式,例如KSDATAFORMAT_SUBTYPE_PCM。 子格式信息类似于 WAVEFORMATEX 结构的 wFormatTag 成员中的 标记所提供的信息。
备注
WAVEFORMATEXTENSIBLE 可以描述 由 WAVEFORMATEX 描述的任何格式,但为两个以上的通道、每个样本的位数以及新的压缩方案提供更高的精度支持。
WAVEFORMATEXTENSIBLE 可以安全地转换为 WAVEFORMATEX,因为它只是配置 由 WAVEFORMATEX.cbSize 指定的额外字节。
dwChannelMask 成员指定多通道流中存在的通道。 最小有效位对应于左前扬声器,下一个最小有效位对应于右前扬声器,依此。 位按重要性顺序进行定义,如下所示。
扬声器位置 | 标记位 |
---|---|
SPEAKER_FRONT_LEFT | 0x1 |
SPEAKER_FRONT_RIGHT | 0x2 |
SPEAKER_FRONT_CENTER | 0x4 |
SPEAKER_LOW_FREQUENCY | 0x8 |
SPEAKER_BACK_LEFT | 0x10 |
SPEAKER_BACK_RIGHT | 0x20 |
SPEAKER_FRONT_LEFT_OF_CENTER | 0x40 |
SPEAKER_FRONT_RIGHT_OF_CENTER | 0x80 |
SPEAKER_BACK_CENTER | 0x100 |
SPEAKER_SIDE_LEFT | 0x200 |
SPEAKER_SIDE_RIGHT | 0x400 |
SPEAKER_TOP_CENTER | 0x800 |
SPEAKER_TOP_FRONT_LEFT | 0x1000 |
SPEAKER_TOP_FRONT_CENTER | 0x2000 |
SPEAKER_TOP_FRONT_RIGHT | 0x4000 |
SPEAKER_TOP_BACK_LEFT | 0x8000 |
SPEAKER_TOP_BACK_CENTER | 0x10000 |
SPEAKER_TOP_BACK_RIGHT | 0x20000 |
dwChannelMask 中指定的通道必须按规定顺序存在, (从最低有效位向上) 。 例如,如果只指定SPEAKER_FRONT_LEFT和SPEAKER_FRONT_RIGHT,则左前扬声器的示例必须首先出现在交错流中。 dwChannelMask 中设置的位数应与 WAVEFORMATEX.nChannels 中指定的通道数相同。
为了向后兼容,可由独立 WAVEFORMATEX 结构指定的任何波形格式也可以由 WAVEFORMATEXTENSIBLE 结构定义。 因此,mmreg.h 中的每个波形格式标记都有相应的 SubFormat GUID。 下表显示了一些典型的波形格式标记及其相应的 SubFormat GUID。 这些 GUID 在 Ksmedia.h 中定义。
Wave-Format 标记 | SubFormat GUID |
---|---|
WAVE_FORMAT_PCM | KSDATAFORMAT_SUBTYPE_PCM |
WAVE_FORMAT_IEEE_FLOAT | KSDATAFORMAT_SUBTYPE_IEEE_FLOAT |
WAVE_FORMAT_DRM | KSDATAFORMAT_SUBTYPE_DRM |
WAVE_FORMAT_ALAW | KSDATAFORMAT_SUBTYPE_ALAW |
WAVE_FORMAT_MULAW | KSDATAFORMAT_SUBTYPE_MULAW |
WAVE_FORMAT_ADPCM | KSDATAFORMAT_SUBTYPE_ADPCM |
由于 WAVEFORMATEXTENSIBLE 是 WAVEFORMATEX 的扩展版本,因此它可以描述不能单独由 WAVEFORMATEX 描述的其他格式。 供应商可以自由定义自己的 SubFormat GUID,以识别不存在波形格式标记的专有格式。
对于特定的扩展格式,以下结构定义为 WAVEFORMATEXTENSIBLE。
定义 | SubFormat 的值 |
---|---|
WAVEFORMATIEEEFLOATEX | KSDATAFORMAT_SUBTYPE_IEEE_FLOAT |
WAVEFORMATPCMEX | KSDATAFORMAT_SUBTYPE_PCM |
要求
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
标头 | mmreg.h |