Paul Triana
initial commit
6229e10
#pragma once
#include <string>
#include <map>
#include <vector>
#include "../../common/data_structures/track_type.h"
// START OF NAMESPACE
namespace enums {
std::map<midi::GM_TYPE,std::vector<int>> GM_MOD = {
{midi::GM_TYPE::any,{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127}},
{midi::GM_TYPE::piano,{0,1,2,3,4,5,6,7}},
{midi::GM_TYPE::chromatic_perc,{9,10,11,12,13,14,15}},
{midi::GM_TYPE::organ,{16,17,18,19,20,21,22,23}},
{midi::GM_TYPE::guitar,{24,25,26,27,28,29,30,31}},
{midi::GM_TYPE::bass,{32,33,34,35,36,37,38,39}},
{midi::GM_TYPE::strings,{40,41,42,43,44,45,46,47}},
{midi::GM_TYPE::ensemble,{48,49,50,51,52,53,54,55}},
{midi::GM_TYPE::brass,{56,57,58,59,60,61,62,63}},
{midi::GM_TYPE::reed,{64,65,66,67,68,69,70,71}},
{midi::GM_TYPE::pipe,{72,73,74,75,76,77,78,79}},
{midi::GM_TYPE::synth_lead,{80,81,82,83,84,85,86,87}},
{midi::GM_TYPE::synth_pad,{88,89,90,91,92,93,94,95}},
{midi::GM_TYPE::synth_effects,{96,97,98,99,100,101,102,103}},
{midi::GM_TYPE::ethnic,{104,105,106,107,108,109,110,111}},
{midi::GM_TYPE::percussive,{112,113,114,115,116,117,118,119}},
{midi::GM_TYPE::sound_fx,{120,121,122,123,124,125,126,127}},
{midi::GM_TYPE::no_drums,{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127}},
{midi::GM_TYPE::drums,{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127}},
{midi::GM_TYPE::acoustic_grand_piano,{0}},
{midi::GM_TYPE::bright_acoustic_piano,{1}},
{midi::GM_TYPE::electric_grand_piano,{2}},
{midi::GM_TYPE::honky_tonk_piano,{3}},
{midi::GM_TYPE::electric_piano_1,{4}},
{midi::GM_TYPE::electric_piano_2,{5}},
{midi::GM_TYPE::harpsichord,{6}},
{midi::GM_TYPE::clavi,{7}},
{midi::GM_TYPE::celesta,{8}},
{midi::GM_TYPE::glockenspiel,{9}},
{midi::GM_TYPE::music_box,{10}},
{midi::GM_TYPE::vibraphone,{11}},
{midi::GM_TYPE::marimba,{12}},
{midi::GM_TYPE::xylophone,{13}},
{midi::GM_TYPE::tubular_bells,{14}},
{midi::GM_TYPE::dulcimer,{15}},
{midi::GM_TYPE::drawbar_organ,{16}},
{midi::GM_TYPE::percussive_organ,{17}},
{midi::GM_TYPE::rock_organ,{18}},
{midi::GM_TYPE::church_organ,{19}},
{midi::GM_TYPE::reed_organ,{20}},
{midi::GM_TYPE::accordion,{21}},
{midi::GM_TYPE::harmonica,{22}},
{midi::GM_TYPE::tango_accordion,{23}},
{midi::GM_TYPE::acoustic_guitar_nylon,{24}},
{midi::GM_TYPE::acoustic_guitar_steel,{25}},
{midi::GM_TYPE::electric_guitar_jazz,{26}},
{midi::GM_TYPE::electric_guitar_clean,{27}},
{midi::GM_TYPE::electric_guitar_muted,{28}},
{midi::GM_TYPE::overdriven_guitar,{29}},
{midi::GM_TYPE::distortion_guitar,{30}},
{midi::GM_TYPE::guitar_harmonics,{31}},
{midi::GM_TYPE::acoustic_bass,{32}},
{midi::GM_TYPE::electric_bass_finger,{33}},
{midi::GM_TYPE::electric_bass_pick,{34}},
{midi::GM_TYPE::fretless_bass,{35}},
{midi::GM_TYPE::slap_bass_1,{36}},
{midi::GM_TYPE::slap_bass_2,{37}},
{midi::GM_TYPE::synth_bass_1,{38}},
{midi::GM_TYPE::synth_bass_2,{39}},
{midi::GM_TYPE::violin,{40}},
{midi::GM_TYPE::viola,{41}},
{midi::GM_TYPE::cello,{42}},
{midi::GM_TYPE::contrabass,{43}},
{midi::GM_TYPE::tremolo_strings,{44}},
{midi::GM_TYPE::pizzicato_strings,{45}},
{midi::GM_TYPE::orchestral_harp,{46}},
{midi::GM_TYPE::timpani,{47}},
{midi::GM_TYPE::string_ensemble_1,{48}},
{midi::GM_TYPE::string_ensemble_2,{49}},
{midi::GM_TYPE::synth_strings_1,{50}},
{midi::GM_TYPE::synth_strings_2,{51}},
{midi::GM_TYPE::choir_aahs,{52}},
{midi::GM_TYPE::voice_oohs,{53}},
{midi::GM_TYPE::synth_voice,{54}},
{midi::GM_TYPE::orchestra_hit,{55}},
{midi::GM_TYPE::trumpet,{56}},
{midi::GM_TYPE::trombone,{57}},
{midi::GM_TYPE::tuba,{58}},
{midi::GM_TYPE::muted_trumpet,{59}},
{midi::GM_TYPE::french_horn,{60}},
{midi::GM_TYPE::brass_section,{61}},
{midi::GM_TYPE::synth_brass_1,{62}},
{midi::GM_TYPE::synth_brass_2,{63}},
{midi::GM_TYPE::soprano_sax,{64}},
{midi::GM_TYPE::alto_sax,{65}},
{midi::GM_TYPE::tenor_sax,{66}},
{midi::GM_TYPE::baritone_sax,{67}},
{midi::GM_TYPE::oboe,{68}},
{midi::GM_TYPE::english_horn,{69}},
{midi::GM_TYPE::bassoon,{70}},
{midi::GM_TYPE::clarinet,{71}},
{midi::GM_TYPE::piccolo,{72}},
{midi::GM_TYPE::flute,{73}},
{midi::GM_TYPE::recorder,{74}},
{midi::GM_TYPE::pan_flute,{75}},
{midi::GM_TYPE::blown_bottle,{76}},
{midi::GM_TYPE::shakuhachi,{77}},
{midi::GM_TYPE::whistle,{78}},
{midi::GM_TYPE::ocarina,{79}},
{midi::GM_TYPE::lead_1_square,{80}},
{midi::GM_TYPE::lead_2_sawtooth,{81}},
{midi::GM_TYPE::lead_3_calliope,{82}},
{midi::GM_TYPE::lead_4_chiff,{83}},
{midi::GM_TYPE::lead_5_charang,{84}},
{midi::GM_TYPE::lead_6_voice,{85}},
{midi::GM_TYPE::lead_7_fifths,{86}},
{midi::GM_TYPE::lead_8_bass__lead,{87}},
{midi::GM_TYPE::pad_1_new_age,{88}},
{midi::GM_TYPE::pad_2_warm,{89}},
{midi::GM_TYPE::pad_3_polysynth,{90}},
{midi::GM_TYPE::pad_4_choir,{91}},
{midi::GM_TYPE::pad_5_bowed,{92}},
{midi::GM_TYPE::pad_6_metallic,{93}},
{midi::GM_TYPE::pad_7_halo,{94}},
{midi::GM_TYPE::pad_8_sweep,{95}},
{midi::GM_TYPE::fx_1_rain,{96}},
{midi::GM_TYPE::fx_2_soundtrack,{97}},
{midi::GM_TYPE::fx_3_crystal,{98}},
{midi::GM_TYPE::fx_4_atmosphere,{99}},
{midi::GM_TYPE::fx_5_brightness,{100}},
{midi::GM_TYPE::fx_6_goblins,{101}},
{midi::GM_TYPE::fx_7_echoes,{102}},
{midi::GM_TYPE::fx_8_sci_fi,{103}},
{midi::GM_TYPE::sitar,{104}},
{midi::GM_TYPE::banjo,{105}},
{midi::GM_TYPE::shamisen,{106}},
{midi::GM_TYPE::koto,{107}},
{midi::GM_TYPE::kalimba,{108}},
{midi::GM_TYPE::bag_pipe,{109}},
{midi::GM_TYPE::fiddle,{110}},
{midi::GM_TYPE::shanai,{111}},
{midi::GM_TYPE::tinkle_bell,{112}},
{midi::GM_TYPE::agogo,{113}},
{midi::GM_TYPE::steel_drums,{114}},
{midi::GM_TYPE::woodblock,{115}},
{midi::GM_TYPE::taiko_drum,{116}},
{midi::GM_TYPE::melodic_tom,{117}},
{midi::GM_TYPE::synth_drum,{118}},
{midi::GM_TYPE::reverse_cymbal,{119}},
{midi::GM_TYPE::guitar_fret_noise,{120}},
{midi::GM_TYPE::breath_noise,{121}},
{midi::GM_TYPE::seashore,{122}},
{midi::GM_TYPE::bird_tweet,{123}},
{midi::GM_TYPE::telephone_ring,{124}},
{midi::GM_TYPE::helicopter,{125}},
{midi::GM_TYPE::applause,{126}},
{midi::GM_TYPE::gunshot,{127}},
{midi::GM_TYPE::drum_0,{0}},
{midi::GM_TYPE::drum_1,{1}},
{midi::GM_TYPE::drum_2,{2}},
{midi::GM_TYPE::drum_3,{3}},
{midi::GM_TYPE::drum_4,{4}},
{midi::GM_TYPE::drum_5,{5}},
{midi::GM_TYPE::drum_6,{6}},
{midi::GM_TYPE::drum_7,{7}},
{midi::GM_TYPE::drum_8,{8}},
{midi::GM_TYPE::drum_9,{9}},
{midi::GM_TYPE::drum_10,{10}},
{midi::GM_TYPE::drum_11,{11}},
{midi::GM_TYPE::drum_12,{12}},
{midi::GM_TYPE::drum_13,{13}},
{midi::GM_TYPE::drum_14,{14}},
{midi::GM_TYPE::drum_15,{15}},
{midi::GM_TYPE::drum_16,{16}},
{midi::GM_TYPE::drum_17,{17}},
{midi::GM_TYPE::drum_18,{18}},
{midi::GM_TYPE::drum_19,{19}},
{midi::GM_TYPE::drum_20,{20}},
{midi::GM_TYPE::drum_21,{21}},
{midi::GM_TYPE::drum_22,{22}},
{midi::GM_TYPE::drum_23,{23}},
{midi::GM_TYPE::drum_24,{24}},
{midi::GM_TYPE::drum_25,{25}},
{midi::GM_TYPE::drum_26,{26}},
{midi::GM_TYPE::drum_27,{27}},
{midi::GM_TYPE::drum_28,{28}},
{midi::GM_TYPE::drum_29,{29}},
{midi::GM_TYPE::drum_30,{30}},
{midi::GM_TYPE::drum_31,{31}},
{midi::GM_TYPE::drum_32,{32}},
{midi::GM_TYPE::drum_33,{33}},
{midi::GM_TYPE::drum_34,{34}},
{midi::GM_TYPE::drum_35,{35}},
{midi::GM_TYPE::drum_36,{36}},
{midi::GM_TYPE::drum_37,{37}},
{midi::GM_TYPE::drum_38,{38}},
{midi::GM_TYPE::drum_39,{39}},
{midi::GM_TYPE::drum_40,{40}},
{midi::GM_TYPE::drum_41,{41}},
{midi::GM_TYPE::drum_42,{42}},
{midi::GM_TYPE::drum_43,{43}},
{midi::GM_TYPE::drum_44,{44}},
{midi::GM_TYPE::drum_45,{45}},
{midi::GM_TYPE::drum_46,{46}},
{midi::GM_TYPE::drum_47,{47}},
{midi::GM_TYPE::drum_48,{48}},
{midi::GM_TYPE::drum_49,{49}},
{midi::GM_TYPE::drum_50,{50}},
{midi::GM_TYPE::drum_51,{51}},
{midi::GM_TYPE::drum_52,{52}},
{midi::GM_TYPE::drum_53,{53}},
{midi::GM_TYPE::drum_54,{54}},
{midi::GM_TYPE::drum_55,{55}},
{midi::GM_TYPE::drum_56,{56}},
{midi::GM_TYPE::drum_57,{57}},
{midi::GM_TYPE::drum_58,{58}},
{midi::GM_TYPE::drum_59,{59}},
{midi::GM_TYPE::drum_60,{60}},
{midi::GM_TYPE::drum_61,{61}},
{midi::GM_TYPE::drum_62,{62}},
{midi::GM_TYPE::drum_63,{63}},
{midi::GM_TYPE::drum_64,{64}},
{midi::GM_TYPE::drum_65,{65}},
{midi::GM_TYPE::drum_66,{66}},
{midi::GM_TYPE::drum_67,{67}},
{midi::GM_TYPE::drum_68,{68}},
{midi::GM_TYPE::drum_69,{69}},
{midi::GM_TYPE::drum_70,{70}},
{midi::GM_TYPE::drum_71,{71}},
{midi::GM_TYPE::drum_72,{72}},
{midi::GM_TYPE::drum_73,{73}},
{midi::GM_TYPE::drum_74,{74}},
{midi::GM_TYPE::drum_75,{75}},
{midi::GM_TYPE::drum_76,{76}},
{midi::GM_TYPE::drum_77,{77}},
{midi::GM_TYPE::drum_78,{78}},
{midi::GM_TYPE::drum_79,{79}},
{midi::GM_TYPE::drum_80,{80}},
{midi::GM_TYPE::drum_81,{81}},
{midi::GM_TYPE::drum_82,{82}},
{midi::GM_TYPE::drum_83,{83}},
{midi::GM_TYPE::drum_84,{84}},
{midi::GM_TYPE::drum_85,{85}},
{midi::GM_TYPE::drum_86,{86}},
{midi::GM_TYPE::drum_87,{87}},
{midi::GM_TYPE::drum_88,{88}},
{midi::GM_TYPE::drum_89,{89}},
{midi::GM_TYPE::drum_90,{90}},
{midi::GM_TYPE::drum_91,{91}},
{midi::GM_TYPE::drum_92,{92}},
{midi::GM_TYPE::drum_93,{93}},
{midi::GM_TYPE::drum_94,{94}},
{midi::GM_TYPE::drum_95,{95}},
{midi::GM_TYPE::drum_96,{96}},
{midi::GM_TYPE::drum_97,{97}},
{midi::GM_TYPE::drum_98,{98}},
{midi::GM_TYPE::drum_99,{99}},
{midi::GM_TYPE::drum_100,{100}},
{midi::GM_TYPE::drum_101,{101}},
{midi::GM_TYPE::drum_102,{102}},
{midi::GM_TYPE::drum_103,{103}},
{midi::GM_TYPE::drum_104,{104}},
{midi::GM_TYPE::drum_105,{105}},
{midi::GM_TYPE::drum_106,{106}},
{midi::GM_TYPE::drum_107,{107}},
{midi::GM_TYPE::drum_108,{108}},
{midi::GM_TYPE::drum_109,{109}},
{midi::GM_TYPE::drum_110,{110}},
{midi::GM_TYPE::drum_111,{111}},
{midi::GM_TYPE::drum_112,{112}},
{midi::GM_TYPE::drum_113,{113}},
{midi::GM_TYPE::drum_114,{114}},
{midi::GM_TYPE::drum_115,{115}},
{midi::GM_TYPE::drum_116,{116}},
{midi::GM_TYPE::drum_117,{117}},
{midi::GM_TYPE::drum_118,{118}},
{midi::GM_TYPE::drum_119,{119}},
{midi::GM_TYPE::drum_120,{120}},
{midi::GM_TYPE::drum_121,{121}},
{midi::GM_TYPE::drum_122,{122}},
{midi::GM_TYPE::drum_123,{123}},
{midi::GM_TYPE::drum_124,{124}},
{midi::GM_TYPE::drum_125,{125}},
{midi::GM_TYPE::drum_126,{126}},
{midi::GM_TYPE::drum_127,{127}},
};
std::map<int,midi::GM_TYPE> GM_REV = {
{0,midi::GM_TYPE::acoustic_grand_piano},
{1,midi::GM_TYPE::bright_acoustic_piano},
{2,midi::GM_TYPE::electric_grand_piano},
{3,midi::GM_TYPE::honky_tonk_piano},
{4,midi::GM_TYPE::electric_piano_1},
{5,midi::GM_TYPE::electric_piano_2},
{6,midi::GM_TYPE::harpsichord},
{7,midi::GM_TYPE::clavi},
{8,midi::GM_TYPE::celesta},
{9,midi::GM_TYPE::glockenspiel},
{10,midi::GM_TYPE::music_box},
{11,midi::GM_TYPE::vibraphone},
{12,midi::GM_TYPE::marimba},
{13,midi::GM_TYPE::xylophone},
{14,midi::GM_TYPE::tubular_bells},
{15,midi::GM_TYPE::dulcimer},
{16,midi::GM_TYPE::drawbar_organ},
{17,midi::GM_TYPE::percussive_organ},
{18,midi::GM_TYPE::rock_organ},
{19,midi::GM_TYPE::church_organ},
{20,midi::GM_TYPE::reed_organ},
{21,midi::GM_TYPE::accordion},
{22,midi::GM_TYPE::harmonica},
{23,midi::GM_TYPE::tango_accordion},
{24,midi::GM_TYPE::acoustic_guitar_nylon},
{25,midi::GM_TYPE::acoustic_guitar_steel},
{26,midi::GM_TYPE::electric_guitar_jazz},
{27,midi::GM_TYPE::electric_guitar_clean},
{28,midi::GM_TYPE::electric_guitar_muted},
{29,midi::GM_TYPE::overdriven_guitar},
{30,midi::GM_TYPE::distortion_guitar},
{31,midi::GM_TYPE::guitar_harmonics},
{32,midi::GM_TYPE::acoustic_bass},
{33,midi::GM_TYPE::electric_bass_finger},
{34,midi::GM_TYPE::electric_bass_pick},
{35,midi::GM_TYPE::fretless_bass},
{36,midi::GM_TYPE::slap_bass_1},
{37,midi::GM_TYPE::slap_bass_2},
{38,midi::GM_TYPE::synth_bass_1},
{39,midi::GM_TYPE::synth_bass_2},
{40,midi::GM_TYPE::violin},
{41,midi::GM_TYPE::viola},
{42,midi::GM_TYPE::cello},
{43,midi::GM_TYPE::contrabass},
{44,midi::GM_TYPE::tremolo_strings},
{45,midi::GM_TYPE::pizzicato_strings},
{46,midi::GM_TYPE::orchestral_harp},
{47,midi::GM_TYPE::timpani},
{48,midi::GM_TYPE::string_ensemble_1},
{49,midi::GM_TYPE::string_ensemble_2},
{50,midi::GM_TYPE::synth_strings_1},
{51,midi::GM_TYPE::synth_strings_2},
{52,midi::GM_TYPE::choir_aahs},
{53,midi::GM_TYPE::voice_oohs},
{54,midi::GM_TYPE::synth_voice},
{55,midi::GM_TYPE::orchestra_hit},
{56,midi::GM_TYPE::trumpet},
{57,midi::GM_TYPE::trombone},
{58,midi::GM_TYPE::tuba},
{59,midi::GM_TYPE::muted_trumpet},
{60,midi::GM_TYPE::french_horn},
{61,midi::GM_TYPE::brass_section},
{62,midi::GM_TYPE::synth_brass_1},
{63,midi::GM_TYPE::synth_brass_2},
{64,midi::GM_TYPE::soprano_sax},
{65,midi::GM_TYPE::alto_sax},
{66,midi::GM_TYPE::tenor_sax},
{67,midi::GM_TYPE::baritone_sax},
{68,midi::GM_TYPE::oboe},
{69,midi::GM_TYPE::english_horn},
{70,midi::GM_TYPE::bassoon},
{71,midi::GM_TYPE::clarinet},
{72,midi::GM_TYPE::piccolo},
{73,midi::GM_TYPE::flute},
{74,midi::GM_TYPE::recorder},
{75,midi::GM_TYPE::pan_flute},
{76,midi::GM_TYPE::blown_bottle},
{77,midi::GM_TYPE::shakuhachi},
{78,midi::GM_TYPE::whistle},
{79,midi::GM_TYPE::ocarina},
{80,midi::GM_TYPE::lead_1_square},
{81,midi::GM_TYPE::lead_2_sawtooth},
{82,midi::GM_TYPE::lead_3_calliope},
{83,midi::GM_TYPE::lead_4_chiff},
{84,midi::GM_TYPE::lead_5_charang},
{85,midi::GM_TYPE::lead_6_voice},
{86,midi::GM_TYPE::lead_7_fifths},
{87,midi::GM_TYPE::lead_8_bass__lead},
{88,midi::GM_TYPE::pad_1_new_age},
{89,midi::GM_TYPE::pad_2_warm},
{90,midi::GM_TYPE::pad_3_polysynth},
{91,midi::GM_TYPE::pad_4_choir},
{92,midi::GM_TYPE::pad_5_bowed},
{93,midi::GM_TYPE::pad_6_metallic},
{94,midi::GM_TYPE::pad_7_halo},
{95,midi::GM_TYPE::pad_8_sweep},
{96,midi::GM_TYPE::fx_1_rain},
{97,midi::GM_TYPE::fx_2_soundtrack},
{98,midi::GM_TYPE::fx_3_crystal},
{99,midi::GM_TYPE::fx_4_atmosphere},
{100,midi::GM_TYPE::fx_5_brightness},
{101,midi::GM_TYPE::fx_6_goblins},
{102,midi::GM_TYPE::fx_7_echoes},
{103,midi::GM_TYPE::fx_8_sci_fi},
{104,midi::GM_TYPE::sitar},
{105,midi::GM_TYPE::banjo},
{106,midi::GM_TYPE::shamisen},
{107,midi::GM_TYPE::koto},
{108,midi::GM_TYPE::kalimba},
{109,midi::GM_TYPE::bag_pipe},
{110,midi::GM_TYPE::fiddle},
{111,midi::GM_TYPE::shanai},
{112,midi::GM_TYPE::tinkle_bell},
{113,midi::GM_TYPE::agogo},
{114,midi::GM_TYPE::steel_drums},
{115,midi::GM_TYPE::woodblock},
{116,midi::GM_TYPE::taiko_drum},
{117,midi::GM_TYPE::melodic_tom},
{118,midi::GM_TYPE::synth_drum},
{119,midi::GM_TYPE::reverse_cymbal},
{120,midi::GM_TYPE::guitar_fret_noise},
{121,midi::GM_TYPE::breath_noise},
{122,midi::GM_TYPE::seashore},
{123,midi::GM_TYPE::bird_tweet},
{124,midi::GM_TYPE::telephone_ring},
{125,midi::GM_TYPE::helicopter},
{126,midi::GM_TYPE::applause},
{127,midi::GM_TYPE::gunshot},
{128,midi::GM_TYPE::drum_0},
{129,midi::GM_TYPE::drum_1},
{130,midi::GM_TYPE::drum_2},
{131,midi::GM_TYPE::drum_3},
{132,midi::GM_TYPE::drum_4},
{133,midi::GM_TYPE::drum_5},
{134,midi::GM_TYPE::drum_6},
{135,midi::GM_TYPE::drum_7},
{136,midi::GM_TYPE::drum_8},
{137,midi::GM_TYPE::drum_9},
{138,midi::GM_TYPE::drum_10},
{139,midi::GM_TYPE::drum_11},
{140,midi::GM_TYPE::drum_12},
{141,midi::GM_TYPE::drum_13},
{142,midi::GM_TYPE::drum_14},
{143,midi::GM_TYPE::drum_15},
{144,midi::GM_TYPE::drum_16},
{145,midi::GM_TYPE::drum_17},
{146,midi::GM_TYPE::drum_18},
{147,midi::GM_TYPE::drum_19},
{148,midi::GM_TYPE::drum_20},
{149,midi::GM_TYPE::drum_21},
{150,midi::GM_TYPE::drum_22},
{151,midi::GM_TYPE::drum_23},
{152,midi::GM_TYPE::drum_24},
{153,midi::GM_TYPE::drum_25},
{154,midi::GM_TYPE::drum_26},
{155,midi::GM_TYPE::drum_27},
{156,midi::GM_TYPE::drum_28},
{157,midi::GM_TYPE::drum_29},
{158,midi::GM_TYPE::drum_30},
{159,midi::GM_TYPE::drum_31},
{160,midi::GM_TYPE::drum_32},
{161,midi::GM_TYPE::drum_33},
{162,midi::GM_TYPE::drum_34},
{163,midi::GM_TYPE::drum_35},
{164,midi::GM_TYPE::drum_36},
{165,midi::GM_TYPE::drum_37},
{166,midi::GM_TYPE::drum_38},
{167,midi::GM_TYPE::drum_39},
{168,midi::GM_TYPE::drum_40},
{169,midi::GM_TYPE::drum_41},
{170,midi::GM_TYPE::drum_42},
{171,midi::GM_TYPE::drum_43},
{172,midi::GM_TYPE::drum_44},
{173,midi::GM_TYPE::drum_45},
{174,midi::GM_TYPE::drum_46},
{175,midi::GM_TYPE::drum_47},
{176,midi::GM_TYPE::drum_48},
{177,midi::GM_TYPE::drum_49},
{178,midi::GM_TYPE::drum_50},
{179,midi::GM_TYPE::drum_51},
{180,midi::GM_TYPE::drum_52},
{181,midi::GM_TYPE::drum_53},
{182,midi::GM_TYPE::drum_54},
{183,midi::GM_TYPE::drum_55},
{184,midi::GM_TYPE::drum_56},
{185,midi::GM_TYPE::drum_57},
{186,midi::GM_TYPE::drum_58},
{187,midi::GM_TYPE::drum_59},
{188,midi::GM_TYPE::drum_60},
{189,midi::GM_TYPE::drum_61},
{190,midi::GM_TYPE::drum_62},
{191,midi::GM_TYPE::drum_63},
{192,midi::GM_TYPE::drum_64},
{193,midi::GM_TYPE::drum_65},
{194,midi::GM_TYPE::drum_66},
{195,midi::GM_TYPE::drum_67},
{196,midi::GM_TYPE::drum_68},
{197,midi::GM_TYPE::drum_69},
{198,midi::GM_TYPE::drum_70},
{199,midi::GM_TYPE::drum_71},
{200,midi::GM_TYPE::drum_72},
{201,midi::GM_TYPE::drum_73},
{202,midi::GM_TYPE::drum_74},
{203,midi::GM_TYPE::drum_75},
{204,midi::GM_TYPE::drum_76},
{205,midi::GM_TYPE::drum_77},
{206,midi::GM_TYPE::drum_78},
{207,midi::GM_TYPE::drum_79},
{208,midi::GM_TYPE::drum_80},
{209,midi::GM_TYPE::drum_81},
{210,midi::GM_TYPE::drum_82},
{211,midi::GM_TYPE::drum_83},
{212,midi::GM_TYPE::drum_84},
{213,midi::GM_TYPE::drum_85},
{214,midi::GM_TYPE::drum_86},
{215,midi::GM_TYPE::drum_87},
{216,midi::GM_TYPE::drum_88},
{217,midi::GM_TYPE::drum_89},
{218,midi::GM_TYPE::drum_90},
{219,midi::GM_TYPE::drum_91},
{220,midi::GM_TYPE::drum_92},
{221,midi::GM_TYPE::drum_93},
{222,midi::GM_TYPE::drum_94},
{223,midi::GM_TYPE::drum_95},
{224,midi::GM_TYPE::drum_96},
{225,midi::GM_TYPE::drum_97},
{226,midi::GM_TYPE::drum_98},
{227,midi::GM_TYPE::drum_99},
{228,midi::GM_TYPE::drum_100},
{229,midi::GM_TYPE::drum_101},
{230,midi::GM_TYPE::drum_102},
{231,midi::GM_TYPE::drum_103},
{232,midi::GM_TYPE::drum_104},
{233,midi::GM_TYPE::drum_105},
{234,midi::GM_TYPE::drum_106},
{235,midi::GM_TYPE::drum_107},
{236,midi::GM_TYPE::drum_108},
{237,midi::GM_TYPE::drum_109},
{238,midi::GM_TYPE::drum_110},
{239,midi::GM_TYPE::drum_111},
{240,midi::GM_TYPE::drum_112},
{241,midi::GM_TYPE::drum_113},
{242,midi::GM_TYPE::drum_114},
{243,midi::GM_TYPE::drum_115},
{244,midi::GM_TYPE::drum_116},
{245,midi::GM_TYPE::drum_117},
{246,midi::GM_TYPE::drum_118},
{247,midi::GM_TYPE::drum_119},
{248,midi::GM_TYPE::drum_120},
{249,midi::GM_TYPE::drum_121},
{250,midi::GM_TYPE::drum_122},
{251,midi::GM_TYPE::drum_123},
{252,midi::GM_TYPE::drum_124},
{253,midi::GM_TYPE::drum_125},
{254,midi::GM_TYPE::drum_126},
{255,midi::GM_TYPE::drum_127},
};
std::map<midi::GM_TYPE,midi::GM_CATEGORY> gm_inst_to_category = {
{midi::GM_TYPE::acoustic_grand_piano, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::bright_acoustic_piano, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::electric_grand_piano, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::honky_tonk_piano, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::electric_piano_1, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::electric_piano_2, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::harpsichord, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::clavi, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::celesta, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::glockenspiel, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::music_box, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::vibraphone, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::marimba, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::xylophone, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::tubular_bells, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::dulcimer, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::drawbar_organ, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::percussive_organ, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::rock_organ, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::church_organ, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::reed_organ, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::accordion, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::harmonica, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::tango_accordion, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::acoustic_guitar_nylon, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::acoustic_guitar_steel, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::electric_guitar_jazz, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::electric_guitar_clean, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::electric_guitar_muted, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::overdriven_guitar, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::distortion_guitar, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::guitar_harmonics, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::acoustic_bass, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::electric_bass_finger, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::electric_bass_pick, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::fretless_bass, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::slap_bass_1, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::slap_bass_2, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::synth_bass_1, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::synth_bass_2, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::violin, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::viola, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::cello, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::contrabass, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::tremolo_strings, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::pizzicato_strings, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::orchestral_harp, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::timpani, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::string_ensemble_1, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::string_ensemble_2, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::synth_strings_1, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::synth_strings_2, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::choir_aahs, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::voice_oohs, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::synth_voice, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::orchestra_hit, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::trumpet, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::trombone, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::tuba, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::muted_trumpet, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::french_horn, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::brass_section, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::synth_brass_1, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::synth_brass_2, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::soprano_sax, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::alto_sax, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::tenor_sax, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::baritone_sax, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::oboe, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::english_horn, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::bassoon, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::clarinet, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::piccolo, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::flute, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::recorder, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::pan_flute, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::blown_bottle, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::shakuhachi, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::whistle, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::ocarina, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::lead_1_square, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::lead_2_sawtooth, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::lead_3_calliope, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::lead_4_chiff, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::lead_5_charang, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::lead_6_voice, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::lead_7_fifths, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::lead_8_bass__lead, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::pad_1_new_age, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::pad_2_warm, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::pad_3_polysynth, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::pad_4_choir, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::pad_5_bowed, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::pad_6_metallic, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::pad_7_halo, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::pad_8_sweep, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::fx_1_rain, midi::GM_CATEGORY_SOUND_FX},
{midi::GM_TYPE::fx_2_soundtrack, midi::GM_CATEGORY_SOUND_FX},
{midi::GM_TYPE::fx_3_crystal, midi::GM_CATEGORY_SOUND_FX},
{midi::GM_TYPE::fx_4_atmosphere, midi::GM_CATEGORY_SOUND_FX},
{midi::GM_TYPE::fx_5_brightness, midi::GM_CATEGORY_SOUND_FX},
{midi::GM_TYPE::fx_6_goblins, midi::GM_CATEGORY_SOUND_FX},
{midi::GM_TYPE::fx_7_echoes, midi::GM_CATEGORY_SOUND_FX},
{midi::GM_TYPE::fx_8_sci_fi, midi::GM_CATEGORY_SOUND_FX},
{midi::GM_TYPE::sitar, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::banjo, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::shamisen, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::koto, midi::GM_CATEGORY_POLY},
{midi::GM_TYPE::kalimba, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::bag_pipe, midi::GM_CATEGORY_MONO}, // technically two tones?
{midi::GM_TYPE::fiddle, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::shanai, midi::GM_CATEGORY_MONO},
{midi::GM_TYPE::tinkle_bell, midi::GM_CATEGORY_PERC},
{midi::GM_TYPE::agogo, midi::GM_CATEGORY_PERC},
{midi::GM_TYPE::steel_drums, midi::GM_CATEGORY_PERC},
{midi::GM_TYPE::woodblock, midi::GM_CATEGORY_PERC},
{midi::GM_TYPE::taiko_drum, midi::GM_CATEGORY_PERC},
{midi::GM_TYPE::melodic_tom, midi::GM_CATEGORY_PERC},
{midi::GM_TYPE::synth_drum, midi::GM_CATEGORY_PERC},
{midi::GM_TYPE::reverse_cymbal, midi::GM_CATEGORY_PERC},
{midi::GM_TYPE::guitar_fret_noise, midi::GM_CATEGORY_SOUND_FX},
{midi::GM_TYPE::breath_noise, midi::GM_CATEGORY_SOUND_FX},
{midi::GM_TYPE::seashore, midi::GM_CATEGORY_SOUND_FX},
{midi::GM_TYPE::bird_tweet, midi::GM_CATEGORY_SOUND_FX},
{midi::GM_TYPE::telephone_ring, midi::GM_CATEGORY_SOUND_FX},
{midi::GM_TYPE::helicopter, midi::GM_CATEGORY_SOUND_FX},
{midi::GM_TYPE::applause, midi::GM_CATEGORY_SOUND_FX},
{midi::GM_TYPE::gunshot, midi::GM_CATEGORY_SOUND_FX}
};
std::vector<std::string> get_instruments_by_category(std::string category) {
std::vector<std::string> result;
const google::protobuf::EnumDescriptor *descriptor = midi::GM_TYPE_descriptor();
const google::protobuf::EnumDescriptor *category_descriptor = midi::GM_CATEGORY_descriptor();
auto value = category_descriptor->FindValueByName(category);
if (value == NULL) {
return result;
}
for (auto kv : gm_inst_to_category) {
if (kv.second == value->number()) {
result.push_back( descriptor->FindValueByNumber(kv.first)->name() );
}
}
return result;
}
std::pair<int,std::string> get_instrument_and_track_type_from_gm_inst(std::string gm_inst) {
const google::protobuf::EnumDescriptor *descriptor = midi::GM_TYPE_descriptor();
auto value = descriptor->FindValueByName(gm_inst);
if (value == NULL) {
throw std::runtime_error("Invalid GM instrument name");
}
int instrument_number = GM_MOD[static_cast<midi::GM_TYPE>(value->number())][0];
return std::make_pair(instrument_number, instrument_number < 128 ? "STANDARD_TRACK" : "STANDARD_DRUM_TRACK");
}
}
// END OF NAMESPACE