Hover a field to light its bytes, click a field with a + for its table. Color marks kind (see the key).
The Akai MPC line spans nearly four decades of sampler formats, from 12-bit floppy sounds to gzipped JSON kits. Every binary format is little-endian. This sheet collects them; the tabs open each one's byte layout. Akai red = verified against real files, amber = documented but needs a hardware specimen to confirm. The single most useful test artifact is a kit that ships the same sounds across generations (a Rosetta stone): identical sample names in an unknown binary reveal its record structure.
| format | hardware / software | container | samples / PCM | acidcat |
|---|---|---|---|---|
| .snd | MPC2000, 2000XL (3000?) | binary, 38 or 42-byte header + PCM | 16-bit signed LE, stereo non-interleaved, 44.1k native | verified (16 files) |
| .pgm | MPC2000, 2000XL, 3000 | binary, 17-byte name-table | references .snd by name | sw-export verified |
| .PGM | MPC1000, 2500 | binary, "MPC1000 PGM 1.00" magic, 64×164B pads | references .WAV by name | verified (factory default) |
| .WAV | MPC1000/2500/5000 | standard RIFF/WAVE | 16-bit LE, interleaved (normal WAV) | covered (WAV walker) |
| .50s | MPC500 / JJOS | binary, "S80p" magic | program + embedded PCM (135 KB) | needs RE |
| program | MPC4000 | Akai Z-series engine (APRG) | references .WAV | needs specimen |
| .mpcpattern | MPC 2.x / 3.x software | bare JSON | sequence events, no audio | both schemas |
| .xpm | MPC 2.x / 3.x software | XML (<MPCVObject>) | references .WAV | verified |
| .xpn | MPC 2.x / 3.x software | ZIP package | bundles programs + .WAV + art | verified |
| .xtd | MPC 3.x / Force | gzip + ACVS + JSON | references .WAV by name+path | verified |
| .s3p | Akai S3000 (adjacent) | binary, "PSYSSS30" (a tool export) | proprietary charset, no ASCII | needs tool-ID / charset |
| .akp | Akai S5000/S6000 (adjacent) | RIFF/APRG (IFF) | references .WAV | verified (101 files) |
acidcat needs ~5 format families, not 20 walkers. The time sinks are the intra-era forks (software-vs-hardware .pgm, JJOS variants), not new models.
The MPC2000 sound: a fixed header then raw 16-bit signed little-endian PCM. Stereo is stored non-interleaved (the full left block, then the full right). The header size is variant-dependent -- classic hardware is 42 bytes, the exports we have use a compact 38-byte header -- so acidcat resolves it by size-fit: header + frames × channels × 2 must land exactly on EOF. The register map below is a real kick from the CPM7 kit (38-byte). Hover any byte to read the field.
Fields verified across all 16 kit sounds. The channel byte at 0x15 discriminates perfectly (0 mono / 1 stereo), and the frame count times the channel stride hits the file size to the byte.
The MPC1000/2500 program. A 24-byte header (file size, then the magic), then 64 pads of 164 bytes each. There is no program-name field -- the name is the filename. Each pad holds four 24-byte layers, and each layer opens with a NUL-terminated sample name referencing an external .WAV. Samples are not stored in the program.
Real layer 0 of pad 0 (a velocity-switched kick: this layer plays velocities 70-127, layer 1 the softer 0-69). Offsets verified against a factory-default program.
After the four layers (+0x60 in the pad), the pad carries voice overlap + mute group, amp attack/decay, two filters, mixer level/pan, output routing, and FX send. The footer at 0x2918 holds the per-pad MIDI-note table, the note-to-pad map (64 = unassigned), the MIDI program number, and two Q-Link slider records. acidcat surfaces the layers today; these are a mechanical enrichment.
The older MPC2000/2000XL/3000 program -- a different format that shares the .pgm extension with the MPC1000 form (acidcat tells them apart on the MPC1000 magic). The specimens we have are software exports: a table of 17-byte records (a 16-character space-padded sample name + one trailing byte) starting at offset 2, terminated by an empty name. The program references its sounds (the sibling .snd files) by these names.
The MPC "MIDI": bare JSON, {"pattern": {"length", "events": [...]}}. length is often 9223372036854775807 (INT64_MAX) as an "unbounded" sentinel. Two event schemas ship, both handled -- the flat MPC2 event and the nested MPC3 note object.
The modern keygroup / drum program: XML with an <MPCVObject> root. Content-sniffed (an X11 pixmap shares the .xpm extension). Samples are external .WAV files referenced by name.
An expansion package: a ZIP bundling an Expansion.xml manifest with the .xpm programs, .WAV samples, and cover art. Note the programs inside a distributed .xpn are usually deflated, so a carve of a program region yields a raw deflate stream, not the literal .xpm (flagged per-entry).
The MPC3 track/kit: gzip wrapping an ACVS container -- newline-delimited header lines (magic, app version, data type, format, platform) then a JSON body. MPC3 kits are SerialisableTrackData. The decompressed read is capped (64 MB) as a gzip-bomb guard.