A WAV is a RIFF container: the 12-byte RIFF header, then a sequence of chunks, each an id, a 32-bit little-endian size, and that many payload bytes (plus a pad byte if the size is odd). Regions below list the chunks; the fmt and acid chunks are drawn byte by byte. Hover a field to light its bytes, click a field with a + for its table. Color marks kind (see the key).
Order varies by writer; only fmt-before-data is guaranteed. Reads are bounded and every declared size is checked against the bytes that remain.
The audio encoding. 16 bytes for PCM (the byte map below), 18 with a cb_size field at 0x10, 40 for extensible (tag 0xFFFE), which appends:
Interleaved PCM samples. duration = data_size / (rate * channels * bytes_per_sample). A declared size past EOF is linted, and acidcat derives duration from the bytes present, not the claim.
The project's namesake: Sonic Foundry ACID tempo, beats, meter, and root note. No official spec; layout field-verified against real ACIDized packs. See the byte map below.
16 bytes for PCM. Example: 16-bit stereo at 44100 Hz.
24 bytes. Example: an 8-beat 4/4 loop at 120 BPM, root C4, root-set flag.