freedoom/lumps/dmxgus/config.py
Simon Howard acdf59e1f0 dmxgus: Tweak similarity groups for main instruments.
The main instrument groupings were already pretty good but there
was some room for improvement. The generated configuration sounds
pretty good now, even when using the 256KB config.
2014-01-31 05:40:13 +00:00

377 lines
16 KiB
Python

#
# Copyright (c) 2013 Contributors to the Freedoom project.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the freedoom project nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# --------------------------------------------------------------
#
# Config file for GUS config generator.
#
# Names of GUS instrument files to use for playing MIDI.
# These are the names of the .pat files in the \ultrasnd\midi directory
# that are loaded into the card.
GUS_INSTR_PATCHES = {
0: "acpiano", # #001 - Acoustic Grand Piano
1: "britepno", # #002 - Bright Acoustic Piano
2: "synpiano", # #003 - Electric Grand Piano
3: "honky", # #004 - Honky-tonk Piano
4: "epiano1", # #005 - Electric Piano 1
5: "epiano2", # #006 - Electric Piano 2
6: "hrpschrd", # #007 - Harpsichord
7: "clavinet", # #008 - Clavi
8: "celeste", # #009 - Celesta
9: "glocken", # #010 - Glockenspiel
10: "musicbox", # #011 - Music Box
11: "vibes", # #012 - Vibraphone
12: "marimba", # #013 - Marimba
13: "xylophon", # #014 - Xylophone
14: "tubebell", # #015 - Tubular Bells
15: "santur", # #016 - Dulcimer
16: "homeorg", # #017 - Drawbar Organ
17: "percorg", # #018 - Percussive Organ
18: "rockorg", # #019 - Rock Organ
19: "church", # #020 - Church Organ
20: "reedorg", # #021 - Reed Organ
21: "accordn", # #022 - Accordion
22: "harmonca", # #023 - Harmonica
23: "concrtna", # #024 - Tango Accordion
24: "nyguitar", # #025 - Acoustic Guitar (nylon)
25: "acguitar", # #026 - Acoustic Guitar (steel)
26: "jazzgtr", # #027 - Electric Guitar (jazz)
27: "cleangtr", # #028 - Electric Guitar (clean)
28: "mutegtr", # #029 - Electric Guitar (muted)
29: "odguitar", # #030 - Overdriven Guitar
30: "distgtr", # #031 - Distortion Guitar
31: "gtrharm", # #032 - Guitar harmonics
32: "acbass", # #033 - Acoustic Bass
33: "fngrbass", # #034 - Electric Bass (finger)
34: "pickbass", # #035 - Electric Bass (pick)
35: "fretless", # #036 - Fretless Bass
36: "slapbas1", # #037 - Slap Bass 1
37: "slapbas2", # #038 - Slap Bass 2
38: "synbass1", # #039 - Synth Bass 1
39: "synbass2", # #040 - Synth Bass 2
40: "violin", # #041 - Violin
41: "viola", # #042 - Viola
42: "cello", # #043 - Cello
43: "contraba", # #044 - Contrabass
44: "tremstr", # #045 - Tremolo Strings
45: "pizzcato", # #046 - Pizzicato Strings
46: "harp", # #047 - Orchestral Harp
47: "timpani", # #048 - Timpani
48: "marcato", # #049 - String Ensemble 1
49: "slowstr", # #050 - String Ensemble 2
50: "synstr1", # #051 - SynthStrings 1
51: "synstr2", # #052 - SynthStrings 2
52: "choir", # #053 - Choir Aahs
53: "doo", # #054 - Voice Oohs
54: "voices", # #055 - Synth Voice
55: "orchhit", # #056 - Orchestra Hit
56: "trumpet", # #057 - Trumpet
57: "trombone", # #058 - Trombone
58: "tuba", # #059 - Tuba
59: "mutetrum", # #060 - Muted Trumpet
60: "frenchrn", # #061 - French Horn
61: "hitbrass", # #062 - Brass Section
62: "synbras1", # #063 - SynthBrass 1
63: "synbras2", # #064 - SynthBrass 2
64: "sprnosax", # #065 - Soprano Sax
65: "altosax", # #066 - Alto Sax
66: "tenorsax", # #067 - Tenor Sax
67: "barisax", # #068 - Baritone Sax
68: "oboe", # #069 - Oboe
69: "englhorn", # #070 - English Horn
70: "bassoon", # #071 - Bassoon
71: "clarinet", # #072 - Clarinet
72: "piccolo", # #073 - Piccolo
73: "flute", # #074 - Flute
74: "recorder", # #075 - Recorder
75: "woodflut", # #076 - Pan Flute
76: "bottle", # #077 - Blown Bottle
77: "shakazul", # #078 - Shakuhachi
78: "whistle", # #079 - Whistle
79: "ocarina", # #080 - Ocarina
80: "sqrwave", # #081 - Lead 1 (square)
81: "sawwave", # #082 - Lead 2 (sawtooth)
82: "calliope", # #083 - Lead 3 (calliope)
83: "chiflead", # #084 - Lead 4 (chiff)
84: "charang", # #085 - Lead 5 (charang)
85: "voxlead", # #086 - Lead 6 (voice)
86: "lead5th", # #087 - Lead 7 (fifths)
87: "basslead", # #088 - Lead 8 (bass + lead)
88: "fantasia", # #089 - Pad 1 (new age)
89: "warmpad", # #090 - Pad 2 (warm)
90: "polysyn", # #091 - Pad 3 (polysynth)
91: "ghostie", # #092 - Pad 4 (choir)
92: "bowglass", # #093 - Pad 5 (bowed)
93: "metalpad", # #094 - Pad 6 (metallic)
94: "halopad", # #095 - Pad 7 (halo)
95: "sweeper", # #096 - Pad 8 (sweep)
96: "aurora", # #097 - FX 1 (rain)
97: "soundtrk", # #098 - FX 2 (soundtrack)
98: "crystal", # #099 - FX 3 (crystal)
99: "atmosphr", # #100 - FX 4 (atmosphere)
100: "freshair", # #101 - FX 5 (brightness)
101: "unicorn", # #102 - FX 6 (goblins)
102: "echovox", # #103 - FX 7 (echoes)
103: "startrak", # #104 - FX 8 (sci-fi)
104: "sitar", # #105 - Sitar
105: "banjo", # #106 - Banjo
106: "shamisen", # #107 - Shamisen
107: "koto", # #108 - Koto
108: "kalimba", # #109 - Kalimba
109: "bagpipes", # #110 - Bag pipe
110: "fiddle", # #111 - Fiddle
111: "shannai", # #112 - Shanai
112: "carillon", # #113 - Tinkle Bell
113: "agogo", # #114 - Agogo
114: "steeldrm", # #115 - Steel Drums
115: "woodblk", # #116 - Woodblock
116: "taiko", # #117 - Taiko Drum
117: "toms", # #118 - Melodic Tom
118: "syntom", # #119 - Synth Drum
119: "revcym", # #120 - Reverse Cymbal
120: "fx-fret", # #121 - Guitar Fret Noise
121: "fx-blow", # #122 - Breath Noise
122: "seashore", # #123 - Seashore
123: "jungle", # #124 - Bird Tweet
124: "telephon", # #125 - Telephone Ring
125: "helicptr", # #126 - Helicopter
126: "applause", # #127 - Applause
127: "pistol", # #128 - Gunshot
128: "blank",
163: "kick1", # #35 Acoustic Bass Drum
164: "kick2", # #36 Bass Drum 1
165: "stickrim", # #37 Side Stick
166: "snare1", # #38 Acoustic Snare
167: "claps", # #39 Hand Clap
168: "snare2", # #40 Electric Snare
169: "tomlo2", # #41 Low Floor Tom
170: "hihatcl", # #42 Closed Hi Hat
171: "tomlo1", # #43 High Floor Tom
172: "hihatpd", # #44 Pedal Hi-Hat
173: "tommid2", # #45 Low Tom
174: "hihatop", # #46 Open Hi-Hat
175: "tommid1", # #47 Low-Mid Tom
176: "tomhi2", # #48 Hi-Mid Tom
177: "cymcrsh1", # #49 Crash Cymbal 1
178: "tomhi1", # #50 High Tom
179: "cymride1", # #51 Ride Cymbal 1
180: "cymchina", # #52 Chinese Cymbal
181: "cymbell", # #53 Ride Bell
182: "tamborin", # #54 Tambourine
183: "cymsplsh", # #55 Splash Cymbal
184: "cowbell", # #56 Cowbell
185: "cymcrsh2", # #57 Crash Cymbal 2
186: "vibslap", # #58 Vibraslap
187: "cymride2", # #59 Ride Cymbal 2
188: "bongohi", # #60 Hi Bongo
189: "bongolo", # #61 Low Bongo
190: "congahi1", # #62 Mute Hi Conga
191: "congahi2", # #63 Open Hi Conga
192: "congalo", # #64 Low Conga
193: "timbaleh", # #65 High Timbale
194: "timbalel", # #66 Low Timbale
195: "agogohi", # #67 High Agogo
196: "agogolo", # #68 Low Agogo
197: "cabasa", # #69 Cabasa
198: "maracas", # #70 Maracas
199: "whistle1", # #71 Short Whistle
200: "whistle2", # #72 Long Whistle
201: "guiro1", # #73 Short Guiro
202: "guiro2", # #74 Long Guiro
203: "clave", # #75 Claves
204: "woodblk1", # #76 Hi Wood Block
205: "woodblk2", # #77 Low Wood Block
206: "cuica1", # #78 Mute Cuica
207: "cuica2", # #79 Open Cuica
208: "triangl1", # #80 Mute Triangle
209: "triangl2", # #81 Open Triangle
}
# These are the data sizes of the patch files distributed with the
# GUS drivers. These are used to calculate the size in RAM of the
# generated patch sets to check that they are within the limits.
# and check it is within the limit.
PATCH_FILE_SIZES = {
"acbass": 5248, "accordn": 9616, "acguitar": 26080,
"acpiano": 32256, "agogo": 13696, "agogohi": 3488,
"agogolo": 3488, "altosax": 5616, "applause": 30064,
"atmosphr": 31360, "aurora": 31088, "bagpipes": 7760,
"banjo": 32016, "barisax": 10544, "basslead": 26496,
"bassoon": 8000, "belltree": 31888, "blank": 1520,
"bongohi": 3456, "bongolo": 4448, "bottle": 12368,
"bowglass": 24688, "britepno": 36000, "cabasa": 8448,
"calliope": 22992, "carillon": 5888, "castinet": 6016,
"celeste": 9936, "cello": 9120, "charang": 45056,
"chiflead": 31536, "choir": 22480, "church": 2144,
"claps": 5696, "clarinet": 9184, "clave": 2352,
"clavinet": 1440, "cleangtr": 22768, "concrtna": 8784,
"congahi1": 4224, "congahi2": 4704, "congalo": 4704,
"contraba": 4704, "cowbell": 3168, "crystal": 30224,
"cuica1": 9344, "cuica2": 12848, "cymbell": 17248,
"cymchina": 24112, "cymcrsh1": 31520, "cymcrsh2": 31040,
"cymride1": 17664, "cymride2": 17664, "cymsplsh": 31520,
"distgtr": 18848, "doo": 8464, "echovox": 14976,
"englhorn": 12096, "epiano1": 7344, "epiano2": 21936,
"fantasia": 23456, "fiddle": 5904, "flute": 6032,
"fngrbass": 9744, "frenchrn": 14128, "freshair": 28992,
"fretless": 2640, "fx-blow": 28688, "fx-fret": 13648,
"ghostie": 31488, "glocken": 5184, "gtrharm": 4928,
"guiro1": 4128, "guiro2": 9248, "halopad": 29984,
"harmonca": 7408, "harp": 11728, "helicptr": 25008,
"highq": 1808, "hihatcl": 4560, "hihatop": 20048,
"hihatpd": 1808, "hitbrass": 31520, "homeorg": 992,
"honky": 65680, "hrpschrd": 3584, "jazzgtr": 27712,
"jingles": 16944, "jungle": 13616, "kalimba": 2208,
"kick1": 4544, "kick2": 5024, "koto": 20832,
"lead5th": 6464, "maracas": 4560, "marcato": 61232,
"marimba": 2064, "metalpad": 30288, "metbell": 112,
"metclick": 112, "musicbox": 15312, "mutegtr": 17008,
"mutetrum": 9168, "nyguitar": 19200, "oboe": 3952,
"ocarina": 1616, "odguitar": 12640, "orchhit": 14208,
"percorg": 7520, "piccolo": 4320, "pickbass": 16416,
"pistol": 18144, "pizzcato": 19888, "polysyn": 30224,
"recorder": 2656, "reedorg": 1568, "revcym": 13536,
"rockorg": 30288, "santur": 21760, "sawwave": 27056,
"scratch1": 4384, "scratch2": 2288, "seashore": 31040,
"shakazul": 31136, "shaker": 3104, "shamisen": 13136,
"shannai": 9792, "sitar": 18288, "slap": 5856,
"slapbas1": 27872, "slapbas2": 20592, "slowstr": 18192,
"snare1": 8544, "snare2": 4096, "soundtrk": 19888,
"sprnosax": 7072, "sqrclick": 112, "sqrwave": 15056,
"startrak": 27376, "steeldrm": 11952, "stickrim": 2848,
"sticks": 4224, "surdo1": 9600, "surdo2": 9600,
"sweeper": 31216, "synbass1": 6160, "synbass2": 2928,
"synbras1": 30704, "synbras2": 30160, "synpiano": 5456,
"synstr1": 31216, "synstr2": 16416, "syntom": 30512,
"taiko": 18672, "tamborin": 8944, "telephon": 4416,
"tenorsax": 8448, "timbaleh": 5264, "timbalel": 9728,
"timpani": 7072, "tomhi1": 6576, "tomhi2": 6560,
"tomlo1": 6560, "tomlo2": 9600, "tommid1": 6560,
"tommid2": 6560, "toms": 6576, "tremstr": 61232,
"triangl1": 2224, "triangl2": 15792, "trombone": 12896,
"trumpet": 6608, "tuba": 5760, "tubebell": 9120,
"unicorn": 30096, "vibes": 10640, "vibslap": 9456,
"viola": 27952, "violin": 12160, "voices": 14976,
"voxlead": 14992, "warmpad": 18080, "whistle": 5872,
"whistle1": 2000, "whistle2": 928, "woodblk": 3680,
"woodblk1": 2352, "woodblk2": 3680, "woodflut": 1936,
"xylophon": 9376,
}
# Groups of "similar sounding" instruments. The first instrument in each
# group is the "leader" and will be used as the fallback for other
# instruments in the group if they are not popular enough to be included.
#
# These groups are based on having listened to the instruments in the
# GUS patch set using the generated comparison mid (see comparison.py),
# with similar sounding instruments being grouped together.
#
# If you want to improve the generated config, here's where to start.
# Separating out into more, smaller groups helps, but the 256KB
# config's limited size is quite restrictive. In particular, it's
# important that the "leader" instrument for each group is small
# (see table above of patch sizes).
SIMILAR_GROUPS = [
# Pianos.
('synpiano', 'acpiano', 'britepno', 'honky', 'epiano1', 'epiano2',
'celeste', 'glocken'),
# Harpsichord sounds noticeably different to pianos:
('hrpschrd', 'clavinet'),
# Xylophone etc.
('marimba', 'musicbox', 'vibes', 'xylophon', 'tubebell', 'carillon',
'santur', 'kalimba'),
# Organs.
('homeorg', 'percorg', 'rockorg', 'church', 'reedorg'),
# Accordion/Harmonica:
('accordn', 'harmonca', 'concrtna'),
# Guitars.
('nyguitar', 'acguitar', 'jazzgtr', 'cleangtr', 'mutegtr'),
# Overdriven/distortion guitars sound different. Besides, we
# definitely want at least one of these.
('odguitar', 'distgtr', 'gtrharm'),
# Basses.
('synbass2', 'acbass', 'fngrbass', 'pickbass', 'fretless', 'slapbas1',
'slapbas2', 'synbass1', 'basslead'),
# Violin and similar string instruments.
('violin', 'viola', 'cello', 'contraba', 'tremstr', 'pizzcato',
'harp'),
# Other stringed (?)
('synstr2', 'slowstr', 'marcato', 'synstr1', 'choir', 'doo', 'voices',
'orchhit', 'polysyn', 'bowglass'),
# Trumpet and other brass.
('trumpet', 'trombone', 'tuba', 'mutetrum', 'frenchrn', 'hitbrass',
'synbras1', 'synbras2'),
# Reed instruments.
('altosax', 'sprnosax', 'tenorsax', 'barisax', 'oboe', 'englhorn',
'bassoon', 'clarinet'),
# Pipe instruments.
('recorder', 'flute', 'piccolo', 'woodflut', 'bottle', 'shakazul',
'whistle', 'ocarina', 'bagpipes', 'fiddle', 'shannai',
'calliope', 'chiflead', 'charang'),
# Leads:
('sqrwave', 'sawwave', 'voxlead', 'lead5th'),
# Odd stringed instruments.
('sitar', 'banjo', 'shamisen', 'koto'),
# Special effects. Blank unless popular enough to appear.
('blank', 'fantasia', 'warmpad', 'ghostie',
'metalpad', 'halopad', 'sweeper', 'aurora', 'soundtrk', 'crystal',
'atmosphr', 'freshair', 'unicorn', 'echovox', 'startrak', 'fx-fret',
'fx-blow', 'seashore', 'jungle', 'telephon', 'helicptr', 'applause',
'pistol'),
# Percussion sounds.
# Kick:
('kick2', 'steeldrm', 'taiko', 'kick1'),
# Conga:
('congahi2', 'congahi1', 'congalo'),
# Snare drums:
('snare2', 'claps', 'snare1'),
# Toms:
('tomlo1', 'toms', 'syntom', 'tomlo2', 'tommid1', 'tommid2', 'tomhi2',
'tomhi1', 'timpani'),
# Cymbal crash:
('cymsplsh', 'cymcrsh2', 'cymcrsh1', 'revcym', 'cymchina'),
# Cymbal ride:
('cymride1', 'cymride2', 'cymbell'),
# Hi-hat:
('hihatpd', 'hihatcl', 'hihatop'),
# Metallic sounding:
('bongohi', 'bongolo', 'timbaleh', 'timbalel', 'cowbell',
'agogohi', 'agogolo', 'agogo', 'triangl1', 'triangl2'),
# Click:
('stickrim', 'woodblk1', 'woodblk2', 'woodblk', 'tamborin', 'clave'),
# Random things.
('cabasa', 'whistle1', 'whistle2', 'vibslap', 'maracas',
'guiro1', 'guiro2', 'cuica1', 'cuica2'),
]