freedoom/lumps/genmidi/config.py
Simon Howard 8c0a4bc4c5 genmidi: Import DMXOPL instruments.
This is ConSiGno's OPL instrument patch table, found here:
<https://github.com/sneakernets/DMXOPL>

This is the result of many years' development and probably the
highest quality Doom OPL instrument set that's ever been developed. I've
obtained permission from ConSiGno to submit it to Freedoom, with the
following small omissions from the upstream version:

* Instrument 107 (Shamisen)
* Percussion 36 (Bass Drum 1)
* Percussion 69 (Cabasa)
* Percussion 76 (Hi Wood Block)
* Percussion 77 (Low Wood Block)

In doing due diligence I found that the patch data for these instruments
matched the patch data from Doom's GENMIDI table. Just to be
meticulously safe we'll keep the old versions of these (nothing, in the
case of the Cabasa). Other than these, every other instrument has been
replaced with a new patch.
2023-06-24 01:09:42 -04:00

347 lines
17 KiB
Python

#!/usr/bin/env python3
# SPDX-License-Identifier: BSD-3-Clause
#
# Config file for GENMIDI file generation.
#
# This specifies the instrument files that should be used to generate
# the GENMIDI lump. Instrument files can be in SBI or A2I format.
# Instrument files must not use OPL3 features and it is an error to do so.
#
# A simple instrument specification looks like this:
#
# Instrument("filename.sbi")
#
# For a double-voice instrument (two instrument files played at the same
# time), do this:
#
# Instrument("file1.sbi", "file2.sbi")
#
# To tune the instruments, it's possible to apply an offset to the notes
# that are played. For example, to force all notes down by one octave:
#
# Instrument("file1.sbi", off1=-12)
#
# This can be controlled individually for double-voice instruments, eg.
#
# Instrument("file1.sbi", "file2.sbi", off1=-12, off2=+6)
#
# When an instrument is played, the note usually comes from the MIDI
# event. Some instruments (especially percussion) always play the same
# note. To specify a fixed note, do this:
#
# Instrument("filename.sbi", note=On5.B)
#
# Value is a MIDI note number; see midi.py for constant definitions.
from instrument import Instrument, NullInstrument
from midi import *
# Note: all instruments must ALWAYS be defined, or use NullInstrument.
# General MIDI instruments:
INSTRUMENTS = [
Instrument('instr001.sbi', 'instr001-2.sbi', # Acoustic Grand Piano
off1=-12, off2=-12, tune=+2),
Instrument('instr002.sbi', 'instr002-2.sbi', # Bright Acoustic Piano
off1=-12, off2=-12, tune=+2),
Instrument('instr003.sbi', 'instr003-2.sbi', # Electric Grand Piano
tune=+2),
Instrument('instr004.sbi', 'instr004-2.sbi', # Honky-tonk Piano
off1=-12, off2=-12, tune=+10),
Instrument('instr005.sbi', 'instr005-2.sbi', # Electric Piano (Rhodes)
off1=-12, off2=-12, tune=+3),
Instrument('instr006.sbi', 'instr006-2.sbi', # Electric Piano (DX-7)
off1=-12, off2=-12, tune=+4),
Instrument('instr007.sbi', 'instr007-2.sbi', # Harpsichord
off1=-12, off2=-12),
Instrument('instr008.sbi', 'instr008-2.sbi', # Clavichord
off1=-12, off2=-12),
Instrument('instr009.sbi', 'instr009-2.sbi', # Celesta
off1=-12, off2=-12, tune=+1),
Instrument('instr010.sbi', 'instr010-2.sbi', # Glockenspiel
off1=-24, off2=-24),
Instrument('instr011.sbi', 'instr011-2.sbi', # Music Box
off1=-12, tune=+4),
Instrument('instr012.sbi', 'instr012-2.sbi', # Vibraphone
off1=-12, off2=-12),
Instrument('instr013.sbi', 'instr013-2.sbi', # Marimba
off2=-12),
Instrument('instr014.sbi', off1=-12), # Xylophone
Instrument('instr015.sbi', 'instr015-2.sbi', # Tubular Bells
off1=-24, off2=-24, tune=+2),
Instrument('instr016.sbi', 'instr016-2.sbi', # Dulcimer
off1=-12, off2=-12, tune=+2),
Instrument('instr017.sbi', 'instr017-2.sbi', # Drawbar Organ
off1=-12, tune=+10),
Instrument('instr018.sbi', 'instr018-2.sbi', # Percussive Organ
off1=-24, off2=-24),
Instrument('instr019.sbi', 'instr019-2.sbi', # Rock Organ
off1=-12, off2=-12, tune=+10),
Instrument('instr020.sbi', 'instr020-2.sbi', # Church Organ
off1=-12, off2=-12, tune=+2),
Instrument('instr021.sbi', 'instr021-2.sbi', # Reed Organ
off1=-12, off2=-12),
Instrument('instr022.sbi', 'instr022-2.sbi', # Accordion
off1=-12, off2=-12, tune=+9),
Instrument('instr023.sbi', 'instr023-2.sbi', # Harmonica (DMX FIXED)
off1=-12, off2=-12),
Instrument('instr024.sbi', 'instr024-2.sbi', # Tango Accordion
off1=-12, off2=-12, tune=+7),
Instrument('instr025.sbi', 'instr025-2.sbi', # Acoustic Guitar (nylon)
off1=-12, off2=-24),
Instrument('instr026.sbi', 'instr026-2.sbi', # Acoustic Guitar (steel)
off1=-12, off2=-12, tune=+1),
Instrument('instr027.sbi', 'instr027-2.sbi', # Electric Guitar (jazz)
off1=-12, off2=-12),
Instrument('instr028.sbi', 'instr028-2.sbi', # Electric Guitar (clean)
off1=-12, off2=-12, tune=+3),
Instrument('instr029.sbi', 'instr029-2.sbi', # Electric Guitar (muted)
off1=-12, off2=-12),
Instrument('instr030.sbi', 'instr030-2.sbi', # Overdriven Guitar
off1=-12, off2=+2, tune=-122),
Instrument('instr031.sbi', 'instr031-2.sbi', # Distortion Guitar
off1=-12, off2=+2, tune=-122),
Instrument('instr032.sbi', 'instr032-2.sbi', # Guitar Harmonics
off1=-12, off2=-12, tune=+15),
Instrument('instr033.sbi', 'instr033-2.sbi', # Acoustic Bass
off1=-12, off2=-12, tune=+2),
Instrument('instr034.sbi', 'instr034-2.sbi'), # Electric Bass (finger)
Instrument('instr035.sbi', 'instr035-2.sbi', # Electric Bass (pick)
off1=-12),
Instrument('instr036.sbi', 'instr036-2.sbi', # Fretless Bass (DMX BUG FIX)
off1=-12, off2=-12, tune=+3),
Instrument('instr037.sbi', 'instr037-2.sbi', # Slap Bass 1
off1=-12, off2=-12),
Instrument('instr038.sbi', 'instr038-2.sbi', # Slap Bass 2
off1=-12, off2=-12),
Instrument('instr039.sbi'), # Synth Bass 1
Instrument('instr040.sbi', 'instr040-2.sbi', # Synth Bass 2
off1=-12, off2=-12, tune=+10),
Instrument('instr041.sbi', 'instr041-2.sbi', # Violin
off1=-12, off2=-12),
Instrument('instr042.sbi', off1=-12), # Viola
Instrument('instr043.sbi', 'instr043-2.sbi', # Cello
off1=-12, off2=-12, tune=+1),
Instrument('instr044.sbi', off1=-12), # Contrabass
Instrument('instr045.sbi', 'instr045-2.sbi', # Tremolo Strings (DMX)
off2=-12, tune=+5),
Instrument('instr046.sbi', 'instr046-2.sbi', # Pizzicato String
off1=-12, off2=-12, tune=+10),
Instrument('instr047.sbi', 'instr047-2.sbi', # Orchestral Harp
off1=-12, off2=-12, tune=+2),
Instrument('instr048.sbi', 'instr048-2.sbi', # Timpani (DMX)
off1=-36, off2=-12, tune=+2),
Instrument('instr049.sbi', 'instr049-2.sbi', # String Ensemble 1 (DMX)
off2=-12, tune=+5),
Instrument('instr050.sbi', 'instr050-2.sbi', # String Ensemble 2 (DMX)
off2=-12, tune=+5),
Instrument('instr051.sbi', 'instr051-2.sbi', # SynthStrings 1
off1=-12, off2=-24, tune=+4),
Instrument('instr052.sbi', 'instr052-2.sbi', # SynthStrings 2
off1=-12, off2=-12, tune=+7),
Instrument('instr053.sbi', 'instr053-2.sbi', # Choir Aahs
off1=-12, off2=-24, tune=+9),
Instrument('instr054.sbi', 'instr054-2.sbi', # Voice Oohs
off1=-12, off2=-12, tune=+9),
Instrument('instr055.sbi', 'instr055-2.sbi', # Synth Voice
off1=-12, off2=-12, tune=+10),
Instrument('instr056.sbi', 'instr056-2.sbi', # Orchestra Hit
off1=-12, off2=-12, tune=+8),
Instrument('instr057.sbi', off1=-12), # Trumpet (DMX FIXED)
Instrument('instr058.sbi', 'instr058-2.sbi', # Trombone
off1=-12, off2=-12, tune=+2),
Instrument('instr059.sbi', off1=-12), # Tuba
Instrument('instr060.sbi', off1=-24), # Muted Trumpet
Instrument('instr061.sbi', 'instr061-2.sbi', # French Horn
off1=-12, off2=-12, tune=+2),
Instrument('instr062.sbi', 'instr062-2.sbi', # Brass Section
off1=-12, off2=-12, tune=+4),
Instrument('instr063.sbi', 'instr063-2.sbi', # Synth Brass 1
off1=-12, off2=-12, tune=+6),
Instrument('instr064.sbi', 'instr064-2.sbi', # Synth Brass 2
off1=-12, off2=-12, tune=+8),
Instrument('instr065.sbi', off1=-12), # Soprano Sax
Instrument('instr066.sbi', off1=-12), # Alto Sax
Instrument('instr067.sbi'), # Tenor Sax
Instrument('instr068.sbi'), # Baritone Sax
Instrument('instr069.sbi', 'instr069-2.sbi', # Oboe
off1=-12, off2=-12),
Instrument('instr070.sbi', off1=-12), # English Horn
Instrument('instr071.sbi', off1=-12), # Bassoon
Instrument('instr072.sbi', off1=-12), # Clarinet (DMX FIXED)
Instrument('instr073.sbi', off1=-12), # Piccolo
Instrument('instr074.sbi', off1=-12), # Flute
Instrument('instr075.sbi', off1=-12), # Recorder
Instrument('instr076.sbi', 'instr076-2.sbi', # Pan Flute (DMX)
off1=-12, off2=-12, tune=+2),
Instrument('instr077.sbi', 'instr077-2.sbi', # Blown Bottle
off1=-12, off2=-12, tune=+3),
Instrument('instr078.sbi', 'instr078-2.sbi', # Shakuhachi
off1=-12, off2=-12, tune=+2),
Instrument('instr079.sbi', off1=-12), # Whistle
Instrument('instr080.sbi', off1=-12), # Ocarina
Instrument('instr081.sbi', 'instr081-2.sbi', # Lead 1 (square)
off1=-12, off2=-12, tune=+8),
Instrument('instr082.sbi', 'instr082-2.sbi', # Lead 2 (sawtooth)
off1=-12, off2=-12, tune=+7),
Instrument('instr083.sbi', 'instr083-2.sbi', # Lead 3 (calliope)
off1=-12, off2=-12, tune=+7),
Instrument('instr084.sbi', 'instr084-2.sbi', # Lead 4 (chiffer)
off1=-12, off2=-12, tune=-2),
Instrument('instr085.sbi', off1=-12), # Lead 5 (charang)
Instrument('instr086.sbi', 'instr086-2.sbi', # Lead 6 (Voice)
off1=-12, off2=-12, tune=+10),
Instrument('instr087.sbi', 'instr087-2.sbi', # Lead 7 (5th sawtooth)
off2=-5, tune=-3),
Instrument('instr088.sbi', 'instr088-2.sbi', # Lead 8 (Lead+Bass)
tune=+2),
Instrument('instr089.sbi', 'instr089-2.sbi', # Pad 1 (new age)
off1=-12, off2=-12, tune=+5),
Instrument('instr090.sbi', 'instr090-2.sbi', # Pad 2 (warm)
off1=-12, off2=-12, tune=+7),
Instrument('instr091.sbi', 'instr091-2.sbi', # Pad 3 (polysynth)
off1=-12, off2=-12, tune=+5),
Instrument('instr092.sbi', 'instr092-2.sbi', # Pad 4 (choir)
off1=-12, off2=-12, tune=+10),
Instrument('instr093.sbi', 'instr093-2.sbi', # Pad 5 (bowed glass)
off1=-12, off2=-12, tune=+7),
Instrument('instr094.sbi', 'instr094-2.sbi', # Pad 6 (metal)
off1=-12, off2=-12, tune=+4),
Instrument('instr095.sbi', 'instr095-2.sbi', # Pad 7 (halo)
off1=-12, off2=-12, tune=+6),
Instrument('instr096.sbi', 'instr096-2.sbi', # Pad 8 (sweep)
off1=-12, off2=-12, tune=+7),
Instrument('instr097.sbi', 'instr097-2.sbi', # FX 1 (rain)
off1=-12, off2=-12, tune=+6),
Instrument('instr098.sbi', 'instr098-2.sbi', # FX 2 (soundtrack)
off1=-12, off2=-5, tune=+8),
Instrument('instr099.sbi', 'instr099-2.sbi', # FX 3 (crystal)
off1=-12, off2=-12, tune=+7),
Instrument('instr100.sbi', 'instr100-2.sbi', # FX 4 (atmosphere)
off1=-12, off2=-12, tune=-3),
Instrument('instr101.sbi', 'instr101-2.sbi', # FX 5 (brightness)
off1=-12, off2=-12, tune=+8),
Instrument('instr102.sbi', 'instr102-2.sbi', # FX 6 (goblin)
off1=-12, off2=-12, tune=-5),
Instrument('instr103.sbi', 'instr103-2.sbi', # FX 7 (echo drops)
off1=-12, off2=-12, tune=+9),
Instrument('instr104.sbi', 'instr104-2.sbi', # * FX 8 (star-theme)
off1=-12, off2=-12, tune=+5),
Instrument('instr105.sbi', 'instr105-2.sbi', # Sitar
off1=-12, off2=-12, tune=+2),
Instrument('instr106.sbi', 'instr106-2.sbi', # Banjo
off1=-12, off2=-12),
Instrument("instr107.sbi", off1=-12), # #107 - Shamisen
Instrument('instr108.sbi', off1=-12), # Koto
Instrument('instr109.sbi', off1=-12), # Kalimba
Instrument('instr110.sbi', 'instr110-2.sbi', # Bag Pipe
off1=-12, off2=-12, tune=+4),
Instrument('instr111.sbi', off1=-12), # Fiddle
Instrument('instr112.sbi', off1=-12), # Shanai
Instrument('instr113.sbi', off1=-7), # Tinkle Bell
Instrument('instr114.sbi', off1=-12), # Agogo
Instrument('instr115.sbi', 'instr115-2.sbi', # Steel Drums
off1=-12, off2=-12, tune=+2),
Instrument('instr116.sbi', off1=-12), # Woodblock
Instrument('instr117.sbi', 'instr117-2.sbi', # Taiko Drum (new)
off1=-24, off2=-12),
Instrument('instr118.sbi', 'instr118-2.sbi', # Melodic Tom
off1=-12),
Instrument('instr119.sbi', 'instr119-2.sbi', # Synth Drum
off1=-24, off2=-12),
Instrument('instr120.sbi', 'instr120-2.sbi', # Reverse Cymbal
off1=-12, tune=+7),
Instrument('instr121.sbi', off1=-26), # Guitar Fret Noise (DMX)
Instrument('instr122.sbi', 'instr122-2.sbi', # Breath Noise
off1=-12, off2=-12),
Instrument('instr123.sbi', 'instr123-2.sbi', # Seashore
note=O0.F, off1=-35, off2=-36),
Instrument('instr124.sbi'), # Bird Tweet
Instrument('instr125.sbi', 'instr125-2.sbi', # Telephone Ring
off1=-36, off2=-32),
Instrument('instr126.sbi', 'instr126-2.sbi', # Helicopter
note=On4.F, off1=-48, off2=-26),
Instrument('instr127.sbi', 'instr127-2.sbi', # Applause
note=O0.F, off1=-48, off2=-47),
Instrument('instr128.sbi', off1=-12), # Gun Shot
]
# Percussion instruments:
PERCUSSION = [
Instrument('perc35.sbi', note=On3.Cs), # Acoustic Bass Drum
Instrument("perc36.sbi", note=On4.A), # #36 Bass Drum 1
Instrument('perc37.sbi', 'perc37-2.sbi', # Slide Stick
note=O0.Cs),
Instrument('perc38.sbi', 'perc38-2.sbi', # Acoustic Snare
note=On2.D, off1=-12),
Instrument('perc39.sbi', 'perc39-2.sbi', # Hand Clap
note=On2.Cs, off1=-12, off2=-14),
Instrument('perc40.sbi', 'perc40-2.sbi', # Electric Snare
note=On2.D, off1=-4, off2=-11),
Instrument('perc41.sbi', # Low Floor Tom
note=On3.Gs, off1=-12),
Instrument('perc42.sbi', 'perc42-2.sbi', # Closed High-Hat
note=On1.C, off1=-17, off2=-12, tune=-122),
Instrument('perc43.sbi', # High Floor Tom
note=On3.As, off1=-12),
Instrument('perc44.sbi', # Pedal High Hat
note=On1.C, off1=-17),
Instrument('perc45.sbi', # Low Tom
note=On2.Cs, off1=-12),
Instrument('perc46.sbi', 'perc46-2.sbi', # Open High Hat
note=On1.C, off1=-17, off2=-12, tune=-122),
Instrument('perc47.sbi', # Low-Mid Tom
note=On2.E, off1=-12),
Instrument('perc48.sbi', # Hi-Mid Tom
note=On2.G, off1=-12),
Instrument('perc49.sbi', 'perc49-2.sbi', # Crash Cymbal 1
note=O0.Cs, tune=+6),
Instrument('perc50.sbi', # High Tom
note=On2.As, off1=-12),
Instrument('perc51.sbi', 'perc51-2.sbi', # Ride Cymbal 1
note=O0.C, tune=+4),
Instrument('perc52.sbi', 'perc52-2.sbi', # Chinses Cymbal
note=O1.G, off2=-1, tune=+5),
Instrument('perc53.sbi', # Ride Bell
note=O0.D, off1=-12),
Instrument('perc54.sbi', 'perc54-2.sbi', # Tambourine
note=O1.Gs, tune=+8),
Instrument('perc55.sbi', 'perc55-2.sbi', # Splash Cymbal
note=O0.G, off1=-12, off2=-11, tune=+5),
Instrument('perc56.sbi', note=On1.As), # Cowbell
Instrument('perc57.sbi', 'perc57-2.sbi', # Crash Cymbal 2
note=O0.D, tune=+6),
Instrument('perc58.sbi', note=On3.C), # Vibraslap
Instrument('perc59.sbi', note=O0.Cs), # Ride Cymbal 2
Instrument('perc60.sbi', 'perc60-2.sbi', # High Bongo (New)
note=On2.F, off1=-6, off2=-12),
Instrument('perc61.sbi', 'perc61-2.sbi', # Low Bongo (New)
note=On3.B, off2=-12),
Instrument('perc62.sbi', 'perc62-2.sbi', # Mute high conga (New)
note=On3.F, off1=-12, off2=-2),
Instrument('perc63.sbi', 'perc63-2.sbi', # Open High Conga (New)
note=On2.F, off1=-4, off2=-12),
Instrument('perc64.sbi', 'perc64-2.sbi', # Low Conga (New)
note=On2.Cs, off1=-4, off2=-12),
Instrument('perc65.sbi', note=On1.G), # High Timbale
Instrument('perc66.sbi', note=On1.C), # Low Timbale
Instrument('perc67.sbi', 'perc67-2.sbi', # High Agogo
note=O1.Fs, off2=-6),
Instrument('perc68.sbi', 'perc68-2.sbi', # Low Agogo
note=O1.Cs, off2=-1),
NullInstrument, # TODO - #69 Cabasa
Instrument('perc70.sbi', note=On2.E), # Maracas
Instrument('perc71.sbi', note=On2.A), # Short Whistle
Instrument('perc72.sbi', note=On2.Fs), # Long Whistle
Instrument('perc73.sbi', 'perc73-2.sbi', # Short Guiro
note=On1.C, off1=-12, off2=-12),
Instrument('perc74.sbi', 'perc74-2.sbi', # Long Guiro
note=On1.C, off1=-12, off2=-12),
Instrument('perc75.sbi', note=O1.Cs), # Claves
Instrument("perc76.sbi", note=On5.E), # #76 Hi Wood Block
Instrument("perc77.sbi", note=On5.E), # #77 Low Wood Block
Instrument('perc78.sbi', note=On4.E), # Mute Cuica
Instrument('perc79.sbi', note=On4.E), # Open Cuica
Instrument('perc80.sbi', note=O2.Fs), # Mute Triangle
Instrument('perc81.sbi', note=O2.Fs), # Open Triangle
]