git-subtree-dir: src/dp_doom git-subtree-split: 190992421c7c643afc99d7f7c511c162f65bea85
331 lines
17 KiB
Text
331 lines
17 KiB
Text
MUS File Format
|
|
═══════════════
|
|
|
|
Written by: Vladimir Arnost, QA-Software
|
|
Updated: March 9, 1996
|
|
Version: 1.31
|
|
Internet: xarnos00@dcse.fee.vutbr.cz
|
|
FIDO: 2:423/36.2
|
|
|
|
|
|
1. General Description
|
|
──────────────────────
|
|
|
|
A .MUS file is a simple clone of .MID file. It uses the same instruments,
|
|
similar commands and the same principle: a list of sound events.
|
|
It consists of two parts: header and body.
|
|
|
|
NOTE: All numerical values mentioned in this document are zero-based.
|
|
If not specified otherwise, all numbers are given in decimal.
|
|
Hexadecimal numbers are suffixed by 'h' (e.g. 5Ch). Bits are
|
|
numbered in this fashion: LSB (right-most) = 0, MSB (left-most) = 7.
|
|
|
|
|
|
2. MUS File Header
|
|
──────────────────
|
|
|
|
The MUS header has the following structure:
|
|
|
|
struct MUSheader {
|
|
char ID[4]; // identifier "MUS" 0x1A
|
|
WORD scoreLen;
|
|
WORD scoreStart;
|
|
WORD channels; // count of primary channels
|
|
WORD sec_channels; // count of secondary channels
|
|
WORD instrCnt;
|
|
WORD dummy;
|
|
// variable-length part starts here
|
|
WORD instruments[];
|
|
};
|
|
|
|
NOTE: WORD is a 16-bit unsigned integer (little-endian)
|
|
|
|
The header has two parts: the fixed-length and the variable-length part.
|
|
The former contains file identifier, score start and length, number of
|
|
channels and number of used instruments. The latter part is actually
|
|
a list of used instruments. The instruments are stored as numbers which
|
|
are arranged in this fashion:
|
|
|
|
Instrument Number Meaning
|
|
0 - 127 standard MIDI instruments
|
|
135 - 181 standard MIDI percussions (notes 35 - 81)
|
|
|
|
`scoreStart' is the absolute file position of the score and `scoreLen' is
|
|
its length in bytes. Usage of a 16-bit number as length limits .MUS file
|
|
size to 64KB.
|
|
|
|
`channels' tells you how many channels are utilized in the song. The
|
|
channel number 15 (percussions) is not included in the sum.
|
|
|
|
|
|
3. MUS File Body
|
|
────────────────
|
|
|
|
Unlike MID files, MUS body contains only one track. File body is
|
|
a sequence of sound events and time records. A sound event consists of
|
|
one or more bytes encoded as follows:
|
|
|
|
1st byte -- event descriptor:
|
|
╓──7─┬──6─┬──5─┬──4─┬──3─┬──2─┬──1─┬──0─╖
|
|
║Last│ Event type │ Channel number ║
|
|
╙────┴────┴────┴────┴────┴────┴────┴────╜
|
|
|
|
`Event type' is one of these:
|
|
0 - release note
|
|
1 - play note
|
|
2 - pitch wheel (bender)
|
|
3 - system event (valueless controller)
|
|
4 - change controller
|
|
5 - ???
|
|
6 - score end
|
|
7 - ???
|
|
|
|
`Channel number' determines which channel this event refers to.
|
|
Channels provide only logical score division. Every channel
|
|
carries its own settings (instrument #, panning, volume) and the
|
|
channel number specifies only which settings to use. In general,
|
|
the channel number itself is almost irrelevant and may be chosen
|
|
arbitrarily within the interval 0 to 14. The only exception is
|
|
the channel number 15, which is dedicated ONLY to percussions.
|
|
|
|
`Last' - if set, the event is followed by time information. This
|
|
means that this is the last event in a group of events which
|
|
occur at the same time. The time information is a number of
|
|
ticks to wait before processing next event. One tick is usually
|
|
1/140 sec (in Doom I, II and Heretic; Raptor uses 1/70 sec).
|
|
|
|
Time information can be read in this way:
|
|
1. time = 0
|
|
2. READ a byte
|
|
3. time = time * 128 + byte AND 127
|
|
4. IF (byte AND 128) GO TO 2
|
|
5. RETURN time
|
|
The time info is a series of 7-bit chunks. The bit #7 is set
|
|
until the last byte whose bit 7 is zero. This scheme allows
|
|
small numbers occupy less space than large ones.
|
|
|
|
Event Type
|
|
────────────────────
|
|
0 Release note
|
|
╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
|
|
║ 0 │ Note number 0 - 127 ║
|
|
╙───┴───┴───┴───┴───┴───┴───┴───╜
|
|
|
|
1 Play note
|
|
╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖ ╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
|
|
║Vol│ Note number 0 - 127 ║ ║ 0 │ Note volume 0 - 127 ║
|
|
╙───┴───┴───┴───┴───┴───┴───┴───╜ ╙───┴───┴───┴───┴───┴───┴───┴───╜
|
|
|
|
`Note volume' is present only if `Vol' bit is set. Otherwise the
|
|
previous value is used and the second byte is not present.
|
|
NOTE: Each channel keeps track of its own last volume value.
|
|
More than one note can be played at once in one channel.
|
|
Channel 15 is dedicated to drums and percussions. `Note number'
|
|
acts as an instrument selector there. See Appendix C
|
|
|
|
2 Pitch wheel
|
|
╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
|
|
║ Pitch wheel value ║
|
|
╙───┴───┴───┴───┴───┴───┴───┴───╜
|
|
|
|
Sets pitch wheel (bender) value of a channel. Some handy values are
|
|
shown in the table (all values in the range 0-255 can be used):
|
|
|
|
┌───────┬───────────────────────┐
|
|
│ Value │ Pitch change │
|
|
├───────┼───────────────────────┤
|
|
│ 0 │ two half-tones down │
|
|
│ 64 │ one half-tone down │
|
|
│ 128 │ normal (default) │
|
|
│ 192 │ one half-tone up │
|
|
│ 255 │ two half-tones up │
|
|
└───────┴───────────────────────┘
|
|
|
|
3 System event (Valueless controller)
|
|
╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
|
|
║ 0 │ Number ║
|
|
╙───┴───┴───┴───┴───┴───┴───┴───╜
|
|
|
|
Number MIDI ctrl Description
|
|
10 120 (78h) All sounds off
|
|
11 123 (7Bh) All notes off
|
|
12 126 (7Eh) Mono
|
|
13 127 (7Fh) Poly
|
|
14 121 (79h) Reset all controllers
|
|
|
|
NOTE: The second column (MIDI ctrl) lists the corresponding MIDI
|
|
controller number. It is not needed unless you want to
|
|
convert MUS file data to MIDI.
|
|
|
|
4 Change controller
|
|
╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖ ╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
|
|
║ 0 │ Controller number ║ ║ 0 │ Controller value ║
|
|
╙───┴───┴───┴───┴───┴───┴───┴───╜ ╙───┴───┴───┴───┴───┴───┴───┴───╜
|
|
|
|
Number MIDI ctrl Description
|
|
0 N/A Instrument (patch, program) number
|
|
1 0 or 32 Bank select: 0 by default
|
|
2 1 (01h) Modulation pot (frequency vibrato depth)
|
|
3 7 (07h) Volume: 0-silent, ~100-normal, 127-loud
|
|
4 10 (0Ah) Pan (balance) pot: 0-left, 64-center (default),
|
|
127-right
|
|
5 11 (0Bh) Expression pot
|
|
6 91 (5Bh) Reverb depth
|
|
7 93 (5Dh) Chorus depth
|
|
8 64 (40h) Sustain pedal (hold)
|
|
9 67 (43h) Soft pedal
|
|
|
|
NOTE: MUS controller 0 has no equivalent MIDI controller, but
|
|
is encoded as MIDI event 0Cxh--patch change (`x' is the
|
|
channel number)
|
|
|
|
5 Unknown
|
|
Not known what data (if any) this command takes.
|
|
|
|
6 Score end
|
|
No data.
|
|
|
|
Marks the end of score. Must be present at the end, otherwise the
|
|
player may go off the rails. In DOOM this command restarts playing.
|
|
|
|
7 Unknown
|
|
Not known what data (if any) this command takes.
|
|
|
|
|
|
APPENDIX A - Note numbers
|
|
─────────────────────────
|
|
|
|
╔════════╦═════╤════╤════╤════╤════╤════╤════╤════╤════╤════╤════╤════╗
|
|
║ Octave ║ C │ C# │ D │ D# │ E │ F │ F# │ G │ G# │ A │ A# │ B ║
|
|
╠════════╬═════╪════╪════╪════╪════╪════╪════╪════╪════╪════╪════╪════╣
|
|
║ 0 ║ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 ║
|
|
║ 1 ║ 12 │ 13 │ 14 │ 15 │ 16 │ 17 │ 18 │ 19 │ 20 │ 21 │ 22 │ 23 ║
|
|
║ 2 ║ 24 │ 25 │ 26 │ 27 │ 28 │ 29 │ 30 │ 31 │ 32 │ 33 │ 34 │ 35 ║
|
|
║ 3 ║ 36 │ 37 │ 38 │ 39 │ 40 │ 41 │ 42 │ 43 │ 44 │ 45 │ 46 │ 47 ║
|
|
║ 4 ║ 48 │ 49 │ 50 │ 51 │ 52 │ 53 │ 54 │ 55 │ 56 │ 57 │ 58 │ 59 ║
|
|
║ 5 ║ 60 │ 61 │ 62 │ 63 │ 64 │ 65 │ 66 │ 67 │ 68 │ 69 │ 70 │ 71 ║
|
|
║ 6 ║ 72 │ 73 │ 74 │ 75 │ 76 │ 77 │ 78 │ 79 │ 80 │ 81 │ 82 │ 83 ║
|
|
║ 7 ║ 84 │ 85 │ 86 │ 87 │ 88 │ 89 │ 90 │ 91 │ 92 │ 93 │ 94 │ 95 ║
|
|
║ 8 ║ 96 │ 97 │ 98 │ 99 │100 │101 │102 │103 │104 │105 │106 │107 ║
|
|
║ 9 ║ 108 │109 │110 │111 │112 │113 │114 │115 │116 │117 │118 │119 ║
|
|
║ 10 ║ 120 │121 │122 │123 │124 │125 │126 │127 │ │ │ │ ║
|
|
╚════════╩═════╧════╧════╧════╧════╧════╧════╧════╧════╧════╧════╧════╝
|
|
|
|
|
|
APPENDIX B - Instrument Patch Map
|
|
─────────────────────────────────
|
|
|
|
Block 0-7 PIANO Block 8-15 CHROM PERCUSSION
|
|
0 Acoustic Grand Piano 8 Celesta
|
|
1 Bright Acoustic Piano 9 Glockenspiel
|
|
2 Electric Grand Piano 10 Music Box
|
|
3 Honky-tonk Piano 11 Vibraphone
|
|
4 Rhodes Paino 12 Marimba
|
|
5 Chorused Piano 13 Xylophone
|
|
6 Harpsichord 14 Tubular-bell
|
|
7 Clavinet 15 Dulcimer
|
|
|
|
Block 16-23 ORGAN Block 24-31 GUITAR
|
|
16 Hammond Organ 24 Acoustic Guitar (nylon)
|
|
17 Percussive Organ 25 Acoustic Guitar (steel)
|
|
18 Rock Organ 26 Electric Guitar (jazz)
|
|
19 Church Organ 27 Electric Guitar (clean)
|
|
20 Reed Organ 28 Electric Guitar (muted)
|
|
21 Accordion 29 Overdriven Guitar
|
|
22 Harmonica 30 Distortion Guitar
|
|
23 Tango Accordion 31 Guitar Harmonics
|
|
|
|
Block 32-39 BASS Block 40-47 STRINGS
|
|
32 Acoustic Bass 40 Violin
|
|
33 Electric Bass (finger) 41 Viola
|
|
34 Electric Bass (pick) 42 Cello
|
|
35 Fretless Bass 43 Contrabass
|
|
36 Slap Bass 1 44 Tremolo Strings
|
|
37 Slap Bass 2 45 Pizzicato Strings
|
|
38 Synth Bass 1 46 Orchestral Harp
|
|
39 Synth Bass 2 47 Timpani
|
|
|
|
Block 48-55 ENSEMBLE Block 56-63 BRASS
|
|
48 String Ensemble 1 56 Trumpet
|
|
49 String Ensemble 2 57 Trombone
|
|
50 Synth Strings 1 58 Tuba
|
|
51 Synth Strings 2 59 Muted Trumpet
|
|
52 Choir Aahs 60 French Horn
|
|
53 Voice Oohs 61 Brass Section
|
|
54 Synth Voice 62 Synth Brass 1
|
|
55 Orchestra Hit 63 Synth Bass 2
|
|
|
|
Block 64-71 REED Block 72-79 PIPE
|
|
64 Soprano Sax 72 Piccolo
|
|
65 Alto Sax 73 Flute
|
|
66 Tenor Sax 74 Recorder
|
|
67 Baritone Sax 75 Pan Flute
|
|
68 Oboe 76 Bottle Blow
|
|
69 English Horn 77 Shakuhachi
|
|
70 Bassoon 78 Whistle
|
|
71 Clarinet 79 Ocarina
|
|
|
|
Block 80-87 SYNTH LEAD Block 88-95 SYNTH PAD
|
|
80 Lead 1 (square) 88 Pad 1 (new age)
|
|
81 Lead 2 (sawtooth) 89 Pad 2 (warm)
|
|
82 Lead 3 (calliope) 90 Pad 3 (polysynth)
|
|
83 Lead 4 (chiffer) 91 Pad 4 (choir)
|
|
84 Lead 5 (charang) 92 Pad 5 (bowed glass)
|
|
85 Lead 6 (voice) 93 Pad 6 (metal)
|
|
86 Lead 7 (5th sawtooth) 94 Pad 7 (halo)
|
|
87 Lead 8 (bass & lead) 95 Pad 8 (sweep)
|
|
|
|
Block 96-103 SYNTH EFFECTS Block 104-111 ETHNIC
|
|
96 FX 1 (rain) 104 Sitar
|
|
97 FX 2 (soundtrack) 105 Banjo
|
|
98 FX 3 (crystal) 106 Shamisen
|
|
99 FX 4 (atmosphere) 107 Koto
|
|
100 FX 5 (brightness) 108 Kalimba
|
|
101 FX 6 (goblin) 109 Bag Pipe
|
|
102 FX 7 (echo drops) 110 Fiddle
|
|
103 FX 8 (star-theme) 111 Shanai
|
|
|
|
Block 112-119 PERCUSSIVE Block 120-127 SOUND EFFECTS
|
|
112 Tinkle Bell 120 Guitar Fret Noise
|
|
113 Agogo 121 Breath Noise
|
|
114 Steel Drums 122 Seashore
|
|
115 Woodblock 123 Bird Tweet
|
|
116 Taiko Drum 124 Telephone Ring
|
|
117 Melodic Tom 125 Helicopter
|
|
118 Synth Drum 126 Applause
|
|
119 Reverse Cymbal 127 Gun Shot
|
|
|
|
|
|
APPENDIX C - Percussion Key Map
|
|
───────────────────────────────
|
|
|
|
In channel #15, the note number does not affect the pitch but
|
|
the instrument type. The default pitch for percussions is 60 (C-5).
|
|
|
|
Note Instrument Note Instrument
|
|
|
|
35 Acoustic Bass Drum 59 Ride Cymbal 2
|
|
36 Bass Drum 60 High Bongo
|
|
37 Slide Stick 61 Low Bango
|
|
38 Acoustic Snare 62 Mute High Conga
|
|
39 Hand Clap 63 Open High Conga
|
|
40 Electric Snare 64 Low Conga
|
|
41 Low Floor Tom 65 High Timbale
|
|
42 Closed High-Hat 66 Low Timbale
|
|
43 High Floor Tom 67 High Agogo
|
|
44 Pedal High Hat 68 Low Agogo
|
|
45 Low Tom 69 Cabasa
|
|
46 Open High Hat 70 Maracas
|
|
47 Low-Mid Tom 71 Short Whistle
|
|
48 High-Mid Tom 72 Long Whistle
|
|
49 Crash Cymbal 1 73 Short Guiro
|
|
50 High Tom 74 Long Guiro
|
|
51 Ride Cymbal 1 75 Claves
|
|
52 Chinses Cymbal 76 High Wood Block
|
|
53 Ride Bell 77 Low Wood Block
|
|
54 Tambourine 78 Mute Cuica
|
|
55 Splash Cymbal 79 Open Cuica
|
|
56 Cowbell 80 Mute Triangle
|
|
57 Crash Cymbal 2 81 Open Triangle
|
|
58 Vibraslap
|
|
|