The Amiga gave home computers real sampled sound in 1985, and a whole family of music formats grew around it — all big-endian, because the Amiga is a Motorola 68000. This page covers the four outside the mainstream tracker family (MOD/XM/IT): SMUS, the Sonix musical score (an IFF FORM, sibling of AIFF); OKT, the Oktalyzer 8-channel tracker; MED / OctaMED (magic MMD0–MMD3); and Future Composer, a synth-driver chiptune (SMOD / FC14). IFF — EA's Interchange File Format, born on the Amiga — is the direct ancestor of RIFF/WAV. The tabs open each, drawn byte by byte from real files. Hover a field to light its bytes, click a field with a + for its table. Color marks kind (see the key).
Two shapes cover these four formats. SMUS is an IFF file — the same FORM + tagged-chunk structure as AIFF, big-endian — so it reads like a cousin of AIFF and 8SVX. The other three are modules: OKT (Oktalyzer) uses IFF-style id+size chunks after an OKTASONG magic; MED and Future Composer are pointer-based, a fixed header of offsets into song/pattern/sample regions. The IFF ones decode fully; the pointer-based ones give up only their header without chasing offsets.
FORM, tagged chunks, big-endian) to store it. IFF is the direct ancestor of AIFF and RIFF/WAV.FORM SMUS: an SHDR header (tempo, volume, track count), NAME, INS1 instrument registers, and TRAK note tracks.FORM / 4-byte-id / big-endian-size / word-padded structure of SMUS is exactly what AIFF and 8SVX use, and RIFF/WAV is the little-endian rewrite of it. SMUS reads with the same IFF reader as AIFF — only the chunk meanings differ.CMOD chunk stores per-channel split flags — a set flag turns one hardware channel into two voices.A Sonix score is textbook IFF: a FORM wrapper of type SMUS, then tagged chunks. SHDR is the score header (tempo, master volume, track count); NAME is the title; each INS1 registers an instrument by name; each TRAK is a stream of note events. The two maps are the FORM wrapper and the SHDR from a real score, "Hava Nagila!".
The IFF envelope — identical in shape to AIFF and 8SVX.
Hover ctTrack — this score has 5 note tracks.
FORM, a big-endian size, a 4-byte form type, then word-padded chunks — SMUS shares its container with AIFF and 8SVX exactly. Only the chunk vocabulary (SHDR, TRAK, INS1, Sonix's private SNX1) is score-specific. Any IFF reader walks it unchanged.INS1 chunk registers an instrument the score references ("acoustic guitar", "fender Bass"...); the TRAK chunks are the actual note streams, one per voice. So a SMUS file is a small sequence, not a sample bank — the sounds come from Sonix's own instrument set.Oktalyzer opens with an 8-byte OKTASONG magic, then IFF-style id+size chunks. CMOD holds the channel setup — four words that decide how many voices the four hardware channels become; SAMP is the sample table (32 bytes per entry); SPEE, SLEN, PLEN carry speed and length. The maps are the magic and the CMOD from a real Oktalyzer song.
The whole magic is one token — no version field.
Hover a channel word — each non-zero word splits one hardware channel into two voices.
SAMP chunk is a flat table — its size divided by 32 is the sample count (36 here). Each entry names a sample and gives its length and loop. The count and the names come free; the sample PCM sits in later regions the module points to.MED/OctaMED and Future Composer are pointer-based rather than chunked: after a short magic and a length, the header is a table of absolute offsets into the song, pattern, sample and (for FC) waveform regions — laid out to be chased in memory, not walked as chunks. Both are identified by magic, and the header summarises cheaply; a full decode means chasing the tables. The maps are the headers of an OctaMED module and a Future Composer tune.
Hover modlen — the declared module length, checked against the file size.
The magic dates the version; the words after it are region lengths/offsets.
MMD0 → MMD1 → MMD2 → MMD3 across MED, OctaMED, OctaMED Pro and SoundStudio; Future Composer is SMOD (v1.3) or FC14 (v1.4). The four bytes map straight to the variant name — the one field these header-only formats give up cheaply.modlen should equal the file length; a mismatch is a quick tell for a truncated module. Future Composer instead leads with region lengths (sequence, pattern, sample tables) that a player adds up to find each section.