Noisetracker/Soundtracker/Protracker Module Format

4th Revision

Credits: Lars Hamre, Norman Lin, Kurt Kennett, Mark Cox, Peter Hanning, Steinar Midtskogen, Marc Espie, and Thomas Meyer

(All numbers below are given in decimal)

Module Format:
# Bytes   Description
-------   -----------
20        The module's title, padded with null (\0) bytes. Original
          Protracker wrote letters only in uppercase.

(Data repeated for each sample 1-15 or 1-31)
22        Sample's name, padded with null bytes. If a name begins with a
          '#', it is assumed not to be an instrument name, and is
          probably a message.
2         Sample length in words (1 word = 2 bytes). The first word of
          the sample is overwritten by the tracker, so a length of 1
          still means an empty sample. See below for sample format.
1         Lowest four bits represent a signed nibble (-8..7) which is
          the finetune value for the sample. Each finetune step changes
          the note 1/8th of a semitone. Implemented by switching to a
          different table of period-values for each finetune value.
1         Volume of sample. Legal values are 0..64. Volume is the linear
          difference between sound intensities. 64 is full volume, and
          the change in decibels can be calculated with 20*log10(Vol/64)
2         Start of sample repeat offset in words. Once the sample has
          been played all of the way through, it will loop if the repeat
          length is greater than one. It repeats by jumping to this
          position in the sample and playing for the repeat length, then
          jumping back to this position, and playing for the repeat
          length, etc.
2         Length of sample repeat in words. Only loop if greater than 1.
(End of this sample's data.. each sample uses the same format and they
 are stored sequentially)
N.B. All 2 byte lengths are stored with the Hi-byte first, as is usual
     on the Amiga (big-endian format).

1         Number of song positions (ie. number of patterns played
          throughout the song). Legal values are 1..128.
1         Historically set to 127, but can be safely ignored.
          Noisetracker uses this byte to indicate restart position -
          this has been made redundant by the 'Position Jump' effect.
128       Pattern table: patterns to play in each song position (0..127)
          Each byte has a legal value of 0..63 (note the Protracker
          exception below). The highest value in this table is the
          highest pattern stored, no patterns above this value are
          stored.
(4)       The four letters "M.K." These are the initials of
          Unknown/D.O.C. who changed the format so it could handle 31
          samples (sorry.. they were not inserted by Mahoney & Kaktus).
          Startrekker puts "FLT4" or "FLT8" here to indicate the # of
          channels. If there are more than 64 patterns, Protracker will
          put "M!K!" here. You might also find: "4CHN", "6CHN" or "8CHN"
          which indicates 4, 6 or 8 channels respectively. If no letters
          are here, then this is the start of the pattern data, and only
          15 samples were present.

(Data repeated for each pattern:)
1024      Pattern data for each pattern (starting at 0).
(Each pattern has same format and is stored in numerical order.
 See below for pattern format)

(Data repeated for each sample:)
xxxxxx    The maximum size of a sample is 65535 words. Each sample is
          stored as a collection of bytes (length of a sample was given
          previously in the module). Each byte is a signed value (-128
          ..127) which is the channel data. When a sample is played at a
          pitch of C2 (see below for pitches), about 8287 bytes of
          sample data are sent to the channel per second. Multiply the
          rate by the twelfth root of 2 (=1.0595) for each semitone
          increase in pitch eg. moving the pitch up 1 octave doubles the
          rate. The data is stored in the order it is played (eg. first
          byte is first byte played). The first word of the sample data
          is used to hold repeat information, and will overwrite any
          sample data that is there (but it is probably safer to set it
          to 0).
          The rate given above (8287) conveys an inaccurate picture of
          the module-format - in reality it is different for different
          Amigas. As the routines for playing were written to run off
          certain interrupts, for different Amiga computers the rate to
          send data to the channel will be different. For PAL machines
          the clock rate is 7093789.2 Hz and for NTSC machines it is
          7159090.5 Hz. When the clock rate is divided by twice the
          period number for the pitch it will give the rate to send the
          data to the channel, eg. for a PAL machine sending a note at
          C2 (period 428), the rate is 7093789.2/856 ~= 8287.1369
(Each sample is stored sequentially)

Pattern Format:
Each pattern is divided into 64 divisions. By allocating different
tempos for each pattern and spacing the notes across different amounts
of divisions, different bar sizes can be accommodated.

Each division contains the data for each channel (1..4) stored after
each other. Channels 1 and 4 are on the left, and channels 2 and 3 are
on the right. In the case of more channels: channels 5 and 8 are on the
left, and channels 6 and 7 are on the right, etc. Each channel's data in
the division has an identical format which consists of 2 words (4
bytes). Divisions are numbered 0..63. Each division may be divided into
a number of ticks (see 'set speed' effect below).

Channel Data:
                  (the four bytes of channel data in a pattern division)
7654-3210 7654-3210 7654-3210 7654-3210
wwww xxxxxxxxxxxxxx yyyy zzzzzzzzzzzzzz

    wwwwyyyy (8 bits) is the sample for this channel/division
xxxxxxxxxxxx (12 bits) is the sample's period (or effect parameter)
zzzzzzzzzzzz (12 bits) is the effect for this channel/division

If there is to be no new sample to be played at this division on this
channel, then the old sample on this channel will continue, or at least
be "remembered" for any effects. If the sample is 0, then the previous
sample on that channel is used. Only one sample may play on a channel at
a time, so playing a new sample will cancel an old one - even if there
has been no data supplied for the new sample. Though, if you are using a
"silence" sample (ie. no data, only used to turn off other samples) it
is polite to set its default volume to 0.

To determine what pitch the sample is to be played on, look up the
period in a table, such as the one below (for finetune 0). If the period
is 0, then the previous period on that channel is used. Unfortunately,
some modules do not use these exact values. It is best to do a binary-
search (unless you use the period as the offset of an array of notes..
expensive), especially if you plan to use periods outside the "standard"
range. Periods are the internal representation of the pitch, so effects
that alter pitch (eg. sliding) alter the period value (see "effects"
below).

          C    C#   D    D#   E    F    F#   G    G#   A    A#   B
Octave 1: 856, 808, 762, 720, 678, 640, 604, 570, 538, 508, 480, 453
Octave 2: 428, 404, 381, 360, 339, 320, 302, 285, 269, 254, 240, 226
Octave 3: 214, 202, 190, 180, 170, 160, 151, 143, 135, 127, 120, 113

Octave 0:1712,1616,1525,1440,1357,1281,1209,1141,1077,1017, 961, 907
Octave 4: 107, 101,  95,  90,  85,  80,  76,  71,  67,  64,  60,  57

Octaves 0 and 4 are NOT standard, so don't rely on every tracker being
able to play them, or even not crashing if being given them - it's just
nice that if you can code it, to allow them to be read.

Effects:
Effects are written as groups of 4 bits, eg. 1871 = 7 * 256 + 4 * 16 +
15 = [7][4][15]. The high nibble (4 bits) usually determines the effect,
but if it is [14], then the second nibble is used as well.

[0]: Arpeggio
     Where [0][x][y] means "play note, note+x semitones, note+y
     semitones, then return to original note". The fluctuations are
     carried out evenly spaced in one pattern division. They are usually
     used to simulate chords, but this doesn't work too well. They are
     also used to produce heavy vibrato. A major chord is when x=4, y=7.
     A minor chord is when x=3, y=7.

[1]: Slide up
     Where [1][x][y] means "smoothly decrease the period of current
     sample by x*16+y after each tick in the division". The
     ticks/division are set with the 'set speed' effect (see below). If
     the period of the note being played is z, then the final period
     will be z - (x*16 + y)*(ticks - 1). As the slide rate depends on
     the speed, changing the speed will change the slide. You cannot
     slide beyond the note B3 (period 113).

[2]: Slide down
     Where [2][x][y] means "smoothly increase the period of current
     sample by x*16+y after each tick in the division". Similar to [1],
     but lowers the pitch. You cannot slide beyond the note C1 (period
     856).

[3]: Slide to note
     Where [3][x][y] means "smoothly change the period of current sample
     by x*16+y after each tick in the division, never sliding beyond
     current period". Any note in this channel's division is not played,
     but changes the "remembered" note - it can be thought of as a
     parameter to this effect. Sliding to a note is similar to effects
     [1] and [2], but the slide will not go beyond the given period, and
     the direction is implied by that period. If x and y are both 0,
     then the old slide will continue.

[4]: Vibrato
     Where [4][x][y] means "oscillate the sample pitch using a
     particular waveform with amplitude y/16 semitones, such that (x *
     ticks)/64 cycles occur in the division". The waveform is set using
     effect [14][4]. By placing vibrato effects on consecutive
     divisions, the vibrato effect can be maintained. If either x or y
     are 0, then the old vibrato values will be used.

[5]: Continue 'Slide to note', but also do Volume slide
     Where [5][x][y] means "either slide the volume up x*(ticks - 1) or
     slide the volume down y*(ticks - 1), at the same time as continuing
     the last 'Slide to note'". It is illegal for both x and y to be
     non-zero. You cannot slide outside the volume range 0..64. The
     period-length in this channel's division is a parameter to this
     effect, and hence is not played.

[6]: Continue 'Vibrato', but also do Volume slide
     Where [6][x][y] means "either slide the volume up x*(ticks - 1) or
     slide the volume down y*(ticks - 1), at the same time as continuing
     the last 'Vibrato'". It is illegal for both x and y to be non-zero.
     You cannot slide outside the volume range 0..64.

[7]: Tremolo
     Where [7][x][y] means "oscillate the sample volume using a
     particular waveform with amplitude y*(ticks - 1), such that (x *
     ticks)/64 cycles occur in the division". If either x or y are 0,
     then the old tremolo values will be used. The waveform is set using
     effect [14][7]. Similar to [4].

[8]: (Set panning position)
     This command is unused by the vast majority of trackers, but one
     tracker for the PC (called DMP) uses this for setting the panning
     state of the channel. As this is very useful, I am documenting it
     here. The effect [8][x][y] means "set channel to panning position
     x*16 + y". Position 0 is left, 64 is centre, 128 is right.
     Interestingly, position 164 is defined as "surround". 

[9]: Set sample offset
     Where [9][x][y] means "play the sample from offset x*4096 + y*256".
     The offset is measured in words. If no sample is given, yet one is
     still playing on this channel, it should be retriggered to the new
     offset using the current volume.

[10]: Volume slide
     Where [10][x][y] means "either slide the volume up x*(ticks - 1) or
     slide the volume down y*(ticks - 1)". If both x and y are non-zero,
     then the y value is ignored (assumed to be 0). You cannot slide
     outside the volume range 0..64.

[11]: Position Jump
     Where [11][x][y] means "stop the pattern after this division, and
     continue the song at song-position x*16+y". This shifts the
     'pattern-cursor' in the pattern table (see above). Legal values for
     x*16+y are from 0 to 127.

[12]: Set volume
     Where [12][x][y] means "set current sample's volume to x*16+y".
     Legal volumes are 0..64.

[13]: Pattern Break
     Where [13][x][y] means "stop the pattern after this division, and
     continue the song at the next pattern at division x*10+y" (the 10
     is not a typo). Legal divisions are from 0 to 63.

[14][0]: Set filter on/off
     Where [14][0][x] means "set sound filter ON if x is 0, and OFF is x
     is 1". This is a hardware command for some Amigas, so if you don't
     understand it, it is better not to use it.

[14][1]: Fineslide up
     Where [14][1][x] means "decrement the period of the current sample
     by x". The incrementing takes place at the beginning of the
     division, and hence there is no actual sliding. This type of
     sliding cannot be continued with effect [5]. You cannot slide
     beyond the note B3 (period 113).

[14][2]: Fineslide down
     Where [14][2][x] means "increment the period of the current sample
     by x". Similar to [14][1] but shifts the pitch down. You cannot
     slide beyond the note C1 (period 856).

[14][3]: Set glissando on/off
     Where [14][3][x] means "set glissando ON if x is 1, OFF if x is 0".
     Used in conjunction with [3] ('Slide to note'). If glissando is on,
     then 'Slide to note' will slide in semitones, otherwise will
     perform the default smooth slide.

[14][4]: Set vibrato waveform
     Where [14][4][x] means "set the waveform of succeeding 'vibrato'
     effects to wave #x". [4] is the 'vibrato' effect.  Possible values
     for x are:
          0 - sine (default)      /\    /\     (2 cycles shown)
          4  (without retrigger)     \/    \/

          1 - ramp down          | \   | \
          5  (without retrigger)     \ |   \ |

          2 - square             ,--,  ,--,
          6  (without retrigger)    '--'  '--'

          3 - random: a random choice of one of the above.
          7  (without retrigger)
     If the waveform is selected "without retrigger", then it will not
     be retriggered from the beginning at the start of each new note.

[14][5]: Set finetune value
     Where [14][5][x] means "sets the finetune value of the current
     sample to the signed nibble x". x has legal values of 0..15,
     corresponding to signed nibbles 0..7,-8..-1 (see start of text for
     more info on finetune values).

[14][6]: Loop pattern
     Where [14][6][x] means "set the start of a loop to this division if
     x is 0, otherwise after this division, jump back to the start of a
     loop and play it another x times before continuing". If the start
     of the loop was not set, it will default to the start of the
     current pattern. Hence 'loop pattern' cannot be performed across
     multiple patterns. Note that loops do not support nesting, and you
     may generate an infinite loop if you try to nest 'loop pattern's.

[14][7]: Set tremolo waveform
     Where [14][7][x] means "set the waveform of succeeding 'tremolo'
     effects to wave #x". Similar to [14][4], but alters effect [7] -
     the 'tremolo' effect.

[14][8]: -- Unused --

[14][9]: Retrigger sample
     Where [14][9][x] means "trigger current sample every x ticks in
     this division". If x is 0, then no retriggering is done (acts as if
     no effect was chosen), otherwise the retriggering begins on the
     first tick and then x ticks after that, etc.

[14][10]: Fine volume slide up
     Where [14][10][x] means "increment the volume of the current sample
     by x". The incrementing takes place at the beginning of the
     division, and hence there is no sliding. You cannot slide beyond
     volume 64.

[14][11]: Fine volume slide down
     Where [14][11][x] means "decrement the volume of the current sample
     by x". Similar to [14][10] but lowers volume. You cannot slide
     beyond volume 0.

[14][12]: Cut sample
     Where [14][12][x] means "after the current sample has been played
     for x ticks in this division, its volume will be set to 0". This
     implies that if x is 0, then you will not hear any of the sample.
     If you wish to insert "silence" in a pattern, it is better to use a
     "silence"-sample (see above) due to the lack of proper support for
     this effect.

[14][13]: Delay sample
     Where [14][13][x] means "do not start this division's sample for
     the first x ticks in this division, play the sample after this".
     This implies that if x is 0, then you will hear no delay, but
     actually there will be a VERY small delay. Note that this effect
     only influences a sample if it was started in this division.

[14][14]: Delay pattern
     Where [14][14][x] means "after this division there will be a delay
     equivalent to the time taken to play x divisions after which the
     pattern will be resumed". The delay only relates to the
     interpreting of new divisions, and all effects and previous notes
     continue during delay.

[14][15]: Invert loop
     Where [14][15][x] means "if x is greater than 0, then play the
     current sample's loop upside down at speed x". Each byte in the
     sample's loop will have its sign changed (negated). It will only
     work if the sample's loop (defined previously) is not too big. The
     speed is based on an internal table.

[15]: Set speed
     Where [15][x][y] means "set speed to x*16+y". Though it is nowhere
     near that simple. Let z = x*16+y. Depending on what values z takes,
     different units of speed are set, there being two: ticks/division
     and beats/minute (though this one is only a label and not strictly
     true). If z=0, then what should technically happen is that the
     module stops, but in practice it is treated as if z=1, because
     there is already a method for stopping the module (running out of
     patterns). If z<=32, then it means "set ticks/division to z"
     otherwise it means "set beats/minute to z" (convention says that
     this should read "If z<32.." but there are some composers out there
     that defy conventions). Default values are 6 ticks/division, and
     125 beats/minute (4 divisions = 1 beat). The beats/minute tag is
     only meaningful for 6 ticks/division. To get a more accurate view
     of how things work, use the following formula:
                             24 * beats/minute
          divisions/minute = -----------------
                              ticks/division
     Hence divisions/minute range from 24.75 to 6120, eg. to get a value
     of 2000 divisions/minute use 3 ticks/division and 250 beats/minute.
     If multiple "set speed" effects are performed in a single division,
     the ones on higher-numbered channels take precedence over the ones
     on lower-numbered channels. This effect has a large number of
     different implementations, but the one described here has the
     widest usage.

N.B. This document should be fairly accurate now, but as the module
format is more of an observation than a standard, a couple of effects
cannot be relied upon to act exactly the same from tracker to tracker
(especially if the tracker is not for the Amiga). It is probably better
to use this document as a guide rather than as a hard-and-fast
definition of the module format. Oh.. and yes, I would normally give
bytes as hex values, but it is easier to understand a consistent
notation.

Andrew Scott Author of MIDIMOD (MOD to MIDI converter), PTMID (MIDI to MOD converter)
1