This is the original Pro Tracker v1.1 module is AY music editor for ZX Spectrum, author is Nikolay Khudentsov (Nick).
According to the native documentation, it is positioned as the successor of the famous Sound Tracker. Perhaps in 1995 it sounded too presumptuous, but the subsequent versions of Pro Tracker 2 and 3 still managed to outshine the competitors' music editors.
Commands to change the volume and playback speed, the loop position, and the configurable size of each pattern were added to the capabilities of Sound Tracker. The author's string appeared, which was saved in the body of the module (and not in the player) for the first time, which is especially valuable for the proper distribution of music, because before that a large number of Sound Tracker modules were on hand, and many in credits wrote "thanks to an unknown author".
But the approach to saving modules turned out to be truly revolutionary. If Sound Tracker Pro removed unused patterns from the editor's stored memory dump and applied compression (which gave a compact result, but led to the loss of patterns accidentally excluded from the position list), then Pro Tracker versions 1-3 compiles before saving, which in itself works no worse than a compressor. That is why in the collections of discs and music, you can often find two versions of the same Pro Tracker module (any version), which differ only in file size: a larger size version is saved to disk from save module menu (is saved even what is not used and does not affect the sound), and with a smaller size one is saved (with or without the player) from compile menu (in this case there is nothing superfluous inside).
The structure of the module can be called traditional, so if you have any questions with an understanding of what is described below, you can refer to the description of the predecessor formats.
Offset | Size | Designation | Description |
---|---|---|---|
+0 | 1 | tempo | Playback speed. |
+1 | 1 | numpos | Number of positions |
+2 | 1 | lppos | Looping position |
+3 | 32 | samptrs | Pointers to samples (16 pieces, if there is no sample with this number then 0x0000, the 0th sample is always 0x0000). |
+35 | 32 | ornptrs | Pointers to ornaments (16 pieces, if there is no sample with this number then 0x0000). |
+67 | 2 | patsptr | Pointer to patptrs. |
+69 | 30 | title | Author's string. |
+99 | numpos+1 | poslist | Positions list is pattern numbers in playing order (one byte per position) with 0xFF at the end. |
+patsptr | patptrs | Pattern pointers list (three pointers for each channel of the pattern) with 0x0000 at the end, maxpat is the maximum pattern number in the positions list. | |
? | patsdata | Patterns data (described below). | |
? | samsdata | Samples data (described below). | |
? | ornsdata | Ornaments data (described below). |
The pattern is stored as three pointers to the pattern channels data is a sequence of bytes with 0xFF at the end.
Channel's byte | Description |
---|---|
0x00..0x5F | Note from C-1 to B-8. Exit. |
0x60..0x6F | Sample from 0 to 15. |
0x70..0x7F | Ornaments from 0 to 15. |
0x80 | R--. Exit. |
0x81 | Envelope off. |
0x82..0x8F | Envelope type from 1 to 14 on. Next 2 bytes are envelope period. |
0x90 | Exit. |
0x91..0xA0 | Speed from 0 to 15. |
0xA1..0xB0 | Volume from 0 to 15. |
0xB1..0xF0 | The number of skipping lines from now on (from 0 to 63, initially 0). |
0xF1..0xFE | Ignored. |
0xFF | Pattern data end. |
Samples can be up to 64 ticks long, 3 bytes per tick.
Offset | Description |
---|---|
+0 | Length from 1 to 64. |
+1 | Loop from 0 to Length-1. |
+2 | Tick of 3 bytes: +0 Bits 0-3 – amplitude, Bits 4-7 – high byte of tone deviation; +1 Bits 0-4 – noise period (if mask turned on), Bit 5 – tone deviation sign (1 for minus), Bit 6 – tone mask, Bit 7 – noise mask; +2 low byte of tone deviation. |
+5 | Next ticks of 3 bytes. |
Ornaments can be up to 64 ticks long, 1 byte per tick (deviation in semitones from -63 to +63), but do not have their own loop body (they loop synchronously with the sample). The editor does not save all 64 ticks to the module, but only the part that will be needed for playback.