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
Header
- Type:
IMPM - MICC group:
tracker.impulse.header
Header fields
See also: Meta fields
| Offset | Generalised Name | Impulse / Schism | ModPlug | Type | Note |
|---|---|---|---|---|---|
0004 | Sequence name | Song name | ← | u8[26] | ... |
001E | Time signature hint | Pattern highlight | ← | ↓ u8[2] | ... |
001E | Rows per beat | ← | ← | u8 | ... |
001F | Rows per measure | ← | ← | u8 | ... |
0020 | Pattern order size | Order list number | ← | u16le | [0, 256) |
0022 | Instrument count | Instrument number | ← | u16le | [0, 256) |
0024 | Oscillator count | Sample number | ← | u16le | [0, 256) |
0026 | Pattern count | Pattern number | ← | u16le | [0, 240] ... |
0028 | Created version | Created with version | ← | u16le | ... |
002A | Compatible version | Compatible with version | ← | u16le | ... |
002C | Basic flags | Flag | ← | ↓ bool[16] | |
002C | Toggle stereo | Flag (stereo) | ← | bool | bit 0 |
002C | Toggle silent mixing | Flag (mixing) | ← | bool | bit 1 ... |
002C | Voice type | Flag (instrument/sample) | ← | bool | bit 2 |
002C | Slide type | Flag (linear slide) | ← | bool | bit 3 |
002C | Scream 3 controls₁ | Flag (old effects) | ← | bool | bit 4 |
002C | Linked portamento | Flag (link G with E & F) | ← | bool | bit 5 |
002C | MIDI pitch control | Flag (MIDI pitch controlled) | ← | bool | bit 6 |
002C | Request MIDI macros | Flag (request MIDI macros) | ← | bool | bit 7 |
002D | Extended filter range | Flag (extended filter range) | bool | bit ? | |
002E | Existence hint flags | Special | ← | ↓ bool[16] | |
002E | Has song message | Special (song message) | ← | bool | bit 0 |
002E | Has edit history | Special (edit history) | ← | bool | bit 1 |
002E | Has time signature hint | Special (embedded highlight) | ← | bool | bit 2 |
002E | Has MIDI macro | Special (embed MIDI macro) | ← | bool | bit 3 |
0030 | Master volume | Global volume | ← | u8 | [0, 128] |
0031 | Oscillator volume | Mix volume | Sample Volume | u8 | [0, 128] |
0032 | Initial TPR₂ | Initial speed | TPR₃ | u8 | [0, 96] |
0033 | Initial declared tempo | Initial tempo | ← | u8 | [0, 256) |
0034 | Pan separation | ← | ← | u8 | [0, 128] |
0035 | Pitch bend range | Pitch wheel depth | ? | u8 | [0, 48] |
0036 | Message size | Message length | ← | u16le | [0, 2¹⁶) |
0038 | Message offset | ← | ← | u32le | [0, 2³²) |
003C | Reserved | ← | ← | u8[4] | |
0040 | Initial slot panpot | Initial channel pan | ? | u8[64] | 0 .. 32 .. 64: L .. C .. R |
0080 | Initial slot loudness₃ | Initial channel volume | ? | u8[64] | [0, 64] |
00C0 | Pattern order | Orders | Sequence | u8[] | ... |
| ? | Instrument offsets | ← | ← | u32le[] | ... |
| ? | Oscillator offsets | Sample 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
01or02, 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;
0xFEskips to the next selected pattern, and0xFFsignifies sequence end. MICC allows multiple0xFFat the end, but does not allow any other byte trailing the last0xFFduring serialisation, and all other bytes after0xFFare 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.
- Tracker effects are called "controls" in Octavia to signify their relations with MIDI control changes.
- TPR: ticks per row.
- 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
XTPMinstead.
- 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
STPMinstead.
- 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.