-
Notifications
You must be signed in to change notification settings - Fork 3
/
MultiTracker (.mtm).txt
90 lines (89 loc) · 4.24 KB
/
MultiTracker (.mtm).txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
The following is a summary of the MultiTracker Module (MTM) fromat. It is
intended for programmers who wish to support the format in any manner. Note
that all effects are defined as the current Protracker effects standard. A
short summary of this standard is provided in the documentation file for the
Multitracker Module Editor.
ÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Position³Length³Description
ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
0 ³3 ³"MTM" file marker
3 ³BYTE ³version number - upper nybble is major version #, lower is
³ ³ minor version number
4 ³20 ³ASCIIZ songname
24 ³WORD ³number of tracks saved
26 ³BYTE ³last pattern number saved
27 ³BYTE ³last order number to play (songlength-1)
28 ³WORD ³length of extra comment field
30 ³BYTE ³number of samples saved (NOS)
31 ³BYTE ³attribute byte (currently defined as 0)
32 ³BYTE ³beats per track
33 ³BYTE ³number of tracks to be played back
34 ³32 ³voice pan positions
ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
66 ³NOS*37³Instrument data:
ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³22 ³sample name
³DWORD ³sample length in bytes
³DWORD ³offset of beginning of sample loop in bytes
³DWORD ³offset of end of sample loop in bytes
³BYTE ³finetune value
³BYTE ³standard volume of sample
³BYTE ³attribute byte: bit meaning
³ ³ 0 0=8 bit sample 1=16 bit sample
³ ³ 1-7 undefined (set to zero)
ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
66+ ³128 ³Pattern order data
(NOS*37)³ ³
ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
194+ ³trks* ³Track data:
(NOS*37)³192 ³Each track is saved independently and takes exactly 192 bytes.
³ ³The tracks are arranged as 64 consecutive 3-byte notes. These
³ ³notes have the following format:
³ ³
³ ³
³ ³ BYTE 0 BYTE 1 BYTE 2
³ ³ ppppppii iiiieeee aaaaaaaa
³ ³
³ ³ p = pitch value (0=no pitch stated)
³ ³ i = instrument number (0=no instrument number)
³ ³ e = effect number
³ ³ a = effect argument
³ ³
ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
194+ ³ ³Track sequencing data
NOS*37+ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
trks*192³(last pattern saved + 1)*32 WORDS³
ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
³ ³The track sequencing data is really just a listing of which
³ ³track is used as which voice in each saved pattern. This is
³ ³necessary since one track may be a part of many different
³ ³patterns. (not orders) Doing this saves much of the memory
³ ³wasted in a normal MOD by repetition of certain tracks over
³ ³and over again throughout the file.
³ ³
³ ³Note that track zero is never saved, but always considered as
³ ³an empty track. Therefore, track numbering for the saved
³ ³tracks really starts at one.
³ ³
³ ³The data is organized in sets of 32 voices. First comes a
³ ³WORD representing which track is in pattern 0, voice 0. The
³ ³next WORD is pattern 0, voice 1, etc. This is repeated for
³ ³each pattern saved, giving a total track sequencing size of
³ ³32 WORDS per pattern saved.
³ ³
³ ³If your code uses MOD-style memory organization, you can still
³ ³play MTM's. You merely jump to the track sequencing data, and
³ ³then load each pattern separately by jumping back and forth
³ ³between the track sequences and the actual track data.
ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
194+ ³Header³Extra comment field
NOS*37+ ³says. ³(Length specified in the header)
trks*192ÀÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
+(last pattern saved + 1)*32*2 ³
ÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
194+ ³sample³Raw sample data
NOS*37+ ³length³(unsigned)
trks*192ÀÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
+(last pattern saved + 1)*32*2+ ³
length of extra comment field ³
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ