File size: 29,007 Bytes
6229e10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
#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