The WAVE form is defined as <WAVE-form> as follows. Programs must expect (and ignore) any unknown chunks encountered, as with all RIFF forms. However, <fmt-ck> must always occur before <data-ck>, and both of these chunks are mandatory in a WAVE file.
<WAVE-form>
–RIFF('WAVE'// Form type
<fmt-ck> // Waveform format
<data-ck> ) // Waveform data
<fmt-ck>
–fmt(<wave-format>// WaveFormat structure
<format-specific> ) // Dependent on format
// category
<wave-format>
–struct {
WORD formatTag; // Format category
WORD nChannels; // No. channels
DWORD nSamplesPerSec; // Sampling rate
DWORD nAvgBytesPerSec; // For buffering
WORD nBlockAlign; // Block alignments
}
<PCM-format-specific>
–
struct {
WORD nBitsPerSample; // Sample size
}
<data-ck>
–data( <wave-data> )