Fall 1995
© IEEE Computer Society Press.


Protracker 1.1B Song/Module Format:

Offset Bytes Description
0 20 Songname. Remember to put trailing null bytes at the end...

Information for sample 1-31:
Offset Bytes Description
20 22 Samplename for sample 1.
Pad with null bytes.
42 2 Samplelength for sample 1.
Stored as number of words.
Multiply by two to get real sample length in bytes.
44 1 Lower four bits are the finetune value,
stored as a signed four bit number.
The upper four bits are not used,
and should be set to zero.
Value:Finetune:
00
1+1
2+2
3+3
4+4
5+5
6+6
7+7
8-8
9-7
A-6
B-5
C-4
D-3
E-2
F-1
45 1 Volume for sample 1.
Range is $00-$40, or 0-64 decimal.
46 2 Repeat point for sample 1.
Stored as number of words offset
from start of sample.
Multiply by two to get offset in bytes.
48 2 Repeat Length for sample 1.
Stored as number of words in loop.
Multiply by two to get replen in bytes.

Information for the next 30 samples starts here. It's just like the info forsample 1.

Offset Bytes Description
50 30 Sample 2...
80 30 Sample 3...
.

.

.

890 30 Sample 30...
920 30 Sample 31...

Offset Bytes Description
950 1 Songlength. Range is 1-128.
951 1 Well... this little byte here is set to 127,
so that old trackers will search through all
patterns when loading.
Noisetracker uses this byte for restart, but we don't.
952 128 Song positions 0-127.
Each hold a number from 0-63 that tells the tracker
what pattern to play at that position.
1080 4 The four letters "M.K." - This is something
Mahoney & Kaktus inserted when they increased
the number of samples from 15 to 31. If it's not there,
the module/song uses 15 samples or the text has been
removed to make the module harder to rip.
Star trekker puts "FLT4" or "FLT8" there instead.

Offset Bytes Description
1084 1024 Data for pattern 00. . . .
xxxx Number of patterns stored is equal to the highest
pattern number in the song position table
(at offset 952-1079).

Each note is stored as 4 bytes, and all four notes at each position inthe pattern are stored after each other.

 
00 -  chan1  chan2  chan3  chan4 
01 -  chan1  chan2  chan3  chan4 
02 -  chan1  chan2  chan3  chan4 
etc. 
 
Info for each note: 
 
 _____byte 1_____   byte2_    _____byte 3_____   byte4_ 
/                \ /      \  /                \ /      \ 
0000          0000-00000000  0000          0000-00000000 
 
Upper four    12 bits for    Lower four    Effect command. 
bits of sam-  note period.   bits of sam- 
ple number.                  ple number. 
 
Periodtable for Tuning 0, Normal 
  C-1 to B-1 : 856,808,762,720,678,640,604,570,538,508,480,453 
  C-2 to B-2 : 428,404,381,360,339,320,302,285,269,254,240,226 
  C-3 to B-3 : 214,202,190,180,170,160,151,143,135,127,120,113 
 

To determine what note to show, scan through the table until you find the same period as the one stored in byte 1-2. Use the index to lookup in a note names table.

This is the data stored in a normal song. A packed song starts with thefour letters "PACK", but i don't know how the song is packed: You canget the source code for the cruncher/decruncher from us if you need it,but I don't understand it; I've just ripped it from another tracker...

In a module, all the samples are stored right after the pattern data. To determine where a sample starts and stops, you use the sample info structures in the beginning of the file (from offset 20). Take a lookat the mt_init routine in the playroutine, and you'll see just how itis done.

Lars "ZAP" Hamre/Amiga Freelancers


Mark J Cox
Bradford, UK

PS: A file with even *much* more info on MOD files, compiled by LarsHamre, is available from ftp.cwi.nl:/pub/audio/MOD-info.
Enjoy!


[ Main paragraph ]