波形图结构 (mmreg.h)

WAVEATEX 结构指定波形音频流的数据格式。

语法

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

指定追加到波形图X 结构的末尾的额外格式信息的大小(以字节为单位)。 非 PCM 格式可以使用此信息来存储 wFormatTag 的额外属性。 如果 wFormatTag 不需要额外的信息,请将此成员设置为零。 对于WAVE_FORMAT_PCM格式,客户端应忽略此成员 (其值隐式为零) 。 由于所有客户端可能不遵循此规则,因此我们建议你针对WAVE_FORMAT_PCM格式初始化 cbSize 为零。

注解

波形图结构只能描述 波形图XTENSIBLE 结构可以描述的格式的子集。 例如,波形图X可以描述单声道或 (双声道) 立体声脉冲代码调节的 (PCM) 流,其中包含 8 位或 16 位整数样本值,或者具有 32 位浮点样本值。 此外,波形图X 可以描述常用的非 PCM 格式,如 AC-3 和 WMA Pro。

波形图X 可以明确描述单声道或立体声 PCM 格式,每个样本的有效位数与示例容器大小相同。 若要描述具有两个以上的通道的 PCM 格式,需要波形图XTENSIBLE,它具有通道掩码来指定扬声器配置 (,即通道到物理扬声器位置的映射) 。 若要描述每个样本的有效位数小于示例容器大小 (的 PCM 格式,) 存储在三字节容器中的 20 位样本需要波形图XTENSIBLE,该格式指定有效样本位数和样本容器大小。

16 位格式标记在头文件 mmreg.h ((例如,WAVE_FORMAT_MPEG) )中定义 16 位格式标记的非 PCM 格式。 FORMATATEX 的 wFormatTag 成员包含格式标记。 指定一种非 PCM 格式,该格式标记在 Mmreg.h 中未由波形波形图XTENSIBLE 结构定义,该结构包含标识格式的 GUID。 如有必要,硬件供应商可以独立生成 GUID 值来标识新格式。 不需要向 Microsoft 注册 GUID。

有关波形图与波形图XTENSIBLE 之间的差异的详细信息,请参阅 可扩展Wave-Format描述符

wFormatTag 成员设置为 Mmreg.h 中定义的波形格式标记之一。 下表列出了一些更常见的非特权格式的标记。

wFormatTag 值 含义
WAVE_FORMAT_PCM PCM (以整数格式调整的脉冲代码) 数据。
WAVE_FORMAT_IEEE_FLOAT IEEE 浮点格式的 PCM 数据。
WAVE_FORMAT_DRM 受 Microsoft Digital Rights Management) 保护的数字音频内容的 DRM 编码格式 (。
WAVE_FORMAT_EXTENSIBLE 可扩展波形图X结构 (请参阅 波形图XTENSIBLE) 。
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 (aka Dolby Digital) over S/PDIF.
WAVE_FORMAT_WMASPDIF Windows 媒体音频 (WMA) Pro over S/PDIF。
 

有关 WAVE_FORMAT_Xxx 格式的完整列表,请参阅 Mmreg.h。

WAVEATEX 与 PCMWAVEFORMAT 结构几乎相同,这是用于指定 PCM 格式的过时结构。 唯一的区别是,WAVEATEX 包含 cbSize 成员,PCMWAVEFORMAT 不。 按照约定,当 wFormatTag = WAVE_FORMAT_PCM (时,应忽略 cbSize,因为 cbSize 隐式为零) 。 此约定允许驱动程序软件在 PCM 格式的情况下以相同的方式处理WAVEATEX 和 PCMWAVEFORMAT 结构。 有关 PCMWAVEFORMAT 的详细信息,请参阅Microsoft Windows SDK文档。

如果 wFormatTag = WAVE_FORMAT_PCM或 wFormatTag = WAVE_FORMAT_IEEE_FLOAT,请将 cbSize 设置为零。 对于 wFormatTag 的其他所有值, cbSize 指定追加到波形图X 结构的附加格式数据的字节数。

如果 wFormatTag = WAVE_FORMAT_EXTENSIBLE,请将 cbSize 设置为 sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) 加上追加到波形图XTENSIBLE 结构的任何特定于格式的数据的大小。

要求

   
标头 mmreg.h (包括 mmsystem.h、mmreg.h、mmsystem.h)

请参阅

波形图XTENSIBLE