WAVEFORMATEX 结构 (mmreg.h)
WAVEFORMATEX 结构指定波形音频流的数据格式。
语法
typedef struct tWAVEFORMATEX {
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;
成员
wFormatTag
指定波形音频格式类型。 有关更多信息,请参见下面的“备注”部分。
nChannels
指定音频数据的通道数。 对于单声道音频,将此成员设置为 1。 对于立体声,将此成员设置为 2。
nSamplesPerSec
指定应播放或录制每个通道的采样频率。 如果 wFormatTag = WAVE_FORMAT_PCM,则 nSamplesPerSec 的常见值为 8.0 kHz、11.025 kHz、22.05 kHz 和 44.1 kHz。 例如,若要指定 11.025 kHz 的采样频率,请将 nSamplesPerSec 设置为 11025。 对于非 PCM 格式,应根据格式标记的制造商规范计算此成员。
nAvgBytesPerSec
指定所需的平均数据传输速率(以字节/秒为单位)。 此值可用于估算缓冲区大小。
nBlockAlign
指定块对齐方式(以字节为单位)。 块对齐方式是 wFormatTag 格式类型的最小原子单元数据的大小。 如果 wFormatTag = WAVE_FORMAT_PCM 或 wFormatTag = WAVE_FORMAT_IEEE_FLOAT,请将 nBlockAlign 设置为 (nChannels*wBitsPerSample)/8
,这是单个音频帧的大小。 对于非 PCM 格式,应根据制造商的格式标记规范计算此成员。
播放和录制软件应一次处理 多个 nBlockAlign 字节的数据。 写入设备以及从设备读取的数据应始终从块的开头开始。
wBitsPerSample
为 wFormatTag 指定的格式类型指定每个样本的位数。 如果 wFormatTag = WAVE_FORMAT_PCM,则应将 wBitsPerSample 设置为 8 或 16。 如果 wFormatTag = WAVE_FORMAT_IEEE_FLOAT,则应将 wBitsPerSample 设置为 32。 对于非 PCM 格式,根据制造商的格式标记规范设置此成员的值。 某些压缩方案无法定义 wBitsPerSample 的值。 在这种情况下,请将 wBitsPerSample 设置为零。
cbSize
指定追加到 WAVEFORMATEX 结构末尾的额外格式信息的大小(以字节为单位)。 非 PCM 格式可以使用此信息来存储 wFormatTag 的额外属性。 如果 wFormatTag 不需要额外的信息,请将此成员设置为零。 对于WAVE_FORMAT_PCM格式,客户端应忽略此成员 (其值为隐式零) 。 由于所有客户端可能都未遵循此规则,因此建议将 cbSize 初始化为WAVE_FORMAT_PCM格式。
注解
WAVEFORMATEX 结构只能描述由 WAVEFORMATEXTENSIBLE 结构描述的格式的子集。 例如,WAVEFORMATEX 可以描述单声道或 (双声道) 立体声脉冲代码调节 (具有 8 位或 16 位整数样本值或 32 位浮点样本值的 PCM) 流。 此外,WAVEFORMATEX 可以描述常用的非 PCM 格式,例如 AC-3 和 WMA Pro。
WAVEFORMATEX 可以明确描述单声道或立体声 PCM 格式,每个样本的有效位数与样本容器大小相同。 若要描述具有两个以上声道的 PCM 格式,需要使用 WAVEFORMATEXTENSIBLE,该格式具有一个通道掩码来指定扬声器配置 (即将通道映射到物理扬声器位置) 。 例如,为了描述每个样本的有效位数小于样本容器大小 (的 PCM 格式,存储在三字节容器) 中的 20 位样本需要 WAVEFORMATEXTENSIBLE,它同时指定有效样本位数和样本容器大小。
WAVEFORMATEX 可以描述头文件 Mmreg.h 中为其定义了 16 位格式标记的非 PCM 格式, (例如,WAVE_FORMAT_MPEG) 。 WAVEFORMATEX 的 wFormatTag 成员包含格式标记。 指定一种非 PCM 格式,该格式标记未在 Mmreg.h 中由 WAVEFORMATEXTENSIBLE 结构定义,该结构包含标识格式的 GUID。 如有必要,硬件供应商可以独立生成 GUID 值来标识新格式。 不需要向 Microsoft 注册 GUID。
有关 WAVEFORMATEX 和 WAVEFORMATEXTENSIBLE 之间的差异的详细信息,请参阅 Extensible Wave-Format 描述符。
wFormatTag 成员设置为 Mmreg.h 中定义的波形格式标记之一。 下表列出了一些更常见的非特权格式的标记。
wFormatTag 值 | 含义 |
---|---|
WAVE_FORMAT_PCM | PCM (整数格式的脉冲代码调节) 数据。 |
WAVE_FORMAT_IEEE_FLOAT | 采用 IEEE 浮点格式的 PCM 数据。 |
WAVE_FORMAT_DRM | 受 Microsoft 数字版权管理) 保护的数字音频内容的 DRM 编码格式 (。 |
WAVE_FORMAT_EXTENSIBLE | 可扩展 WAVEFORMATEX 结构 (请参阅 WAVEFORMATEXTENSIBLE) 。 |
WAVE_FORMAT_ALAW | A-law 编码格式。 |
WAVE_FORMAT_MULAW | Mu-law 编码格式。 |
WAVE_FORMAT_ADPCM | ADPCM (自适应差分脉冲代码调节) 数据。 |
WAVE_FORMAT_MPEG | MPEG-1 数据格式 (流符合 ISO 11172-3 音频规范) 。 |
WAVE_FORMAT_DOLBY_AC3_SPDIF | AC-3 (又名 Dolby Digital) over S/PDIF。 |
WAVE_FORMAT_WMASPDIF | Windows Media Audio (WMA) Pro over S/PDIF。 |
有关WAVE_FORMAT_Xxx 格式的完整列表,请参阅 Mmreg.h。
WAVEFORMATEX 几乎与 PCMWAVEFORMAT 结构相同,后者是用于指定 PCM 格式的过时结构。 唯一的区别是 WAVEFORMATEX 包含 cbSize 成员,而 PCMWAVEFORMAT 不包含。 按照约定,当 wFormatTag = WAVE_FORMAT_PCM (时应忽略 cbSize,因为 cbSize) 隐式为零。 此约定允许驱动程序软件在 PCM 格式的情况下以相同的方式处理 WAVEFORMATEX 和 PCMWAVEFORMAT 结构。 有关 PCMWAVEFORMAT 的详细信息,请参阅Microsoft Windows SDK文档。
如果 wFormatTag = WAVE_FORMAT_PCM 或 wFormatTag = WAVE_FORMAT_IEEE_FLOAT,请将 cbSize 设置为零。 对于 wFormatTag 的所有其他值, cbSize 指定追加到 WAVEFORMATEX 结构的附加格式数据的字节数。
如果 wFormatTag = WAVE_FORMAT_EXTENSIBLE,请将 cbSize 设置为 sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX)
加上追加到 WAVEFORMATEXTENSIBLE 结构的任何特定于格式的数据的大小。
要求
标头 | mmreg.h (包括 mmsystem.h、mmreg.h、mmsystem.h) |