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. |