Offset --------------------------------------- 0 20 bytes Song Name [1] 20 22 bytes Sample name 42 1 word sample length [2] 43 1 byte finetune [3] 44 1 byte volume [4] 46 1 word looping start point 48 1 word looping length --------- 30 bytes [5] 20+30*n 1 byte length of song [6] 21+30*n 1 byte number of patterns to load [7] 22+30*n 128 bytes pattern indices [8] 1080 4 bytes signature (31 samples modules only) 150+30*n 1024 bytes each pattern [9] 150+30*n sample data [10] +1024*p
[1] Song names and sample names will be converted to a null-terminated string. Be very careful as to what to allow there...
[2] Sample length, looping start point, looping length are normally stored as a number of words. Occasionally, in very old modules, the looping start point might be stored in bytes (case in point: `kawai-k1
'). Checking looping start point + looping length against sample length might discover the problem. Sound samples are 8-bit signed
[3] Finetune does only exist for protracker modules: if the signature isn't M.K./M!K!, it should be 0. Normal values are 0-15. Signature M!K! should only occur if the number of patterns is greater than 64.
[4] This is the sample default volume, when no specific values have been given. Normal values are 0-64. Some songs include out of range values. Be sure to normalize to 0-64
[5] There are 15 sample info entries in old soundtracker files, 31 in newer protracker/noisetracker ones. The difference lies in the signature. Valid signatures are M.K. / M!K! (for Mahoney & Kaktus), FLT4/FLT8 for startrekker modules.
[6] Range 1-128
[7] Do not trust this byte ! Very old trackers used it to indicate the number of pattern indices, so it's set to 127 by protracker to enable old trackers to load this module. Noisetracker uses this byte for restart.
[8] This is a sequencing order: like in play pattern #2, then #4, then #2 again, and so on...
[9] We use the highest pattern number in the pattern indices table to determine the number of patterns p to load. Older trackers saved it as `number of patterns to load'.
[10] Sample data is given for each existing sample. Non-existing samples have a length of 0 or 1 (usually 1). Sample values are signed bytes, in 2-complement notation. Each sample length is a multiple of 2 in bytes.