WAVEFORMATEX

The WAVEFORMATEX structure defines the format of waveform-audio data.
Only format information common to all waveform-audio data formats is included
in this structure. For formats that require additional information, this
structure is included as the first member in another structure, along with the
additional information.
typedef struct {
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
} WAVEFORMATEX;
Members
-
wFormatTag
-
Waveform-audio format type. Format tags are registered with Microsoft
Corporation for many compression algorithms. A complete list of format tags
can be found in the MMREG.H header file.
-
nChannels
-
Number of channels in the waveform-audio data. Monaural data uses one channel
and stereo data uses two channels.
-
nSamplesPerSec
-
Sample rate, in samples per second (hertz), that each channel should be played
or recorded. If wFormatTag is WAVE_FORMAT_PCM, then common values for nSamplesPerSec
are 8.0 kHz, 11.025 kHz, 22.05 kHz, and 44.1 kHz. For non-PCM formats, this
member must be computed according to the manufacturer’s specification of the
format tag.
-
nAvgBytesPerSec
-
Required average data-transfer rate, in bytes per second, for the format tag.
If wFormatTag is WAVE_FORMAT_PCM, nAvgBytesPerSec should be
equal to the product of nSamplesPerSec and nBlockAlign. For
non-PCM formats, this member must be computed according to the manufacturer’s
specification of the format tag.
Playback and record software can estimate buffer sizes by using the nAvgBytesPerSec
member.
-
nBlockAlign
-
Block alignment, in bytes. The block alignment is the minimum atomic unit of
data for the wFormatTag format type. If wFormatTag is
WAVE_FORMAT_PCM, nBlockAlign should be equal to the product of nChannels
and wBitsPerSample divided by 8 (bits per byte). For non-PCM formats,
this member must be computed according to the manufacturer’s specification of
the format tag.
Playback and record software must process a multiple of nBlockAlign
bytes of data at a time. Data written and read from a device must always start
at the beginning of a block. For example, it is illegal to start playback of
PCM data in the middle of a sample (that is, on a non-block-aligned boundary).
-
wBitsPerSample
-
Bits per sample for the wFormatTag format type. If wFormatTag is
WAVE_FORMAT_PCM, then wBitsPerSample should be equal to 8 or 16. For
non-PCM formats, this member must be set according to the manufacturer’s
specification of the format tag. Note that some compression schemes cannot
define a value for wBitsPerSample, so this member can be zero.
-
cbSize
-
Size, in bytes, of extra format information appended to the end of the WAVEFORMATEX
structure. This information can be used by non-PCM formats to store extra
attributes for the wFormatTag. If no extra information is required by
the wFormatTag, this member must be set to zero. Note that for
WAVE_FORMAT_PCM formats (and only WAVE_FORMAT_PCM formats), this member is
ignored.
Remarks
An example of a format that uses extra information is the Microsoft Adaptive
Delta Pulse Code Modulation (MS-ADPCM) format. The wFormatTag for
MS-ADPCM is WAVE_FORMAT_ADPCM. The cbSize member will typically be set
to 32. The extra information stored for WAVE_FORMAT_ADPCM is coefficient pairs
required for encoding and decoding the waveform-audio data.
© 1997 Microsoft Corporation. All rights reserved. Legal Notices.