Introduction
The ProTracker module is the standard Amiga music module: a song with 31 samples
played on 4 channels, the four voices of the Amiga’s sound chip. It holds the samples
themselves, as 8-bit sound, and patterns of 64 rows that say which sample to play on
each channel, at what pitch and with what effect, with an order list that strings the
patterns into a song. The letters M.K. at offset 1080 mark it.
The layout first appeared in Soundtracker 2.2 or 2.3, in 1988 or 1989 (sources
disagree), and became the standard through NoiseTracker (1989) and ProTracker (from
1990). Almost every tracker since, on the Amiga and the PC, reads and writes it. The
versions after the first only added to it: NoiseTracker 1.1 gave the restart byte a
meaning, ProTracker 1.0c put a finetune in the low half of a byte that had been zero,
new effects took unused numbers, and ProTracker 2.3 added the signature
M!K! for songs of more than 64 patterns. A reader of the first files
reads the later ones, so all of them are this one format. No maker ever published a
specification; the format is known from players’ source code, ProTracker 2.3D’s replay
routine above all.
Files are named .mod. On the Amiga the name was often a prefix instead,
as in mod.songname. Modules with other channel counts, StarTrekker’s
8-channel modules and the older 15-sample modules are
separate formats.
A .mod file dropped on any page of this site opens in the explorer,
which shows the header field by field, the samples, the order list and every pattern
note by note, and plays the song as ProTracker 2.3D plays it.
Structure
A module is a fixed 1,084-byte header, then the patterns, then the sample data, with nothing between them. There are no chunks and no lengths to follow: the number of patterns comes from the order table, and the size of each sample from its header. All numbers are big-endian.
0Title the song name, padded with zero bytes20 bytes20Sample headers 31 of 30 bytes: name, length, finetune, volume, loop930 bytes950Song length how many positions are played1 byte951Restart NoiseTracker’s restart position; ProTracker writes 1271 byte952Order table the pattern for each of 128 positions128 bytes1080SignatureM.K.or another 4-channel signature4 bytes1084Patterns 64 rows × 4 channels × 4 bytes, in number order1,024 bytes each…Sample data signed 8-bit, sample 1 firstvaries
The number of patterns stored is one more than the highest pattern number in the order table, so the sample data of a module with patterns 0 to 9 starts at 1084 + 10 × 1,024 = 11,324. Each pattern cell gives a sample number, an Amiga period for the pitch and an effect; how a player turns all this into sound, tick by tick, is on How it plays.
Telling it apart
The explorer’s parser for this format checks two things: the file is at least 1,084 bytes long, and the four bytes at offset 1080 are one of the 4-channel signatures:
| Signature | Bytes | Written by |
|---|---|---|
M.K. | 4D 2E 4B 2E | Soundtracker 2.3 onwards, NoiseTracker, ProTracker and most trackers since |
M!K! | 4D 21 4B 21 | ProTracker 2.3 and later, when there are more than 64 patterns |
FLT4 | 46 4C 54 34 | StarTrekker, 4 channels |
EXO4 | 45 58 4F 34 | StarTrekker, 4 channels |
4CHN | 34 43 48 4E | PC trackers such as FastTracker |
N.T. | 4E 2E 54 2E | NoiseTracker, as OpenMPT records it |
PATT | 50 41 54 54 | ProTracker 3.6, as OpenMPT records it |
NSMS, LARD | each seen in one known module, as OpenMPT records them | |
TDZ4, 04CH, 04CN | the multichannel signatures with a count of 4 |
Everything after the signature is read as it comes. Problems such as a song length of 0, a volume above 64, a loop that runs past the end of its sample or a file cut short are reported, but are not grounds for turning the file down. A file with another signature at 1080 is turned down, and the explorer tries the parsers for the other module formats.
Files from unrelated programs are named .mod too, Go and Fortran module
files among them. Without one of these signatures at 1080 a file is not read as this
format, whatever its name.
Variants
- ProTracker module (M.K.) – 31 samples and 4 channels, marked M.K. at offset 1080: the standard Amiga module
- Multichannel module (xCHN, xxCH) – 31 samples and 1 to 32 channels, marked 6CHN, 8CHN, 16CH and so on
- StarTrekker 8-channel module (FLT8) – 8 channels, each pattern stored as two 4-channel patterns
- Soundtracker module (15 samples) – the first modules, 1987 to 1989: 15 samples and no signature
Links
Software
- OpenMPT – free tracker that plays, edits and saves MOD files (Windows)
- ProTracker 2 clone – faithful remake of the Amiga ProTracker 2.3D (Windows, macOS, Linux)
- MilkyTracker – free tracker in the FastTracker 2 style that opens MOD (Windows, macOS, Linux)
- Schism Tracker – free Impulse Tracker remake that opens MOD (Windows, macOS, Linux)
- XMPlay – small audio player with strong tracker module support (Windows)
- VLC media player – free player for almost any audio or video file, modules included (Windows, macOS, Linux, mobile)
Developers
- libopenmpt – OpenMPT’s playback library (C, C++)
- libxmp – module player library for MOD, S3M, XM, IT and many more (C)
Reference
- ProTracker 2 clone source – ProTracker 2.3D’s replayer and period tables, in
src/pt2_replayer.candsrc/pt2_tables.c(C) - OpenMPT’s MOD loader – the signatures, who wrote them, and how the header is read (C++)
- Tracker History Graphing Project – release dates and lineage of Soundtracker, NoiseTracker and ProTracker