Noisetracker/Soundtracker/Protracker Module Format
--------------------------------------------------
Credits: Norman Lin, Mark Cox, Lars Hamre, Peter Hanning
(All numbers below are given in decimal)

Module Format:
# Bytes      Description
-------      -----------
20           The module's title, padded with null (\0) bytes.

(Data repeated for each sample 1-15 or 1-31:)
22           Sample's name, padded with null bytes.
2            Sample length in words (ie. multiply by 2 for length in bytes).
1            Lowest four bits represent a signed nibble (-8..7) which is
             the finetune value for the sample. It is mostly ignored, but I
             think each note is supposed to be 16 "finetunes" from the next.
1            Volume of sample. Legal values are 0..64.
2            Start of sample repeat offset in words.
2            Length of sample repeat in words ( >1 if looping is used)
(End of this sample's data.. each sample uses the same format and they are
 stored sequentially)
NB. All 2 byte lengths are stored with the Hi-byte first, as is usual on
    the Amiga.

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. 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 Mahoney &
             Kaktus and were introduced along with the increase to 31
             samples. Startrekker puts "FLT4" or "FLT8" here to indicate
             the # of channels. If no letters are here, then this is the
             start of the pattern data, and only 15 samples are 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       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, 8000 bytes of channel
             data are sent to the channel per second. Multiply the rate
             by the twelfth root of 2 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), but if the 'invert loop' effect is used then
             it order is reversed.
(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 accomodated.

Each division contains the data for each channel (1..4) stored after each
other. 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 divison)
7654-3210 7654-3210 7654-3210 7654-3210
wwww xxxxxxxxxxxxxx yyyy zzzzzzzzzzzzzz

    wwwwyyyy (8 bits) is the sample for this channel/division (0 = no sample)
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. 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. It is best to do a binary-search,
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". The period-length in this channel's division is a parameter to
  this effect, and hence is not played. 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*5 or slide the volume
  down y*5, 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*5 or slide the volume
  down y*5, 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*5, such that (x * ticks)/64 cycles occur in the
  division". The waveform is set using effect [14][7]. Similar to [4].

[8]: -- Unused --

[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*5 or slide the
  volume down y*5". It is illegal for both x and y to be non-zero. 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*16+y". 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 1, and OFF is x is 0".
  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 sliding. 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 is 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)
    4  (without retrigger)     \/    \/

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

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

    3 - random
    7  (without retrigger)
  Sorry, don't ask me what the "without retrigger" means.

[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..-1.

[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. 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, the pattern will not be
  played for the length of x notes, resume the pattern after this".

[14][15]: Invert loop
  Where [14][15][x] means "if x is greater than 0, then play the current
  sample's loop backwards at speed x, otherwise play the sample forward".
  It will only work if the sample's loop (defined previously) is not too
  big.

[15]: Set speed
  Where [15][x][y] means "set speed to x*16+y". Though it is not that
  simple. Let z = x*16+y. z=0 is the same as z=1. If z<32 then it means
  "set ticks/division to z and beats/min to 768/z" otherwise it means "set
  beats/min to z". Default values are 6 ticks/division, and 128 beats/min
  (4 divisions = 1 beat). It is best to not mix the different types of
  "set speed" as I have seen 4 different trackers act 4 different ways
  when mixing them.

NB. I have tested most of the effects, but some were a bit hard to test
(such as filter, etc.) 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 consistant notation.

Andrew Scott (Adrenalin Software), INTERNET:ascott@tartarus.uwa.edu.au
Author of MIDIMOD.
