Impulse Tracker

See also: Tracker, generalised terms

Impulse Tracker Module (.it) is the file format used to store modules by Impulse Tracker. A .it file contains data regarding but not limited to patterns, pattern sequence order, oscillators, etc. Like most classic tracker module formats, .it files are self-contained. .mptm files are .it files with ModPlug extensions.

Impulse Tracker was a proprietary music tracker developed by Jeffery Lim for the DOS platform, with its last version released back in 1999, and since becoming abandonware. It was made open-source in 2014. Schism Tracker is an up-to-date, open-source, and cross-platform re-implementation of Impulse Tracker. Open ModPlug Tracker is an independent open-source tracker derived from the original ModPlug Tracker, with its playback engine used by the Schism Tracker.

The .it file format implementation in MICC follows the Schism Tracker, only falling back to Open ModPlug Tracker for features unavailable in the Schism Tracker, or are explicitly ModPlug extensions. Do note that all strings in this format should use the slightly-modified DOS (CP 437) encoding, and reserve at least a null byte (0x00) at the end to prevent bugs with C strings in other implementations.

Format categorisation

IT

This format cannot be read by TLV libraries like Seamstress, as it does not contain a size field for each chunk.

  • MICC group: tracker.impulse
  • Schema: Custom
  • Header size: 0
  • Chunk type: FourCC
  • Chunk size: N/A
  • Padding: None
  • Validation targets: Schism Tracker 20260524

MPTM

This format cannot be read by TLV libraries like Seamstress, as it does not contain a size field for each chunk.

  • MICC group: tracker.modplug
  • Schema: Custom
  • Header size: 0
  • Chunk type: FourCC
  • Chunk size: N/A
  • Padding: None
  • Validation targets: OpenMPT 1.32

Canonical order

IT

IMPM
<[IMPI]>
[IMPS]
[IMPP]
<MPTX>
<MPTS>

Chunks

IT

  • Type: IMPM
  • MICC group: tracker.impulse.header
Header fields

See also: Meta fields

OffsetGeneralised NameImpulse / SchismModPlugTypeNote
0004Sequence nameSong name←u8[26]...
001ETime signature hintPattern highlight←↓ u8[2]...
001ERows per beat←←u8...
001FRows per measure←←u8...
0020Pattern order sizeOrder list number←u16le[0, 256)
0022Instrument countInstrument number←u16le[0, 256)
0024Oscillator countSample number←u16le[0, 256)
0026Pattern countPattern number←u16le[0, 240]
...
0028Created versionCreated with version←u16le...
002ACompatible versionCompatible with version←u16le...
002CBasic flagsFlag←↓ bool[16]
002CToggle stereoFlag (stereo)←boolbit 0
002CToggle silent mixingFlag (mixing)←boolbit 1
...
002CVoice typeFlag (instrument/sample)←boolbit 2
002CSlide typeFlag (linear slide)←boolbit 3
002CScream 3 controls₁Flag (old effects)←boolbit 4
002CLinked portamentoFlag (link G with E & F)←boolbit 5
002CMIDI pitch controlFlag (MIDI pitch controlled)←boolbit 6
002CRequest MIDI macrosFlag (request MIDI macros)←boolbit 7
002DExtended filter rangeFlag (extended filter range)boolbit ?
002EExistence hint flagsSpecial←↓ bool[16]
002EHas song messageSpecial (song message)←boolbit 0
002EHas edit historySpecial (edit history)←boolbit 1
002EHas time signature hintSpecial (embedded highlight)←boolbit 2
002EHas MIDI macroSpecial (embed MIDI macro)←boolbit 3
0030Master volumeGlobal volume←u8[0, 128]
0031Oscillator volumeMix volumeSample Volumeu8[0, 128]
0032Initial TPR₂Initial speedTPR₃u8[0, 96]
0033Initial declared tempoInitial tempo←u8[0, 256)
0034Pan separation←←u8[0, 128]
0035Pitch bend rangePitch wheel depth?u8[0, 48]
0036Message sizeMessage length←u16le[0, 2¹⁶)
0038Message offset←←u32le[0, 2³²)
003CReserved←←u8[4]
0040Initial slot panpotInitial channel pan?u8[64]0 .. 32 .. 64: L .. C .. R
0080Initial slot loudness₃Initial channel volume?u8[64][0, 64]
00C0Pattern orderOrdersSequenceu8[]...
?Instrument offsets←←u32le[]...
?Oscillator offsetsSample offsets←u32le[]...
?Pattern offsets←←u32le[]...
  • Sequence name: Only 25 CP 437 characters are allowed in practice.
  • Time signature hint: Only enabled if has time signature hint is true.
  • Rows per beat: Should be a positive integer. Should not exceed the minimum row count of all patterns.
  • Rows per measure: Should be a positive integer equal to or larger than rows per beat. Should not exceed the minimum row count of all patterns.
  • Pattern count: Vanilla Impulse only allows 200, while ModPlug allows 240.
  • Created version: If the high byte is either 01 or 02, the versions denote actual Impulse Tracker versions, and the hexadecimal value of the low byte should be interpreted as decimal. Version numbers themselves may also indicate presence of additional quirks, read "Impulse Tracker format notes" for details. Same for compatible version.
  • Toggle silent mixing: If silent slots (loudness 0) should participate in software mixing. Obsolete, reserved for data fidelity.
  • Sequence order: Size determined by sequence order count. [0, 200) (Impulse) or [0, 240) (ModPlug) selects the respective pattern; 0xFE skips to the next selected pattern, and 0xFF signifies sequence end. MICC allows multiple 0xFF at the end, but does not allow any other byte trailing the last 0xFF during serialisation, and all other bytes after 0xFF are treated as field ending during parsing.
  • Instrument offsets: Size determined by instrument count.
  • Oscillator offsets: Size determined by oscillator count.
  • Pattern offsets: Size determined by pattern count.
  1. Tracker effects are called "controls" in Octavia to signify their relations with MIDI control changes.
  2. TPR: ticks per row.
  3. Can be remapped to cc7, cc11 or note velocity/pressure.

Instrument

  • Type: IMPI
  • MICC group: tracker.impulse.instrument

Oscillator

  • Type: IMPS
  • MICC group: tracker.impulse.oscillator

Pattern

Actual raw data of this type of chunks do not actually contain the chunk type, only raw data.

  • Type: IMPP
  • MICC group: tracker.impulse.pattern

MPTX

The actual FourCC type in use is reversed, likely due to endianness mismatch. Use XTPM instead.

  • Type: MPTX
  • MICC group: tracker.modplug.ext

ModPlug Tracker eXtensions. Contains additional data for instruments, encoded in TLV with FourCC chunk types and u16le chunk sizes. Exact fields still unknown.

MPTS

The actual FourCC type in use is reversed, likely due to endianness mismatch. Use STPM instead.

  • Type: MPTS
  • MICC group: tracker.modplug.meta

ModPlug Tracker Song (metadata), an extension from ModPlug Tracker. Contains additional metadata fields, encoded in TLV with FourCC chunk types and u16le chunk sizes.

Sources