Impulse Tracker ITTECH.TXT — technical reference (summary)

author Jeffrey Lim (Pulse)
date 1997-11-11 (file date)
created 2026-08-30 · updated 2026-08-31

The byte-level description of the it-format used by every IT player since (libopenmpt, Schism, duet): header, instrument, sample and pattern layouts, the volume and slide formulas, the channel-allocation procedure and partial effect pseudo-code. Only the musically relevant semantics are summarised here; the layouts themselves stay in raw/.

Key claims#

  • Header IMPM: song name, order/instrument/sample/pattern counts, created-with/compatible-with versions (0yxx = y.xx), flags (stereo, vol-0 optimisations, instrument mode, linear slides, old effects, link G to sample change, MIDI pitch controller, embedded MIDI config), global volume, mix volume, initial speed and tempo, stereo separation, pitch-wheel depth, song message (up to 8000 chars in 1.04+), 64 initial channel pans (0–64, 100 = surround, +128 = disabled) and volumes.
  • Instrument: NNA (cut/continue/off/fade), DCT (off/note/sample/instrument), DCA (cut/off/fade), fadeout (0–128, count 1024; the old format 0–64/512), pitch-pan separation −32…+32 and centre note, global volume, default pan, random volume variation (%), random panning variation ("not implemented yet"), initial filter cutoff/resonance, MIDI channel/program/bank, the note-sample table (120 entries), and three 25-node envelopes (volume, panning, pitch) with on/loop/sustain-loop flags — the pitch envelope's bit 7 makes it a filter envelope instead.
  • Sample: flags for 16-bit, stereo, compressed, loop, sustain loop, ping-pong; default/global volume, pan, C5 speed, loop and sustain points, vibrato speed/depth/rate and waveform (sine, ramp down, square, random).
  • Patterns are packed with per-channel masks (note, instrument, volume/pan, command); orders 254 = skip, 255 = end.
  • Volume: sample mode FV = Vol × SV × CV × GV / 2¹⁸; instrument mode multiplies in instrument volume, envelope value and the note-fade component (FV … / 2⁴¹). Linear slides: frequency × 2^(slide/768) — Exx = −4×xx, EEx = −xx (so 768 units per octave, 64 per semitone); sample vibrato always uses linear slides. Panning: instrument pan overrides channel pan, then + (note − PPC) × PPS / 8. Pitch envelopes are in half-semitone units, interpolated 64×.
  • Vibrato in IT is "two times finer than in any other tracker and is updated EVERY tick"; Hxy speed = 4x, depth = 4y (doubled with Old Effects), Uxy depth = y; Yxy uses a table four times larger (so four times slower); C is hex; E/F/G share memory; Oxx addresses the xx00-th sample, not byte.
  • Channel allocation in instrument mode: a playing host channel is flagged background and its NNA triggered; the note takes the first free virtual channel, else the quietest background channel, else it is dropped ("by far the simplest implementation of congestion resolution — IT 2.03 and above have a greatly enhanced method").
  • Effect pseudo-code for A, B, C, D, H, I, N, U, W ("sorry this is incomplete").

Pages touched#

it-format, impulse-tracker, new-note-actions, instrument-envelopes, randomization-and-probability, pitch-slide-and-portamento, vibrato, stereo-panning, sample-offset.

source file wiki/summaries/s-ittech.md · graph