Difference between revisions of "MUS (AdLib)"

From Video Game Music Preservation Foundation Wiki
Jump to: navigation, search
(MUS to ?: add CoktelADL2VGM)
 
(48 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
{{Infobox Format
 
{{Infobox Format
| Title      = Music
+
| Title      = Ad Lib Music
| Format      = MUS (AdLib)
+
| Format      = MUS (AdLib)
| Developer  = Unknown
+
| Developer  = [[Ad Lib|Ad Lib, Inc.]]
| Header      = Custom
+
| Header      = Custom
| OutputDA    = No
+
| Content    = Notational
| OutputMIDI  = ?
+
| Instruments = External
| OutputFM    = Yes
+
| OutputDA    = No
| OutputPSG  = Yes
+
| OutputMIDI  = ?
| Instruments = External
+
| OutputFM    = Yes
| Released    = 1989-??-??
+
| OutputPSG  = No
| FirstGame  = [[Kung Fu Louie Vs. The Martial Art Posse (DOS)]]
+
| Released    = 1988-06-29
| Extension01 = *.mus
+
| FirstGame  = [[Kung Fu Louie Vs. The Martial Art Posse (DOS)]]
 +
| Extension01 = *.mus
 +
| Extension02 = *.mdy
 
}}
 
}}
  
Line 17: Line 19:
  
 
Some of the artists who composed music for games that used the MUS format, wrote their music in [[AdLib Visual Composer]], which uses the ROL format.
 
Some of the artists who composed music for games that used the MUS format, wrote their music in [[AdLib Visual Composer]], which uses the ROL format.
 
  
 
==Players==
 
==Players==
Line 23: Line 24:
  
 
* [[AdLib Play]] - DOS
 
* [[AdLib Play]] - DOS
 +
* [[AdPlug]] - DOS, foobar2000, UNIX, Winamp, XMMS
 +
* [[Camoto]] - Linux, Windows
 +
 +
==Editors==
 +
<div style="float:right;">([[:Category: MUS (AdLib) Editors|Category]])</div>
 +
 +
* [[MIDIPLEX]] - Windows 32
  
 +
==Converters==
 +
<div style="float:right;">([[:Category: MUS (AdLib) Converters|Category]])</div>
 +
 +
===MUS to ?===
 +
* [[Camoto]] - Linux, Windows - {{Camoto/FormatList|type=song|dir=write}}
 +
* [[CoktelADL2VGM]] - Linux, Windows - [[VGM]]
 +
* [[MIDIPLEX]] - Windows 32 - [[MDI]], [[MIDI]], [[ROL]]
 +
* [[Vinyl to CMF]] - DOS - [[CMF]]
 +
 +
===? to MUS===
 +
* [[AdLib Convert]] - DOS - [[ROL]]
 +
* [[Camoto]] - Linux, Windows - {{Camoto/FormatList|type=song|dir=read}}
 +
* [[MIDIPLEX]] - Windows 32 - [[MDI]], [[SOP]]
  
 
==Games==
 
==Games==
 
<div style="float:right;">([[:Category: Games That Use MUS (AdLib)|Category]])</div>
 
<div style="float:right;">([[:Category: Games That Use MUS (AdLib)|Category]])</div>
  
{{Table Header
+
{| class="wikitable" |
| Color    = FFF0FF
+
! Released
| Caption01 = Released
+
! Title
| Caption02 = Title
+
! Sample
| Caption03 = Sample
+
|-
}}
 
 
| 1989-??-??
 
| 1989-??-??
 
| [[Kung Fu Louie Vs. The Martial Art Posse (DOS)]]
 
| [[Kung Fu Louie Vs. The Martial Art Posse (DOS)]]
 +
|
 +
|-
 +
| 1989-??-??
 +
| [[Lost Dutchman Mine (DOS)]]
 +
|
 +
|-
 +
| 1989-??-??
 +
| [[Tunnels of Armageddon (DOS)]]
 
|  
 
|  
 
|-
 
|-
Line 41: Line 69:
 
| [[Weird Dreams (DOS)]]
 
| [[Weird Dreams (DOS)]]
 
| {{Song-Box|101 - Weird Dreams - DOS - WDTITLE.ogg}}
 
| {{Song-Box|101 - Weird Dreams - DOS - WDTITLE.ogg}}
 +
|-
 +
| 1990-01<!--89-12?-->-??
 +
| [[Avoid the Noid (DOS)]] (Version 1.1)
 +
| {{Song-Box|101 - Avoid the Noid - DOS - Title.ogg}}
 +
|-
 +
| 1990-??-??
 +
| [[Black Gold (DOS)]]
 +
|
 +
|-
 +
| 1990-??-??
 +
| [[DarkSpyre (DOS)]]
 +
|
 
|-
 
|-
 
| 1990-??-??
 
| 1990-??-??
Line 52: Line 92:
 
| 1990-??-??
 
| 1990-??-??
 
| [[X-Rock (DOS)]]
 
| [[X-Rock (DOS)]]
 +
|
 +
|-
 +
| 1991-??-??
 +
| [[Gobliiins (DOS)]]
 +
| {{Song-Box|201 - Gobliiins - DOS - Gobliiins.ogg}}
 +
|-
 +
| 1991-??-??
 +
| [[Street Rod 2: The Next Generation (DOS)]]
 
|  
 
|  
 
|-
 
|-
Line 59: Line 107:
 
|-
 
|-
 
| 1992-??-??
 
| 1992-??-??
| [[Branch (DOS)]]
+
| [[Color Lines (DOS)]]
 
|  
 
|  
 
|-
 
|-
 
| 1992-??-??
 
| 1992-??-??
| [[Color Lines (DOS)]]
+
| [[The Summoning (DOS)]]
 
|  
 
|  
 
|-
 
|-
 
| 1992-??-??
 
| 1992-??-??
 +
| [[Vetka (DOS)]]
 +
|
 +
|-
 +
| 1993-??-??
 
| [[Regatta (DOS)]]
 
| [[Regatta (DOS)]]
 +
|
 +
|-
 +
| 1993-??-??
 +
| [[Veil of Darkness (DOS)]]
 
|  
 
|  
 
|-
 
|-
Line 73: Line 129:
 
| [[Nine (DOS)]]
 
| [[Nine (DOS)]]
 
|  
 
|  
 +
|-
 +
| 1994-??-??
 +
| [[Popo Car (DOS)]]
 +
|
 +
|-
 +
| 1995-??-??
 +
| [[Vinyl Goddess From Mars (DOS)]]
 +
| {{Song-Box|01 - Vinyl Goddess From Mars - DOS - Intro.ogg}}
 
|}
 
|}
  
 +
==How to Obtain==
 +
MUS files usually need to be extracted from game resource files, a process that is different for nearly every game that uses the format.
  
 
==Technical==
 
==Technical==
 
* ''MUS'' files usually begins with one byte of 0x01, 35 bytes of 0x00, and one byte of 0xF0.
 
* ''MUS'' files usually begins with one byte of 0x01, 35 bytes of 0x00, and one byte of 0xF0.
 
* ''MUS'' files always ends with 0xFC byte.
 
* ''MUS'' files always ends with 0xFC byte.
* The file header is not documented and very few details are inspected.
 
 
* MIDI data notation is very similar to [[SCI]] (delta-ticks has same format).
 
* MIDI data notation is very similar to [[SCI]] (delta-ticks has same format).
 
* It is technically possible to convert MUS file to MIDI with few modifications.
 
* It is technically possible to convert MUS file to MIDI with few modifications.
 +
* The file header is documented in the source file <tt>CONVERT.H</tt> of [[AdLib Play]].
  
 
+
===File Header===
===Header Details===
+
{| class="wikitable" |
 
+
! Data type
{{Table Header
+
! Name
| Color    = FFF0FF
+
! Description
| Caption01 = Offset
+
! Default value
| Caption02 = Type
+
|-
| Caption03 = Description
+
| <tt>UINT8</tt>          || <tt>majorVersion</tt> || Major version                      || 1
| Caption04 = Default value
+
|-
}}
+
| <tt>UINT8</tt>          || <tt>minorVersion</tt> || Minor version                      || 0
| 0x00
+
|-
|  
+
| <tt>INT32LE</tt>        || <tt>tuneId</tt>      || Melody identification              || 0
| Unknown / Reserved
+
|-
| 0x01
+
| <tt>CHAR[30]</tt>      || <tt>tuneName</tt>    || Melody name                        ||
 +
|-
 +
| <tt>UINT8</tt>          || <tt>tickBeat</tt>    || Ticks per beat (BPM)              || 240
 +
|-
 +
| <tt>UINT8</tt>          || <tt>beatMeasure</tt>  || Beats per measure                  ||
 
|-
 
|-
| 0x01..0x23
+
| <tt>INT32LE</tt>        || <tt>totalTick</tt>    || Length of melody, in ticks        ||  
|  
 
| Unknown / Reserved
 
| 0x00
 
 
|-
 
|-
| 0x24
+
| <tt>INT32LE</tt>        || <tt>dataSize</tt>    || Length of melody's data part      ||  
| BYTE
 
| Playing Tempo (BPM)
 
| 240
 
 
|-
 
|-
| 0x25..0x29
+
| <tt>INT32LE</tt>        || <tt>nrCommand</tt>    || Total number of commands in melody ||  
|  
 
| Unknown
 
|  
 
 
|-
 
|-
| 0x2A..0x2D
+
| <tt>BYTE[8]</tt>        || <tt>filler</tt>      || Padding (Unused)                  || 0
| DWORD
 
| MIDI Sequence Length
 
|  
 
 
|-
 
|-
| 0x2E..0x3B
+
| <tt>UINT8</tt>          || <tt>soundMode</tt>    || 0 = melodic, 1 = percussive        ||  
|  
 
| Unknown
 
|  
 
 
|-
 
|-
| 0x3C..0x3D
+
| <tt>UINT8</tt>          || <tt>pitchBRange</tt>  || Pitch bend sensitivity (1-12)     || 1
| WORD
 
| Playing Speed (PPQN)
 
|  
 
 
|-
 
|-
| 0x3E..0x45
+
| <tt>UINT16LE</tt>      || <tt>basicTempo</tt>  || Basic tempo (PPQN)                ||  
|  
 
| Unknown
 
| 0x00
 
 
|-
 
|-
| 0x46
+
| <tt>BYTE[8]</tt>        || <tt>filler2</tt>      || Padding (Unused)                  || 0
| MIDI
 
| Beginning of MIDI Sequence
 
|  
 
 
|-
 
|-
| 0x46 + len
+
| <tt>BYTE[dataSize]</tt> || <tt>data</tt>        || Melody MIDI sequence data          ||  
| MIDI
 
| End of MIDI Sequence
 
| 0xFC
 
 
|}
 
|}
  
 +
:'''''Note:''''' Total number of commands in melody includes Note On, Note Off, Program Change, After Touch, Pitch Bend, Timing Overflow, System Exclusive and Stop.
 +
 +
===Timing===
 +
The data part of the .MUS file contains MIDI 1.0 commands with timing bytes of <tt>1/tickBeat</tt>. <tt>tickBeat</tt> is the number of divisions per beat. The relation between <tt>tickBeat</tt>, <tt>tempo</tt> (beat per minute) & <tt>frequency</tt> of
 +
the timing counter is:
 +
frequency = (tempo / 60) * tickBeat
 +
 +
Timing bytes vary from 0 to 0xFE and precede every command. A timing byte of 0xF8 means timing overflow with a value of 240. An overflow byte is always followed by another overflow byte or timing byte.
  
 
===MIDI Notation===
 
===MIDI Notation===
 
* The most of status bytes are compatible with MIDI standard.
 
* The most of status bytes are compatible with MIDI standard.
 
* Running status mode is supported and used by default.
 
* Running status mode is supported and used by default.
* Delta-ticks are expressed with bytes (not variable length values), 0xF8 byte means 240 ticks + next byte. For longer delays, 0xF8 bytes can be repeated twice or more times.
+
* Velocity parameter (with Note On and Note Off events) is used to change current channel volume, same as A# event. It actually doesn't belong to the specified note.
  
{{Table Header
+
{| class="wikitable" |
| Color    = FFF0FF
+
! MIDI message
| Caption01 = MIDI message
+
! Description
| Caption02 = Description
+
! MIDI compatible
}}
+
|-
| 8# xx xx
+
| 8# xx yy
| Note Off (MIDI compatible)
+
| Note Off
 +
| Partially
 
|-
 
|-
| 9# xx xx
+
| 9# xx yy
| Note On (MIDI compatible)
+
| Note On
 +
| Partially
 
|-
 
|-
 
| A# xx
 
| A# xx
| Unknown
+
| Volume Change
 +
| No
 
|-
 
|-
| B# xx xx
+
| B# xx yy
| Control Change (never seen)
+
| Control Change (unused)
 +
| Yes
 
|-
 
|-
 
| C# xx
 
| C# xx
| Program Change (MIDI compatible)
+
| Program Change (uses external [[SND (AdLib)]] bank)
 +
| Yes
 
|-
 
|-
 
| D# xx
 
| D# xx
| Channel Aftertouch (never seen)
+
| Channel Aftertouch (unused)
 +
| Yes
 
|-
 
|-
| E# xx xx
+
| E# xx yy
| Pitch Bend (MIDI compatible)
+
| Pitch Bend
 +
| Yes
 
|-
 
|-
| F0 7F 00 xx xx F7
+
| F0 7F 00 xx yy F7
 
| SysEx Speed Control (ends with F7)
 
| SysEx Speed Control (ends with F7)
 +
| No
 +
|-
 +
| FC
 +
| Stop
 +
|
 
|}
 
|}
 
  
 
===SysEx Speed Control===
 
===SysEx Speed Control===
This special event is similar to MIDI Tempo event, but it specifies the playing speed in percents. The resulting speed percent is the sum of high and low values.
+
This special event is similar to MIDI Tempo event, but it specifies the playing tempo multiplier. It consists of an integer and a fractional part, in 1/128.
  
{{Table Header
+
{| class="wikitable" |
| Color    = FFF0FF
+
! Byte
| Caption01 = Byte
+
! Description
| Caption02 = Description
+
|-
}}
 
 
| 0xF0
 
| 0xF0
 
| Beginning of SysEx
 
| Beginning of SysEx
Line 199: Line 260:
 
|-
 
|-
 
| XX
 
| XX
| High value (1 = 100%, 2 = 200%)
+
| Integer part<br>1 = 100%, 2 = 200%, etc.
 
|-
 
|-
 
| XX
 
| XX
| Low value (0 = 0%, 128 = 100%)
+
| Fractional part 1/128<br>0 = 0%, 128 = 100%, etc.
 
|-
 
|-
 
| 0xF7
 
| 0xF7
Line 208: Line 269:
 
|}
 
|}
  
 +
===Channel Utilization===
 +
* Maximum polyphony is 1 voice per channel, like in tracker formats.
 +
* The music can be composed either in melodic or percussive mode.
 +
 +
{| class="wikitable" |
 +
! Hex channel
 +
! MIDI channel
 +
! Use in melodic mode
 +
! Use in percussive mode
 +
|-
 +
| 0x00
 +
| 1
 +
| Normal instrument
 +
| Normal instrument
 +
|-
 +
| 0x01
 +
| 2
 +
| Normal instrument
 +
| Normal instrument
 +
|-
 +
| 0x02
 +
| 3
 +
| Normal instrument
 +
| Normal instrument
 +
|-
 +
| 0x03
 +
| 4
 +
| Normal instrument
 +
| Normal instrument
 +
|-
 +
| 0x04
 +
| 5
 +
| Normal instrument
 +
| Normal instrument
 +
|-
 +
| 0x05
 +
| 6
 +
| Normal instrument
 +
| Normal instrument
 +
|-
 +
| 0x06
 +
| 7
 +
| Normal instrument
 +
| Bass drum
 +
|-
 +
| 0x07
 +
| 8
 +
| Normal instrument
 +
| Snare drum
 +
|-
 +
| 0x08
 +
| 9
 +
| Normal instrument
 +
| Tom tom
 +
|-
 +
| 0x09
 +
| 10
 +
| Unused
 +
| Top cymbal
 +
|-
 +
| 0x0A
 +
| 11
 +
| Unused
 +
| Hi-hat cymbal
 +
|-
 +
| 0x0B
 +
| 12
 +
| Unused
 +
| Unused
 +
|-
 +
| 0x0C
 +
| 13
 +
| Unused
 +
| Unused
 +
|-
 +
| 0x0D
 +
| 14
 +
| Unused
 +
| Unused
 +
|-
 +
| 0x0E
 +
| 15
 +
| Unused
 +
| Unused
 +
|-
 +
| 0x0F
 +
| 16
 +
| Unused
 +
| Unused
 +
|}
 +
 +
===Default Timbre===
 +
Player should load this timbre if it isn't found in the sound bank:
 +
 +
{| class="wikitable" |
 +
! OPL base register
 +
! Value
 +
! Description
 +
|-
 +
|0x20||0x01||Modulator characteristic (Mult, KSR, EG, VIB and AM flags)
 +
|-
 +
|0x23||0x11||Carrier characteristic (Mult, KSR, EG, VIB and AM flags)
 +
|-
 +
|0x40||0x4F||Modulator key scaling/output level
 +
|-
 +
|0x43||0x10||Carrier key scaling/output level
 +
|-
 +
|0x60||0xF1||Modulator attack/decay level
 +
|-
 +
|0x63||0xF2||Carrier attack/decay level
 +
|-
 +
|0x80||0x53||Modulator sustain/release level
 +
|-
 +
|0x83||0x74||Carrier sustain/release level
 +
|-
 +
|0xE0||0x00||Modulator wave select
 +
|-
 +
|0xE3||0x00||Carrier wave select
 +
|-
 +
|0xC0||0x06||Feedback/connection
 +
|}
  
 
==Links==
 
==Links==
 +
* [http://www.shikadi.net/moddingwiki/AdLib_MIDI_Format shikadi.net/moddingwiki/AdLib_MIDI_Format] - Modding Wiki.
 +
 +
 +
[[Category: MIDI]]

Latest revision as of 20:05, 14 June 2022

Ad Lib Music
MUS (AdLib).png
Developer: Ad Lib, Inc.
Header: Custom
Content: Notational
Instruments: External
Target Output
Output - Digital Audio - No.png Output - MIDI - No.png Output - FM Synthesis.png Output - PSG - No.png
Released: 1988-06-29
First Game: Kung Fu Louie Vs. The Martial Art Posse (DOS)
Extensions
  • *.mus
  • *.mdy

This format houses AdLib notes along with a SND file that houses the instrument definitions. In that respect, it's very similar to AdLib's ROL format. Also the notation is very similar to MIDI, but it has some differences. MUS files appear to be compiled ROL files and the SND file is like a compiled BNK file.

Some of the artists who composed music for games that used the MUS format, wrote their music in AdLib Visual Composer, which uses the ROL format.

Players

(Category)

Editors

(Category)

Converters

(Category)

MUS to ?

? to MUS

Games

(Category)
Released Title Sample
1989-??-?? Kung Fu Louie Vs. The Martial Art Posse (DOS)
1989-??-?? Lost Dutchman Mine (DOS)
1989-??-?? Tunnels of Armageddon (DOS)
1989-??-?? Weird Dreams (DOS)
1990-01-?? Avoid the Noid (DOS) (Version 1.1)
1990-??-?? Black Gold (DOS)
1990-??-?? DarkSpyre (DOS)
1990-??-?? DragonStrike (DOS)
1990-??-?? Faces ...tris III (DOS)
1990-??-?? X-Rock (DOS)
1991-??-?? Gobliiins (DOS)
1991-??-?? Street Rod 2: The Next Generation (DOS)
1992-??-?? Balda (DOS)
1992-??-?? Color Lines (DOS)
1992-??-?? The Summoning (DOS)
1992-??-?? Vetka (DOS)
1993-??-?? Regatta (DOS)
1993-??-?? Veil of Darkness (DOS)
1994-??-?? Nine (DOS)
1994-??-?? Popo Car (DOS)
1995-??-?? Vinyl Goddess From Mars (DOS)

How to Obtain

MUS files usually need to be extracted from game resource files, a process that is different for nearly every game that uses the format.

Technical

  • MUS files usually begins with one byte of 0x01, 35 bytes of 0x00, and one byte of 0xF0.
  • MUS files always ends with 0xFC byte.
  • MIDI data notation is very similar to SCI (delta-ticks has same format).
  • It is technically possible to convert MUS file to MIDI with few modifications.
  • The file header is documented in the source file CONVERT.H of AdLib Play.

File Header

Data type Name Description Default value
UINT8 majorVersion Major version 1
UINT8 minorVersion Minor version 0
INT32LE tuneId Melody identification 0
CHAR[30] tuneName Melody name
UINT8 tickBeat Ticks per beat (BPM) 240
UINT8 beatMeasure Beats per measure
INT32LE totalTick Length of melody, in ticks
INT32LE dataSize Length of melody's data part
INT32LE nrCommand Total number of commands in melody
BYTE[8] filler Padding (Unused) 0
UINT8 soundMode 0 = melodic, 1 = percussive
UINT8 pitchBRange Pitch bend sensitivity (1-12) 1
UINT16LE basicTempo Basic tempo (PPQN)
BYTE[8] filler2 Padding (Unused) 0
BYTE[dataSize] data Melody MIDI sequence data
Note: Total number of commands in melody includes Note On, Note Off, Program Change, After Touch, Pitch Bend, Timing Overflow, System Exclusive and Stop.

Timing

The data part of the .MUS file contains MIDI 1.0 commands with timing bytes of 1/tickBeat. tickBeat is the number of divisions per beat. The relation between tickBeat, tempo (beat per minute) & frequency of the timing counter is:

frequency = (tempo / 60) * tickBeat

Timing bytes vary from 0 to 0xFE and precede every command. A timing byte of 0xF8 means timing overflow with a value of 240. An overflow byte is always followed by another overflow byte or timing byte.

MIDI Notation

  • The most of status bytes are compatible with MIDI standard.
  • Running status mode is supported and used by default.
  • Velocity parameter (with Note On and Note Off events) is used to change current channel volume, same as A# event. It actually doesn't belong to the specified note.
MIDI message Description MIDI compatible
8# xx yy Note Off Partially
9# xx yy Note On Partially
A# xx Volume Change No
B# xx yy Control Change (unused) Yes
C# xx Program Change (uses external SND (AdLib) bank) Yes
D# xx Channel Aftertouch (unused) Yes
E# xx yy Pitch Bend Yes
F0 7F 00 xx yy F7 SysEx Speed Control (ends with F7) No
FC Stop

SysEx Speed Control

This special event is similar to MIDI Tempo event, but it specifies the playing tempo multiplier. It consists of an integer and a fractional part, in 1/128.

Byte Description
0xF0 Beginning of SysEx
0x7F Universal Realtime Command
0x00 Reserved
XX Integer part
1 = 100%, 2 = 200%, etc.
XX Fractional part 1/128
0 = 0%, 128 = 100%, etc.
0xF7 End of SysEx

Channel Utilization

  • Maximum polyphony is 1 voice per channel, like in tracker formats.
  • The music can be composed either in melodic or percussive mode.
Hex channel MIDI channel Use in melodic mode Use in percussive mode
0x00 1 Normal instrument Normal instrument
0x01 2 Normal instrument Normal instrument
0x02 3 Normal instrument Normal instrument
0x03 4 Normal instrument Normal instrument
0x04 5 Normal instrument Normal instrument
0x05 6 Normal instrument Normal instrument
0x06 7 Normal instrument Bass drum
0x07 8 Normal instrument Snare drum
0x08 9 Normal instrument Tom tom
0x09 10 Unused Top cymbal
0x0A 11 Unused Hi-hat cymbal
0x0B 12 Unused Unused
0x0C 13 Unused Unused
0x0D 14 Unused Unused
0x0E 15 Unused Unused
0x0F 16 Unused Unused

Default Timbre

Player should load this timbre if it isn't found in the sound bank:

OPL base register Value Description
0x20 0x01 Modulator characteristic (Mult, KSR, EG, VIB and AM flags)
0x23 0x11 Carrier characteristic (Mult, KSR, EG, VIB and AM flags)
0x40 0x4F Modulator key scaling/output level
0x43 0x10 Carrier key scaling/output level
0x60 0xF1 Modulator attack/decay level
0x63 0xF2 Carrier attack/decay level
0x80 0x53 Modulator sustain/release level
0x83 0x74 Carrier sustain/release level
0xE0 0x00 Modulator wave select
0xE3 0x00 Carrier wave select
0xC0 0x06 Feedback/connection

Links