Each pattern holds 64 sets of 4 events, one for each Amiga track, numbered
0 to 3 in the usual Amiga way (0-3: left channels, 1-2: right channels, see Amiga audio hardware).
Some modules programmed on PC have a special signature 6CHN
or 8CHN
,
and accordingly, they feature more channels.
The four bytes per event are to be decoded as follows:
_____byte 1_____ byte2_ _____byte 3_____ byte4_ | | | | | | | | 0000 0000-00000000 0000 0000-00000000 Upper four 12 bits for Lower four Effect/parameters bits of sam- note period. bits of sam- ple number. ple number.
Sample number should be in the range 0-31... anything else is an error, and should be flagged as such. For standard protracker modules, the note period can be converted to a note n with the following lookup table[1]:
Older tracker modules may use highly non-standard periods. I have yet to encounter some, though. [2] As a result tracker converts these pitch values to notes and stores notes internally. These pitch values are Amiga-dependent. See Amiga audio hardware, for further details.
The effect command has two parts: an effect and parameters. You should actually decode it as three independent nibbles: e (effect) phi (parameter, hi-part), plow (parameter, low-part). The interpretation is very dependent of the actual command involved. In many cases, phi and plow are read as a single byte parameter (para=phi<<4 | plow)
[1] Actually, tracker doesn't use this exact table, but builds a precise well-tempered scale using powers of 2, see `notes.c
'
[2] It would be easy to add some heuristics to the virtual player to detect these modules, and build the corresponding well-tempered scale on the fly. The hardest decisions would be to adjust the table because of limited precision (values stored as integer arithmetic) and possible distinct scales for each sample.