← hed0rah.github.io
ACIDCAT . FILE FORMAT REFERENCE

Audio File Anatomy

53 formatsinteractive
rev 2026.09
view byte / bit maps
verb hover . click
source acidcat parsers

Byte-level references for the formats acidcat parses. Each page lays a real file out field by field. Hover any field to light its exact bytes or bits and read the decode; click a field marked + to open its lookup table. Every example byte is verified against acidcat's own walker.

value (read from a table) flag bit offset / reserved color marks kind, like syntax highlighting

Formats

MP3 / MPEG audio
Not a container: an ID3v2 tag, self-describing MPEG frames, an ID3v1 trailer. The 4-byte frame header as a bit-register, plus the Xing/LAME VBR header.
bit + byte
WAV / RIFF
A chunked container. The fmt and the namesake ACID loop chunk drawn byte by byte; smpl, cue, LIST, and the extensible fmt for surround and high bit depths.
byte map
FLAC
Metadata blocks then audio frames. The block header as bits, the bit-packed STREAMINFO, and the one little-endian trap in an otherwise big-endian format.
bit + byte
AIFF / AIFC
Apple's big-endian IFF. The COMM chunk, with its sample rate stored as an 80-bit IEEE-754 extended float that struct cannot unpack, reassembled by hand.
byte map
8SVX
The Amiga's IFF 8-bit sampled voice (EA IFF, 1985) -- a direct ancestor of RIFF/WAVE. The VHDR voice header maps one-to-one onto fmt; ANNO is the Amiga-side ISFT tool tell; BODY is 8-bit signed PCM or Fibonacci-delta. In Amiga copper.
byte map
MIDI
An MThd header and MTrk tracks. The division field expanded bit by bit, where the top bit flips ticks-per-quarter into SMPTE frame timing.
bit + byte
RMID
A Standard MIDI File wrapped in a RIFF container. Little-endian RIFF framing drawn byte by byte around the big-endian SMF it carries in a data chunk.
byte map
MP4 / M4A
ISO base media: a tree of nested boxes, big-endian. The box header and ftyp brand block drawn byte by byte, plus the moov/trak/mdat hierarchy.
byte map
OGG
Xiph's page-and-segment container, little-endian. The 27-byte page header, the header-type flag bits, and the lacing model that frames packets.
bit + byte
Ableton Live
The .asd analysis sidecar, reverse-engineered from 8,196 specimens: a frame grid that recovers the sample rate, length and duration of audio that has been deleted, and a self-describing object tree of warp markers, loops, onsets and time signature. Plus the gzipped-XML Set family and Max for Live.
byte
Bitwig .bwpreset / .bwclip
A length-prefixed tagged tree with an embedded zip of assets. The BtWg meta block, device parameters as big-endian f64, and the note-clip pitch lanes.
byte map
Native Instruments
The NISound hsin container (Massive, Absynth, Kontakt), plus .ksd (zlib+XML) and .nksf (RIFF+MessagePack). Recursive frames with cascading size fields.
byte map
Vital
A bare JSON preset. The synth version, the wavetable and LFO inventory, the effects chain, and the modulation matrix of source to destination routings.
json
NCW / NI Compressed Wave
Native Instruments' compressed audio: the header, the per-block deltas, and the bit-packing that stores Kontakt sample content.
byte map
VST FXP
A VST 2 preset. The 28-byte big-endian CcnK header byte by byte: the preset kind, the plugin FourCC (XfsX = Serum), and the opaque-chunk vs float-params split.
byte map
ReCycle RX2
A sliced loop. The big-endian CAT/REX2 IFF group drawn byte by byte, and the transient slice markers hidden in a nested SLCL sub-group.
byte map
Bitwig Wavetable
A vawt container: a 12-byte little-endian header (wave length, wave count, data offset) byte by byte, then raw int16 samples, one single-cycle wave after another.
byte map
Bitwig Multisample
A ZIP: a multisample.xml zone map plus the member WAVs. The zone bindings (key range, root note, velocity, loop) and Bitwig's mismatched-CRC quirk.
zip / xml
Akai MPC family
Nearly four decades in one tabbed sheet: the vintage .snd sounds and .pgm programs as hover-to-decode register maps, and the modern .xpm / .xpn / .xtd / .mpcpattern. In Akai colors.
byte + json
E-MU Emulator
The EOS .E4B hardware bank and the Emulator X / Proteus X .exb / .ebl software format, both FORM containers (E4B0 / E5B0). The 78-byte TOC2, nested E5P1 presets, E5S1 samples, and the bank / SamplePool split. In E-mu blue.
byte map
Kurzweil K2000
The K2000 / K2500 / K2600 .KRZ bank: not a chunked container but a big-endian object database -- a PRAM header, negative-length object blocks (Sample / Keymap / Program), and one shared PCM blob, all cross-referenced by numeric id. Plus the SROM effects file. In Kurzweil moss.
byte map
SoundFont 2
A RIFF (sfbk) sound bank. The pdta preset / instrument / sample-header hierarchy, and the shdr records pointing into one shared smpl PCM pool.
byte map
Tracker Modules
The MOD / XM / S3M / IT module family: a header, a pattern order, and sample descriptors whose PCM lives elsewhere in the file, each a carveable byte region. S3M's SCRM magic hides 44 bytes in.
byte map
RF64 / BW64
RIFF's 64-bit successor. When a size overflows 32 bits it becomes 0xFFFFFFFF and the true 64-bit sizes live in a ds64 chunk, so a WAV can exceed 4 GB.
byte map
Gravis UltraSound
The .PAT patch: a four-level nest of fixed-size headers (patch / instrument / layer / sample), each followed by its raw PCM. MilliHertz frequency fields, the eight-flag modes byte, little-endian. In GUS teal.
byte map
Akai S5000 / S6000
The .akp keygroup program: a RIFF/APRG of nested IFF -- prg, then a kgrp per keygroup holding kloc, envelopes, and up to four velocity zones. The zero RIFF-size quirk; zones name external .wav samples. In Akai orange.
byte map
FXpansion BFD
The .bfdlac drum hit: a big-endian IFF container (BFDC) of fmt / BFDi / Indx / data -- uniform 24-bit/44100/stereo, an Indx block seek table for random access, and the undocumented lossless lac codec. In BFD brick.
byte map
Amiga Music
Four big-endian 68k formats in one sheet: SMUS (Sonix IFF score), OKT (Oktalyzer's four-to-eight channel split), MED / OctaMED, and Future Composer. IFF is the ancestor of RIFF/WAV. In Amiga cobalt.
byte map
Xfer Serum
The .SerumPreset: an XferJson magic, a UTF-8 JSON metadata block, then the wavetable / modulation blob -- zstd-compressed in Serum 2, whose Zstandard magic gives the generation away. In Serum violet.
byte + json
Arturia Analog Lab
The .labx bank: a STORED zip of presets, each path spelling engine / bank / name, each entry a Boost text-serialization archive of length-prefixed metadata strings. In Analog Lab plum.
zip + text
SigMF
The raw-PCM-plus-header idea applied to radio: a headerless IQ stream (.sigmf-data) beside a JSON sidecar (.sigmf-meta) of global geometry, frequency-tagged captures, and the composable datatype grammar. In phosphor green.
byte + json
SID
A big-endian header describing a 6502 music player, then the raw C64 memory image it runs in. The flags word bit by bit, and the little-endian load address that hides under a big-endian header.
bit + byte
MDX
A Music Macro Language score for the Sharp X68000 and its YM2151 FM chip. No magic number at all: a file opens with its Shift-JIS title, so identification is arithmetic. Every offset is relative to a word that moves with the title's length.
byte + bit
NSF
Not a description of music but the 6502 program that made it, lifted out of a cartridge. The 2A03's five voices, the expansion byte bit by bit, and the load address that stops being an address when the file is banked.
byte + bit
SAP
An ASCII tag header concatenated onto an Atari executable. POKEY's four dividers and its polynomial-counter timbre, the tag vocabulary, and the boundary rule the specification never defines.
byte + text
AU
Sun and NeXT audio, where the .snd magic and the mu-law codec of early Unix workstations were written down. Six big-endian words, an encoding code rather than a bit depth, and a size field that may say it does not know.
byte
CAF
Apple's answer to the 4 GB problem, and the third answer in a family that already had two. Big-endian throughout, SIGNED 64-bit sizes where -1 legally means 'to the end of the file', and no chunk alignment at all.
byte map
VOC
The sample format of the DOS era, inside almost every Build-engine archive. A chain of typed blocks whose terminator is one byte with no length field, and whose continuation block carries no format bytes of its own.
byte map
DSD
The two containers behind SACD, and they disagree about almost everything: Sony's DSF is little-endian with a 64-bit size that counts the header, Philips' DSDIFF is big-endian IFF with a size that does not. One bit per sample at 2.8 MHz, so a PCM reader that opens one reports the byte count wrong by sixteen times.
byte map
PDX
The ADPCM sample bank an MDX plays from, and a pointer table with nothing else in it: no magic, no version, no count, no names. Ninety-six rows of offset and length, and the row NUMBER is the sample's identity, so an empty row is not padding to be tidied away.
byte map
S3P
An Akai S1000 program, which is not a file format at all: the sampler had only a MIDI System Exclusive dump, so the program was recorded message by message. The payload is nibble-split because SysEx cannot carry a byte with bit 7 set, and three fields that look like offsets are addresses in the sampler's own memory.
byte map
PMD
A compiled score for the PC-9801's Professional Music Driver, the format most of the PC-98's game music was written in. MML is the source, MC.EXE compiles it, and the memo block at the end is the part of the source the compiler kept: title, composer, and which sample banks to load. Every offset counts from byte 1.
byte map
GBS
A Game Boy's music cut out of the game: a 112-byte header naming where to load the code and which routine to call, then the code. The same idea as NSF and simpler, because the Game Boy has no expansion chips and nothing in the header is reserved.
byte map
PSF
A console's sound program and the memory it runs in, zlib-compressed with a CRC32 of its own. Eight machines share the container and differ in one byte. A whole GBA mini is 221 bytes, and two of those are the tune: the song number, patched over a library file the tag names.
byte map
SPC
A Super Nintendo's sound chip, frozen: the CPU registers, all 64 KB of its RAM, the DSP's 128 registers. No score to parse; a bank of BRR samples the DSP's own registers point at, and a tag whose flag byte real files never set.
byte + bit
HES
A PC Engine game's music with the game removed: sixteen bytes naming the call address and presetting the HuC6280's eight page registers, then a DATA block of the engine and its data.
byte map
KSS
An MSX (or, in Sega mode, Master System) Z80 sound driver: sixteen bytes of addresses and chip flags, the init data, then the banks it switches through, the last of which the file may end inside.
byte map
PT3
A score for the ZX Spectrum's AY chip: samples that are tables of per-tick settings, ornaments that are semitone offsets, three channel streams per pattern, and every one of them reached by an absolute 16-bit pointer, so the file tiles by sorting them.
byte map
VGM
Every byte a game wrote to its sound chips, in order, with the time between: a header of chip clocks where a non-zero clock is the only presence flag, a byte-code stream of writes and waits, and a UTF-16 tag at the end. A .vgz is the same file in gzip.
byte map
S98
The VGM idea from the Japanese PC scene: every write to the PC-98 FM and PSG chips with the time between, a device table naming the chips, and a key=value tag. v1 keeps its title before the dump; v3 its tag after. The sync count is a 7-bit varint in both.
byte map
CMF
A Standard MIDI track with its OPL2 patches packed in front: Creative's 1991 format for the Sound Blaster, where sixteen bytes of FM registers per instrument stand in for a General MIDI bank.
byte map
SNDH
Atari ST music as its own 68000 player: three entry branches, a tag header from SNDH to HDNS, then the code, nearly always inside a Pack-Ice stream that is read from the end backwards.
byte map
YM
What a player routine wrote to the Atari ST's YM2149, one frame of registers per tick, stored column by column so it packs, inside an LHA level-0 archive whose -lh5- body and CRC are drawn too.
byte map