This is a brief outline of the wav file spec. It isn't comprehensive, but it's enough to get you started writing wav files yourself.

Quick and Dirty WAV layout

This is what is missing as far as documentation I've found. There's a lot of theory and introduction, but when it comes time to implement this bad boy, it's tough to find. So, without further ado, here is the wave header for a general purpose, PCM format WAV file:

Description Size (bytes) - Data Type (Windows) Usual contents
"RIFF" file description header 4 bytes - FOURCC The ascii text string "RIFF". mmsystem.h provides the macro FOURCC_RIFF for this purpose.
size of file 4 bytes - DWORD The file size LESS the size of the "RIFF" description (4 bytes) and the size of file description (4 bytes). This is usually file size - 8.
"WAVE" description header 4 bytes - FOURCC The ascii text string "WAVE". Check out the mmioFOURCC macro in mmsystem.h.
"fmt " description header 4 bytes - FOURCC The ascii text string "fmt " (note the trailing space). Check out the mmioFOURCC macro in mmsystem.h.
size of WAVE section chunck 4 bytes - DWORD The size of the WAVE type format (2 bytes) + mono/stereo flag (2 bytes) + sample rate (4 bytes) + bytes/sec (4 bytes) + block alignment (2 bytes) + bits/sample (2 bytes). This is usually 16 (or 0x10).
WAVE type format 2 bytes - WORD Type of WAVE format. This is a PCM header, or a value of 0x01.
mono/stereo 2 bytes - WORD mono (0x01) or stereo (0x02)
sample rate 4 bytes - DWORD Sample rate.
bytes/sec 4 bytes - DWORD Bytes/Sample
Block alignment 2 bytes - WORD Block alignment
Bits/sample 2 bytes - WORD Bits/Sample
"data" description header 4 bytes - FOURCC The ascii text string "data". Check out the mmioFOURCC macro in mmsystem.h.
size of data chunk 4 bytes - DWORD Number of bytes of data is included in the data section.
Data Unspecified data buffer Your data.

Some gotchas

Make sure all numbers are in Intel's little endian format, that is, 0x12345678 should be written 0x78 0x56 0x34 0x12.

Other WAV resources

TJW has a good page.

Also check out the MSDN.

 

uring@rain.org
Last modified April 17, 1998