midi_file/core/
general_midi.rs

1/// `GeneralMidi` represents the standard set of instruments that are intended to be available by
2/// all MIDI implementations.
3#[repr(u8)]
4#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
5#[allow(missing_docs)]
6#[derive(Default)]
7pub enum GeneralMidi {
8    #[default]
9    AcousticGrandPiano = 1,
10    BrightAcousticPiano = 2,
11    ElectricGrandPiano = 3,
12    HonkyTonkPiano = 4,
13    ElectricPiano1 = 5,
14    ElectricPiano2 = 6,
15    Harpsichord = 7,
16    Clavi = 8,
17    Celesta = 9,
18    Glockenspiel = 10,
19    MusicBox = 11,
20    Vibraphone = 12,
21    Marimba = 13,
22    Xylophone = 14,
23    TubularBells = 15,
24    Dulcimer = 16,
25    DrawbarOrgan = 17,
26    PercussiveOrgan = 18,
27    RockOrgan = 19,
28    ChurchOrgan = 20,
29    ReedOrgan = 21,
30    Accordion = 22,
31    Harmonica = 23,
32    TangoAccordion = 24,
33    AcousticGuitarNylon = 25,
34    AcousticGuitarSteel = 26,
35    ElectricGuitarJazz = 27,
36    ElectricGuitarClean = 28,
37    ElectricGuitarMuted = 29,
38    OverdrivenGuitar = 30,
39    DistortionGuitar = 31,
40    GuitarHarmonics = 32,
41    AcousticBass = 33,
42    ElectricBassFinger = 34,
43    ElectricBassPick = 35,
44    FretlessBass = 36,
45    SlapBass1 = 37,
46    SlapBass2 = 38,
47    SynthBass1 = 39,
48    SynthBass2 = 40,
49    Violin = 41,
50    Viola = 42,
51    Cello = 43,
52    Contrabass = 44,
53    TremoloStrings = 45,
54    PizzicatoStrings = 46,
55    OrchestralHarp = 47,
56    Timpani = 48,
57    StringEnsemble1 = 49,
58    StringEnsemble2 = 50,
59    SynthStrings1 = 51,
60    SynthStrings2 = 52,
61    ChoirAahs = 53,
62    VoiceOohs = 54,
63    SynthVoice = 55,
64    OrchestraHit = 56,
65    Trumpet = 57,
66    Trombone = 58,
67    Tuba = 59,
68    MutedTrumpet = 60,
69    FrenchHorn = 61,
70    BrassSection = 62,
71    SynthBrass1 = 63,
72    SynthBrass2 = 64,
73    SopranoSax = 65,
74    AltoSax = 66,
75    TenorSax = 67,
76    BaritoneSax = 68,
77    Oboe = 69,
78    EnglishHorn = 70,
79    Bassoon = 71,
80    Clarinet = 72,
81    Piccolo = 73,
82    Flute = 74,
83    Recorder = 75,
84    PanFlute = 76,
85    BlownBottle = 77,
86    Shakuhachi = 78,
87    Whistle = 79,
88    Ocarina = 80,
89    Lead1Square = 81,
90    Lead2Sawtooth = 82,
91    Lead3Calliope = 83,
92    Lead4Chiff = 84,
93    Lead5Charang = 85,
94    Lead6Voice = 86,
95    Lead7Fifths = 87,
96    Lead8BassPlusLead = 88,
97    Pad1Newage = 89,
98    Pad2Warm = 90,
99    Pad3Polysynth = 91,
100    Pad4Choir = 92,
101    Pad5Bowed = 93,
102    Pad6Metallic = 94,
103    Pad7Halo = 95,
104    Pad8Sweep = 96,
105    Fx1Rain = 97,
106    Fx2Soundtrack = 98,
107    Fx3Crystal = 99,
108    Fx4Atmosphere = 100,
109    Fx5Brightness = 101,
110    Fx6Goblins = 102,
111    Fx7Echoes = 103,
112    Fx8SciFi = 104,
113    Sitar = 105,
114    Banjo = 106,
115    Shamisen = 107,
116    Koto = 108,
117    Kalimba = 109,
118    Bagpipe = 110,
119    Fiddle = 111,
120    Shanai = 112,
121    TinkleBell = 113,
122    Agogo = 114,
123    SteelDrums = 115,
124    Woodblock = 116,
125    TaikoDrum = 117,
126    MelodicTom = 118,
127    SynthDrum = 119,
128    ReverseCymbal = 120,
129    GuitarFretNoise = 121,
130    BreathNoise = 122,
131    Seashore = 123,
132    BirdTweet = 124,
133    TelephoneRing = 125,
134    Helicopter = 126,
135    Applause = 127,
136    Gunshot = 128,
137}
138
139impl From<u8> for GeneralMidi {
140    fn from(value: u8) -> Self {
141        match value {
142            x if GeneralMidi::AcousticGrandPiano as u8 == x => GeneralMidi::AcousticGrandPiano,
143            x if GeneralMidi::BrightAcousticPiano as u8 == x => GeneralMidi::BrightAcousticPiano,
144            x if GeneralMidi::ElectricGrandPiano as u8 == x => GeneralMidi::ElectricGrandPiano,
145            x if GeneralMidi::HonkyTonkPiano as u8 == x => GeneralMidi::HonkyTonkPiano,
146            x if GeneralMidi::ElectricPiano1 as u8 == x => GeneralMidi::ElectricPiano1,
147            x if GeneralMidi::ElectricPiano2 as u8 == x => GeneralMidi::ElectricPiano2,
148            x if GeneralMidi::Harpsichord as u8 == x => GeneralMidi::Harpsichord,
149            x if GeneralMidi::Clavi as u8 == x => GeneralMidi::Clavi,
150            x if GeneralMidi::Celesta as u8 == x => GeneralMidi::Celesta,
151            x if GeneralMidi::Glockenspiel as u8 == x => GeneralMidi::Glockenspiel,
152            x if GeneralMidi::MusicBox as u8 == x => GeneralMidi::MusicBox,
153            x if GeneralMidi::Vibraphone as u8 == x => GeneralMidi::Vibraphone,
154            x if GeneralMidi::Marimba as u8 == x => GeneralMidi::Marimba,
155            x if GeneralMidi::Xylophone as u8 == x => GeneralMidi::Xylophone,
156            x if GeneralMidi::TubularBells as u8 == x => GeneralMidi::TubularBells,
157            x if GeneralMidi::Dulcimer as u8 == x => GeneralMidi::Dulcimer,
158            x if GeneralMidi::DrawbarOrgan as u8 == x => GeneralMidi::DrawbarOrgan,
159            x if GeneralMidi::PercussiveOrgan as u8 == x => GeneralMidi::PercussiveOrgan,
160            x if GeneralMidi::RockOrgan as u8 == x => GeneralMidi::RockOrgan,
161            x if GeneralMidi::ChurchOrgan as u8 == x => GeneralMidi::ChurchOrgan,
162            x if GeneralMidi::ReedOrgan as u8 == x => GeneralMidi::ReedOrgan,
163            x if GeneralMidi::Accordion as u8 == x => GeneralMidi::Accordion,
164            x if GeneralMidi::Harmonica as u8 == x => GeneralMidi::Harmonica,
165            x if GeneralMidi::TangoAccordion as u8 == x => GeneralMidi::TangoAccordion,
166            x if GeneralMidi::AcousticGuitarNylon as u8 == x => GeneralMidi::AcousticGuitarNylon,
167            x if GeneralMidi::AcousticGuitarSteel as u8 == x => GeneralMidi::AcousticGuitarSteel,
168            x if GeneralMidi::ElectricGuitarJazz as u8 == x => GeneralMidi::ElectricGuitarJazz,
169            x if GeneralMidi::ElectricGuitarClean as u8 == x => GeneralMidi::ElectricGuitarClean,
170            x if GeneralMidi::ElectricGuitarMuted as u8 == x => GeneralMidi::ElectricGuitarMuted,
171            x if GeneralMidi::OverdrivenGuitar as u8 == x => GeneralMidi::OverdrivenGuitar,
172            x if GeneralMidi::DistortionGuitar as u8 == x => GeneralMidi::DistortionGuitar,
173            x if GeneralMidi::GuitarHarmonics as u8 == x => GeneralMidi::GuitarHarmonics,
174            x if GeneralMidi::AcousticBass as u8 == x => GeneralMidi::AcousticBass,
175            x if GeneralMidi::ElectricBassFinger as u8 == x => GeneralMidi::ElectricBassFinger,
176            x if GeneralMidi::ElectricBassPick as u8 == x => GeneralMidi::ElectricBassPick,
177            x if GeneralMidi::FretlessBass as u8 == x => GeneralMidi::FretlessBass,
178            x if GeneralMidi::SlapBass1 as u8 == x => GeneralMidi::SlapBass1,
179            x if GeneralMidi::SlapBass2 as u8 == x => GeneralMidi::SlapBass2,
180            x if GeneralMidi::SynthBass1 as u8 == x => GeneralMidi::SynthBass1,
181            x if GeneralMidi::SynthBass2 as u8 == x => GeneralMidi::SynthBass2,
182            x if GeneralMidi::Violin as u8 == x => GeneralMidi::Violin,
183            x if GeneralMidi::Viola as u8 == x => GeneralMidi::Viola,
184            x if GeneralMidi::Cello as u8 == x => GeneralMidi::Cello,
185            x if GeneralMidi::Contrabass as u8 == x => GeneralMidi::Contrabass,
186            x if GeneralMidi::TremoloStrings as u8 == x => GeneralMidi::TremoloStrings,
187            x if GeneralMidi::PizzicatoStrings as u8 == x => GeneralMidi::PizzicatoStrings,
188            x if GeneralMidi::OrchestralHarp as u8 == x => GeneralMidi::OrchestralHarp,
189            x if GeneralMidi::Timpani as u8 == x => GeneralMidi::Timpani,
190            x if GeneralMidi::StringEnsemble1 as u8 == x => GeneralMidi::StringEnsemble1,
191            x if GeneralMidi::StringEnsemble2 as u8 == x => GeneralMidi::StringEnsemble2,
192            x if GeneralMidi::SynthStrings1 as u8 == x => GeneralMidi::SynthStrings1,
193            x if GeneralMidi::SynthStrings2 as u8 == x => GeneralMidi::SynthStrings2,
194            x if GeneralMidi::ChoirAahs as u8 == x => GeneralMidi::ChoirAahs,
195            x if GeneralMidi::VoiceOohs as u8 == x => GeneralMidi::VoiceOohs,
196            x if GeneralMidi::SynthVoice as u8 == x => GeneralMidi::SynthVoice,
197            x if GeneralMidi::OrchestraHit as u8 == x => GeneralMidi::OrchestraHit,
198            x if GeneralMidi::Trumpet as u8 == x => GeneralMidi::Trumpet,
199            x if GeneralMidi::Trombone as u8 == x => GeneralMidi::Trombone,
200            x if GeneralMidi::Tuba as u8 == x => GeneralMidi::Tuba,
201            x if GeneralMidi::MutedTrumpet as u8 == x => GeneralMidi::MutedTrumpet,
202            x if GeneralMidi::FrenchHorn as u8 == x => GeneralMidi::FrenchHorn,
203            x if GeneralMidi::BrassSection as u8 == x => GeneralMidi::BrassSection,
204            x if GeneralMidi::SynthBrass1 as u8 == x => GeneralMidi::SynthBrass1,
205            x if GeneralMidi::SynthBrass2 as u8 == x => GeneralMidi::SynthBrass2,
206            x if GeneralMidi::SopranoSax as u8 == x => GeneralMidi::SopranoSax,
207            x if GeneralMidi::AltoSax as u8 == x => GeneralMidi::AltoSax,
208            x if GeneralMidi::TenorSax as u8 == x => GeneralMidi::TenorSax,
209            x if GeneralMidi::BaritoneSax as u8 == x => GeneralMidi::BaritoneSax,
210            x if GeneralMidi::Oboe as u8 == x => GeneralMidi::Oboe,
211            x if GeneralMidi::EnglishHorn as u8 == x => GeneralMidi::EnglishHorn,
212            x if GeneralMidi::Bassoon as u8 == x => GeneralMidi::Bassoon,
213            x if GeneralMidi::Clarinet as u8 == x => GeneralMidi::Clarinet,
214            x if GeneralMidi::Piccolo as u8 == x => GeneralMidi::Piccolo,
215            x if GeneralMidi::Flute as u8 == x => GeneralMidi::Flute,
216            x if GeneralMidi::Recorder as u8 == x => GeneralMidi::Recorder,
217            x if GeneralMidi::PanFlute as u8 == x => GeneralMidi::PanFlute,
218            x if GeneralMidi::BlownBottle as u8 == x => GeneralMidi::BlownBottle,
219            x if GeneralMidi::Shakuhachi as u8 == x => GeneralMidi::Shakuhachi,
220            x if GeneralMidi::Whistle as u8 == x => GeneralMidi::Whistle,
221            x if GeneralMidi::Ocarina as u8 == x => GeneralMidi::Ocarina,
222            x if GeneralMidi::Lead1Square as u8 == x => GeneralMidi::Lead1Square,
223            x if GeneralMidi::Lead2Sawtooth as u8 == x => GeneralMidi::Lead2Sawtooth,
224            x if GeneralMidi::Lead3Calliope as u8 == x => GeneralMidi::Lead3Calliope,
225            x if GeneralMidi::Lead4Chiff as u8 == x => GeneralMidi::Lead4Chiff,
226            x if GeneralMidi::Lead5Charang as u8 == x => GeneralMidi::Lead5Charang,
227            x if GeneralMidi::Lead6Voice as u8 == x => GeneralMidi::Lead6Voice,
228            x if GeneralMidi::Lead7Fifths as u8 == x => GeneralMidi::Lead7Fifths,
229            x if GeneralMidi::Lead8BassPlusLead as u8 == x => GeneralMidi::Lead8BassPlusLead,
230            x if GeneralMidi::Pad1Newage as u8 == x => GeneralMidi::Pad1Newage,
231            x if GeneralMidi::Pad2Warm as u8 == x => GeneralMidi::Pad2Warm,
232            x if GeneralMidi::Pad3Polysynth as u8 == x => GeneralMidi::Pad3Polysynth,
233            x if GeneralMidi::Pad4Choir as u8 == x => GeneralMidi::Pad4Choir,
234            x if GeneralMidi::Pad5Bowed as u8 == x => GeneralMidi::Pad5Bowed,
235            x if GeneralMidi::Pad6Metallic as u8 == x => GeneralMidi::Pad6Metallic,
236            x if GeneralMidi::Pad7Halo as u8 == x => GeneralMidi::Pad7Halo,
237            x if GeneralMidi::Pad8Sweep as u8 == x => GeneralMidi::Pad8Sweep,
238            x if GeneralMidi::Fx1Rain as u8 == x => GeneralMidi::Fx1Rain,
239            x if GeneralMidi::Fx2Soundtrack as u8 == x => GeneralMidi::Fx2Soundtrack,
240            x if GeneralMidi::Fx3Crystal as u8 == x => GeneralMidi::Fx3Crystal,
241            x if GeneralMidi::Fx4Atmosphere as u8 == x => GeneralMidi::Fx4Atmosphere,
242            x if GeneralMidi::Fx5Brightness as u8 == x => GeneralMidi::Fx5Brightness,
243            x if GeneralMidi::Fx6Goblins as u8 == x => GeneralMidi::Fx6Goblins,
244            x if GeneralMidi::Fx7Echoes as u8 == x => GeneralMidi::Fx7Echoes,
245            x if GeneralMidi::Fx8SciFi as u8 == x => GeneralMidi::Fx8SciFi,
246            x if GeneralMidi::Sitar as u8 == x => GeneralMidi::Sitar,
247            x if GeneralMidi::Banjo as u8 == x => GeneralMidi::Banjo,
248            x if GeneralMidi::Shamisen as u8 == x => GeneralMidi::Shamisen,
249            x if GeneralMidi::Koto as u8 == x => GeneralMidi::Koto,
250            x if GeneralMidi::Kalimba as u8 == x => GeneralMidi::Kalimba,
251            x if GeneralMidi::Bagpipe as u8 == x => GeneralMidi::Bagpipe,
252            x if GeneralMidi::Fiddle as u8 == x => GeneralMidi::Fiddle,
253            x if GeneralMidi::Shanai as u8 == x => GeneralMidi::Shanai,
254            x if GeneralMidi::TinkleBell as u8 == x => GeneralMidi::TinkleBell,
255            x if GeneralMidi::Agogo as u8 == x => GeneralMidi::Agogo,
256            x if GeneralMidi::SteelDrums as u8 == x => GeneralMidi::SteelDrums,
257            x if GeneralMidi::Woodblock as u8 == x => GeneralMidi::Woodblock,
258            x if GeneralMidi::TaikoDrum as u8 == x => GeneralMidi::TaikoDrum,
259            x if GeneralMidi::MelodicTom as u8 == x => GeneralMidi::MelodicTom,
260            x if GeneralMidi::SynthDrum as u8 == x => GeneralMidi::SynthDrum,
261            x if GeneralMidi::ReverseCymbal as u8 == x => GeneralMidi::ReverseCymbal,
262            x if GeneralMidi::GuitarFretNoise as u8 == x => GeneralMidi::GuitarFretNoise,
263            x if GeneralMidi::BreathNoise as u8 == x => GeneralMidi::BreathNoise,
264            x if GeneralMidi::Seashore as u8 == x => GeneralMidi::Seashore,
265            x if GeneralMidi::BirdTweet as u8 == x => GeneralMidi::BirdTweet,
266            x if GeneralMidi::TelephoneRing as u8 == x => GeneralMidi::TelephoneRing,
267            x if GeneralMidi::Helicopter as u8 == x => GeneralMidi::Helicopter,
268            x if GeneralMidi::Applause as u8 == x => GeneralMidi::Applause,
269            x if GeneralMidi::Gunshot as u8 == x => GeneralMidi::Gunshot,
270            _ => GeneralMidi::default(),
271        }
272    }
273}
274
275impl From<GeneralMidi> for u8 {
276    fn from(gm: GeneralMidi) -> Self {
277        gm as u8
278    }
279}