Layouts by version
The 16-bit version number at offset 58 decides how the rest of the file is arranged. The original format description covers 1.04 and says that versions below it "have a lot of differences". The older layouts below are from libxmp's notes on three real modules (1.02: Vogue's "Trans atlantic" and "Dont you"; 1.03: "Developer 94" and "Enhanced Intuition") and from the loaders of the FT2 clone, OpenMPT and libxmp, which all agree.
| 1.04 | 1.03 | 1.02 | |
|---|---|---|---|
| Order of the parts | header, patterns, instruments | header, instruments, patterns, sample data | as 1.03 |
| Sample data | Follows its sample headers, inside each instrument. | All of it, for every sample of every instrument in order, after the last pattern. | As 1.03. |
| Pattern header size | 9 bytes | 9 bytes | 8 bytes |
| Rows in the pattern header | u16, 1 to 256 | u16 | u8 holding rows − 1 |
| Instrument header | as instruments | the same | the same |
| Chunks after the data | possible | read the same way | read the same way |
Versions below 1.02 are not known to occur: the FT2 clone refuses them and OpenMPT reads them as 1.03. A version above 1.04 is read as 1.04. A file made by a tracker may state any of these, and some writers (Digitrakker) state 1.04 with their own layout habits. The explorer follows the version number and lists in its tree where each part is. Among 216 distinct XM files from this Mac and from the test suites of libxmp, OpenMPT and MilkyTracker, one is version 1.02 and the rest 1.04; no 1.03 file was found.
Tracker names
The tracker name field and a few habits of the header say which program wrote a file. The explorer shows the program it concludes in the song information and says when it is not sure.
| Tracker name | Written by | Other clues |
|---|---|---|
FastTracker v2.00 | FastTracker 2 (Triton, 1994 to 1996), and every program that copies the name: ModPlug Tracker 1.16, PlayerPRO, IT2XM, converters. | FT2: header size 276, song name padded with spaces, an empty instrument has header size 33, the sample reserved byte is the length of the name, the instrument type byte is the same in every instrument. A zero byte in the song name, or header size 21, points to another program. libxmp's notes list header size 275 for modules by Filip Skutela. |
FastTracker v 2.00 | ModPlug Tracker 1.0 alpha and beta (note the extra space). | The first instrument's header size: 245 is the alpha, 263 the beta. |
Fasttracker II clone | 8bitbubsy's FT2 clone. | OpenMPT treats it exactly like FT2. |
OpenMPT 1.31.07.00 | OpenMPT; the version number follows the name. | Header size 20 plus the song length, zero-padded song name, chunks after the samples (trailer). |
MilkyTracker | MilkyTracker, which since 0.90.87 appends its version; older ones leave the field blank after the name. | MilkyTracker 0.90.87 and later implement FT2's panning law. |
MadTracker 2.0 + zeros | MadTracker 2. Four more zero bytes in the registered version. | Its arpeggio and portamento of an instrument without a note differ from FT2's; OpenMPT turns those FT2 behaviours off for it. |
Skale Tracker, Sk@le Tracker + a zero | Skale Tracker. | Lets Dxx and Bxx on one row jump to the Dxx row; early versions write a sample header size of 0. |
*Converted … -File* | DigiTrakker's converter, with the original file type between the words. | Empty instruments have size 29. |
| blank, or a person's name | DigiTrakker, which writes the composer's name here, or a converter. | Instruments have size 29 or 33 and the sample reserved byte 0. |
rst's SoundTracker | SoundTracker for Unix (Michael Krause). | Adds Qxx and Zxx filter effects. |
MED2XM by J.Pynnone | A converter from OctaMED. | The default BPM field holds OctaMED's tempo below 10. |
MOD2XM 1.0 | A converter from MOD. It writes 31 instruments and stops after the last real one. It sometimes writes FastTracker v2.00 . | A file that ends before its instrument count says (common in Windows cracktro loaders). |
XMLiTE | A packer that strips unused data from XM files. | |
NitroTracker | NitroTracker (OpenMPT ignores an instrument number with no note next to it). |
A tracker name that is not on this list may be a composer's name or a program the explorer does not know.
Converters and packers
- MOD2XM (1.0) lists 31 instruments in every file but cuts the file after the last used one. A reader must stop at the end of the file when the instrument count says more.
- BoobieSqueezer (by Boobie, for XM) removes the instrument data (envelopes and the rest) in the same way as Impulse Tracker's sample-only mode, keeping the instrument header size honest: the header size field is smaller than 263 and the fields that do not fit are zero. Readers must honour the module header size as well (libxmp does so for these files).
- XMLiTE strips what a player does not need.
- The XM Commenter (XMC.EXE by Aka) adds empty instruments to the end of the list, which is why instruments of size 29 appear in files that otherwise look like FT2's.
- IT2XM converts Impulse Tracker files and writes FT2's name, so its output cannot be told from FT2's this way (and plays differently, because Impulse Tracker's effects differ).
What real files say
Of the 47 distinct XM files found on this Mac, all say FastTracker v2.00 ,
version 1.04 and header size 276; 977 of their instruments have header size 263 and 680 (those with no
samples) have 33. Two have zero-padded song names, which is how ModPlug Tracker writes them. In the test
suites of libxmp, OpenMPT and MilkyTracker (169 files) there are 61 with FT2's name, 18 from
MilkyTracker, 52 from OpenMPT, 3 from the FT2 clone, 2 from MadTracker, and one each from Skale
Tracker and XMLiTE; 57 files have header size 21 (OpenMPT's trimmed header).