OP2 Bank Format
Format type | Musical Instrument |
---|---|
Hardware | OPL, MIDI |
Number of instruments | 175 |
Instruments named? | Yes, 31 char |
Games |
The OP2 Bank Format is an instrument bank format used by the DMX sound library developed by Paul Radek of Digital Expressions, Inc. The 128 melodic and 47 percussion instrument limit was most likely chosen so that a single OP2 file could store all the instruments for a General MIDI song. This bank has support for two-voice instruments to provide support for pseudo four-operator instruments. File of this format usually has GENMIDI name without extension as embedded WAD resource, but also can have .OP2 extension.
File format
Data type | Name | Description |
---|---|---|
char[8] | magic | #OPL_II# signature, doesn't null terminated |
BYTE[175][36] | instrument | Set of 175 instrument entry |
char[175][32] | names | Instrument names per every instrument entry, must be null terminated |
Instrument
Each bank contains 128 melodic and 47 percussion instruments.
Data type | Name | OPL base register | Description |
---|---|---|---|
UINT16LE | flags | N/A | Instrument flags: 0x01 - fixed pitch, 0x02 - delayed vibrato (unused), 0x04 - Double-voice mode |
UINT8 | fineTune | N/A | Second voice detune level |
UINT8 | noteNum | N/A | Percussion note number (between 0 and 128) |
First voice | |||
UINT8 | iModChar1 | 0x20 | Modulator characteristic (Mult, KSR, EG, VIB and AM flags) |
UINT8 | iModAttack1 | 0x60 | Modulator attack/decay level |
UINT8 | iModSustain1 | 0x80 | Modulator sustain/release level |
UINT8 | iModWaveSel1 | 0xE0 | Modulator wave select |
UINT8 | iModScale1 | 0x40 | Modulator key scaling (first two bits) |
UINT8 | iModLevel1 | 0x40 | Modulator output level (last six bits) |
UINT8 | iFeedback1 | 0xC0 | Feedback/connection |
UINT8 | iCarChar1 | 0x23 | Carrier characteristic (Mult, KSR, EG, VIB and AM flags) |
UINT8 | iCarAttack1 | 0x63 | Carrier attack/decay level |
UINT8 | iCarSustain1 | 0x83 | Carrier sustain/release level |
UINT8 | iCarWaveSel1 | 0xE3 | Carrier wave select |
UINT8 | iCarScale1 | 0x43 | Carrier key scaling (first two bits) |
UINT8 | iCarLevel1 | 0x43 | Carrier output level (last six bits) |
UINT8 | reserved1 | N/A | Unused byte |
INT16LE | noteOffset1 | N/A | MIDI note offset for a first voice |
Second voice | |||
UINT8 | iModChar2 | 0x20 | Modulator characteristic (Mult, KSR, EG, VIB and AM flags) |
UINT8 | iModAttack2 | 0x60 | Modulator attack/decay level |
UINT8 | iModSustain2 | 0x80 | Modulator sustain/release level |
UINT8 | iModWaveSel2 | 0xE0 | Modulator wave select |
UINT8 | iModScale2 | 0x40 | Modulator key scaling (first two bits) |
UINT8 | iModLevel2 | 0x40 | Modulator output level (last six bits) |
UINT8 | iFeedback2 | 0xC0 | Feedback/connection |
UINT8 | iCarChar2 | 0x23 | Carrier characteristic (Mult, KSR, EG, VIB and AM flags) |
UINT8 | iCarAttack2 | 0x63 | Carrier attack/decay level |
UINT8 | iCarSustain2 | 0x83 | Carrier sustain/release level |
UINT8 | iCarWaveSel2 | 0xE3 | Carrier wave select |
UINT8 | iCarScale2 | 0x43 | Carrier key scaling (first two bits) |
UINT8 | iCarLevel2 | 0x43 | Carrier output level (last six bits) |
UINT8 | reserved2 | N/A | Unused byte |
INT16LE | noteOffset2 | N/A | MIDI note offset for a second voice |
Instrument names
After 175'th instrument is folowing an array of 32-byte null-terminated instrument names
Fine tune
Fine tune value is an index offset of frequencies table. 128 is a center, i.e. don't detune. Formula of index offset is: (fine_tune / 2) - 64. Each unit of fine tune field is approximately equal to 1/0.015625 of tone.
Percussion instruments
Percussion instruments are in range between 35 (Bass drum 1) and 81 (Open Triangle) MIDI indeces.
Tools
The following tools are able to work with files in this format.
Name | Platform | Play? | Create new? | Modify? | Convert/export to other? | Import from other? | Access hidden data? | Edit metadata? | Notes |
---|---|---|---|---|---|---|---|---|---|
IMF Creator | Windows | Yes | Yes | Yes | Yes; .op2 | Yes; many | Yes; delayed vibrato | Yes | Utility by Adam Biser to create IMF music. Also includes OP2 bank editor. |
OPL3 Bank Editor | Linux, Windows, macOS | Yes | Yes | Yes | Yes; many | Yes; many | No | Yes |