Difference between revisions of "MDI"
Binarymaster (talk | contribs) |
|||
(13 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{Infobox Format | {{Infobox Format | ||
− | | Title = Ad Lib MIDI | + | | Title = Ad Lib MIDI |
− | | Format = MDI | + | | Format = MDI |
− | | Developer = [[Ad Lib|Ad Lib, Inc.]] | + | | Developer = [[Ad Lib|Ad Lib, Inc.]] |
− | | Header = SMF | + | | Header = SMF |
− | | Content = Notational | + | | Content = Notational |
− | | Instruments = Internal | + | | Instruments = Internal |
− | | OutputDA = No | + | | OutputDA = No |
− | | OutputMIDI = No | + | | OutputMIDI = No |
− | | OutputFM = Yes | + | | OutputFM = Yes |
− | | OutputPSG = No | + | | OutputPSG = No |
− | | Released = 1989-05-08 | + | | Released = 1989-05-08 |
− | | FirstGame = | + | | FirstGame = [[AdLib (DOS)]] |
− | | Extension01 = *.mdi | + | | Extension01 = *.mdi |
}} | }} | ||
− | The '''''MDI''''' format was created by Ad Lib, Inc. to upgrade from [[MUS (AdLib)]] format. It uses the [[MIDI]] structure but designed to work with [[OPL2]] sound chip that allow it to store instrument data and change modes. | + | The '''''MDI''''' format was created by Ad Lib, Inc. to upgrade from [[MUS (AdLib)]] format. It uses the [[MIDI]] structure but is designed to work with [[OPL2]] sound chip that allow it to store instrument data and change modes. |
− | Because the format is so similar to MIDI, some MIDI players are able to play the files, | + | Because the format is so similar to MIDI, some MIDI players are able to play the files, but discordantly use a piano for everything (even drums) and, on earlier files, don't release any notes. The players which can play MDI files correctly are listed below. |
+ | |||
+ | There don't appear to be any MDI players that support looping. This is needed to make proper recordings. | ||
==Players== | ==Players== | ||
<div style="float:right;">([[:Category: MDI Players|Category]])</div> | <div style="float:right;">([[:Category: MDI Players|Category]])</div> | ||
+ | * [[AdPlug]] - DOS, foobar2000, UNIX, Winamp, XMMS | ||
* [[MIDI Play]] - DOS | * [[MIDI Play]] - DOS | ||
* [[Multi Media Machine]] - DOS | * [[Multi Media Machine]] - DOS | ||
Line 34: | Line 37: | ||
===MDI to ?=== | ===MDI to ?=== | ||
− | * [[MIDIPLEX]] - Windows 32 - [[MIDI]] | + | * [[MIDIPLEX]] - Windows 32 - [[CMF]], [[MIDI]], [[MUS (AdLib)]], [[SND (AdLib)]] |
===? to MDI=== | ===? to MDI=== | ||
− | * [[MIDIPLEX]] - Windows 32 - [[MUS (AdLib)]], [[SND (AdLib)]] | + | * [[MIDIPLEX]] - Windows 32 - [[CMF]], [[MUS (AdLib)]], [[SND (AdLib)]] |
* [[ROL to MIDI]] - DOS - [[ROL]] | * [[ROL to MIDI]] - DOS - [[ROL]] | ||
Line 47: | Line 50: | ||
! Title | ! Title | ||
! Sample | ! Sample | ||
+ | |- | ||
+ | | 1990-09-20 | ||
+ | | [[AdLib (DOS)]] | ||
+ | | {{Song-Box|18 - AdLib - DOS - AdLib Test Program.ogg}} | ||
|- | |- | ||
| 1990-??-?? | | 1990-??-?? | ||
| [[Golden Axe (DOS)]] | | [[Golden Axe (DOS)]] | ||
+ | | | ||
+ | |- | ||
+ | | 1991-0?-?? | ||
+ | | [[Atomino (DOS)]] | ||
| | | | ||
|- | |- | ||
Line 55: | Line 66: | ||
| [[Dark Ages (DOS)]] | | [[Dark Ages (DOS)]] | ||
| {{Song-Box|01 - Dark Ages - DOS - Dark Ages.ogg}} | | {{Song-Box|01 - Dark Ages - DOS - Dark Ages.ogg}} | ||
+ | |- | ||
+ | | 1991-??-?? | ||
+ | | [[Dragonflight (DOS)]] | ||
+ | | | ||
|- | |- | ||
| 1991-??-?? | | 1991-??-?? | ||
| [[Prehistorik (DOS)]] | | [[Prehistorik (DOS)]] | ||
| {{Song-Box|202 - Prehistorik - DOS - Prehistorik 1.ogg}} | | {{Song-Box|202 - Prehistorik - DOS - Prehistorik 1.ogg}} | ||
+ | |- | ||
+ | | 1992-0?-?? | ||
+ | | [[Clik Clak (DOS)]] | ||
+ | | {{Song-Box|01 - Clik Clak - DOS - Intro 2.ogg}} | ||
+ | |- | ||
+ | | 1992-??-?? | ||
+ | | [[Adventure Math (DOS)]] | ||
+ | | {{Song-Box|103 - Adventure Math - DOS - Play.ogg}} | ||
|- | |- | ||
| 1992-??-?? | | 1992-??-?? | ||
Line 67: | Line 90: | ||
| [[Galactix (DOS)]] | | [[Galactix (DOS)]] | ||
| {{Song-Box|03 - Galactix - DOS - Galactix.ogg}} | | {{Song-Box|03 - Galactix - DOS - Galactix.ogg}} | ||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| 1992-??-?? | | 1992-??-?? | ||
Line 84: | Line 103: | ||
| | | | ||
|} | |} | ||
+ | |||
+ | ==How to Obtain== | ||
+ | MDI files usually have to be manually extracted from game files, a process that is different for pretty much every game that uses them. | ||
==Technical== | ==Technical== | ||
* All MDI files begin with "MThd" MIDI header and contain "MTrk" at the start of the MIDI track. | * All MDI files begin with "MThd" MIDI header and contain "MTrk" at the start of the MIDI track. | ||
− | * The End Of Track "FF 2F 00" event is located at the end of file, but not included in the track. | + | * The End Of Track "00 FF 2F 00" event is located at the end of file, but not included in the track. |
− | * | + | * In Ad Lib's [[MIDI Play]], all aftertouch events and the velocity parameter in Note On events equally control the specified channel's volume, though Ad Lib's [[ROL to MIDI]] does not output polyphonic aftertouch (0xA0–0xAF). |
− | * Program Change events | + | * Note Off events just release the most recent note on specified channel. The note and velocity parameters are ignored. Early versions of [[ROL to MIDI]] (between April 25, 1990 and March 15, 1991) set the note parameter to 0 (see [[Prehistorik (DOS)#Game Rip|example]]). |
+ | * Control Change and Program Change events have no effect. | ||
===Sequencer-Specific Event Format=== | ===Sequencer-Specific Event Format=== | ||
− | These events are used to control OPL-compatible chip. | + | These events are used to control any OPL-compatible chip. |
{| class="wikitable" | {| class="wikitable" | ||
− | |||
! Event | ! Event | ||
! Length | ! Length | ||
Line 101: | Line 123: | ||
! Data | ! Data | ||
|- | |- | ||
− | |||
| FF 7F | | FF 7F | ||
| XX | | XX | ||
Line 108: | Line 129: | ||
| XX .. XX | | XX .. XX | ||
|} | |} | ||
− | |||
===Possible Opcodes=== | ===Possible Opcodes=== | ||
Line 122: | Line 142: | ||
| Voice / channel number for instrument | | Voice / channel number for instrument | ||
|- | |- | ||
− | | | + | | 2–29 |
| 28 byte array of parameters (see structure below) | | 28 byte array of parameters (see structure below) | ||
|- | |- | ||
Line 131: | Line 151: | ||
|- | |- | ||
| 00 03 | | 00 03 | ||
− | | Pitch bend sensitivity | + | | Pitch bend sensitivity (same as Registered Parameter 0) |
| 1 | | 1 | ||
− | | | + | | 1–12 inclusive |
|} | |} | ||
Line 193: | Line 213: | ||
===Default Timbre=== | ===Default Timbre=== | ||
− | + | Every player should load [[MUS (AdLib)#Default Timbre|default timbre]] if it isn't loaded by sequencer-specific event before. | |
==Links== | ==Links== | ||
* [http://www.shikadi.net/moddingwiki/MDI_Format shikadi.net/moddingwiki/MDI_Format] - ModdingWiki. | * [http://www.shikadi.net/moddingwiki/MDI_Format shikadi.net/moddingwiki/MDI_Format] - ModdingWiki. | ||
− | * [http://cd.textfiles.com/soundsensations/MISCPROG/AD-PROG | + | * [http://cd.textfiles.com/soundsensations/MISCPROG/ZIPFILES/AD-PROG.ZIP cd.textfiles.com/soundsensations/MISCPROG/ZIPFILES/AD-PROG.ZIP] - Source code (part of the Ad Lib Programmer's Manual). |
* [http://swag.outpostbbs.net/SOUND/0066.PAS swag.outpostbbs.net/SOUND/0066.PAS] - MDI2MUS by Colin Buckley (incomplete program source). | * [http://swag.outpostbbs.net/SOUND/0066.PAS swag.outpostbbs.net/SOUND/0066.PAS] - MDI2MUS by Colin Buckley (incomplete program source). | ||
[[Category: MIDI]] | [[Category: MIDI]] |
Revision as of 20:37, 12 May 2022
Ad Lib MIDI | |||||
Developer: | Ad Lib, Inc. | ||||
Header: | SMF | ||||
Content: | Notational | ||||
Instruments: | Internal | ||||
Target Output
| |||||
Released: | 1989-05-08 | ||||
First Game: | AdLib (DOS) | ||||
Extensions |
|
The MDI format was created by Ad Lib, Inc. to upgrade from MUS (AdLib) format. It uses the MIDI structure but is designed to work with OPL2 sound chip that allow it to store instrument data and change modes.
Because the format is so similar to MIDI, some MIDI players are able to play the files, but discordantly use a piano for everything (even drums) and, on earlier files, don't release any notes. The players which can play MDI files correctly are listed below.
There don't appear to be any MDI players that support looping. This is needed to make proper recordings.
Contents
Players
- AdPlug - DOS, foobar2000, UNIX, Winamp, XMMS
- MIDI Play - DOS
- Multi Media Machine - DOS
Editors
- MIDIPLEX - Windows 32
Converters
MDI to ?
- MIDIPLEX - Windows 32 - CMF, MIDI, MUS (AdLib), SND (AdLib)
? to MDI
- MIDIPLEX - Windows 32 - CMF, MUS (AdLib), SND (AdLib)
- ROL to MIDI - DOS - ROL
Games
Released | Title | Sample |
---|---|---|
1990-09-20 | AdLib (DOS) | |
1990-??-?? | Golden Axe (DOS) | |
1991-0?-?? | Atomino (DOS) | |
1991-??-?? | Dark Ages (DOS) | |
1991-??-?? | Dragonflight (DOS) | |
1991-??-?? | Prehistorik (DOS) | |
1992-0?-?? | Clik Clak (DOS) | |
1992-??-?? | Adventure Math (DOS) | |
1992-??-?? | Amberstar (DOS) | |
1992-??-?? | Galactix (DOS) | |
1992-??-?? | Starfire (DOS) | |
1993-??-?? | Ultimuh MCMLXVII (DOS) | |
1994-08-23 | Microsoft Space Simulator (DOS) |
How to Obtain
MDI files usually have to be manually extracted from game files, a process that is different for pretty much every game that uses them.
Technical
- All MDI files begin with "MThd" MIDI header and contain "MTrk" at the start of the MIDI track.
- The End Of Track "00 FF 2F 00" event is located at the end of file, but not included in the track.
- In Ad Lib's MIDI Play, all aftertouch events and the velocity parameter in Note On events equally control the specified channel's volume, though Ad Lib's ROL to MIDI does not output polyphonic aftertouch (0xA0–0xAF).
- Note Off events just release the most recent note on specified channel. The note and velocity parameters are ignored. Early versions of ROL to MIDI (between April 25, 1990 and March 15, 1991) set the note parameter to 0 (see example).
- Control Change and Program Change events have no effect.
Sequencer-Specific Event Format
These events are used to control any OPL-compatible chip.
Event | Length | AdLib ID | Opcode | Data |
---|---|---|---|---|
FF 7F | XX | 00 00 3F | XX XX | XX .. XX |
Possible Opcodes
Opcode | Meaning | Byte # | Description |
---|---|---|---|
00 01 | Patch (instrument change) | 1 | Voice / channel number for instrument |
2–29 | 28 byte array of parameters (see structure below) | ||
00 02 | Card mode | 1 | 0 = melodic, 1 = percussive |
00 03 | Pitch bend sensitivity (same as Registered Parameter 0) | 1 | 1–12 inclusive |
Instrument Structure
Instrument parameters are expressed with the structure, which is identical to the structure for an instrument inside a BNK file:
Data type | Name | Description |
---|---|---|
MDI_OPLREGS | oplModulator | Register values for the Modulator operator (op 0) |
MDI_OPLREGS | oplCarrier | Register values for the Carrier operator (op 1) |
UINT8 | iModWaveSel | Modulator wave select (OPL base register 0xE0) |
UINT8 | iCarWaveSel | Carrier wave select (OPL base register 0xE0) |
The MDI_OPLREGS structure is defined as:
Data type | Name | Description | OPL base register |
---|---|---|---|
UINT8 | ksl | Key scaling level | 0x40 (bits 6-7) |
UINT8 | multiple | Frequency multiplier | 0x20 (bits 0-3) |
UINT8 | feedback | Feedback [op 0 only, op 1 ignored] | 0xC0 (bits 1-3) |
UINT8 | attack | Attack rate | 0x60 (upper four bits) |
UINT8 | sustain | Sustain level | 0x80 (upper four bits) |
UINT8 | eg | Envelope gain (nonzero value is on) | 0x20 (bit 5) |
UINT8 | decay | Decay rate | 0x60 (lower four bits) |
UINT8 | releaseRate | Release rate | 0x80 (lower four bits) |
UINT8 | totalLevel | Total output level | 0x40 (bit 0-5) |
UINT8 | am | Amplitude modulation (Tremolo) | 0x20 (bit 7) |
UINT8 | vib | Frequency Vibrato | 0x20 (bit 6) |
UINT8 | ksr | Key scaling/envelope rate | 0x20 (bit 4) |
UINT8 | con | Connector [op 0 only, op 1 ignored] | 0xC0 (bit 0, inverted) |
Channel Utilization
The channel utilization is the same as in the MUS format, except the music can be composed in both melodic and percussive modes, since the format supports mode switching during playback.
Default Timbre
Every player should load default timbre if it isn't loaded by sequencer-specific event before.
Links
- shikadi.net/moddingwiki/MDI_Format - ModdingWiki.
- cd.textfiles.com/soundsensations/MISCPROG/ZIPFILES/AD-PROG.ZIP - Source code (part of the Ad Lib Programmer's Manual).
- swag.outpostbbs.net/SOUND/0066.PAS - MDI2MUS by Colin Buckley (incomplete program source).