-
Notifications
You must be signed in to change notification settings - Fork 1
/
generalmidi.h
459 lines (442 loc) · 33.2 KB
/
generalmidi.h
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
/////////////////////////////////////////////////////////////////////////////
// Name: generalmidi.h
// Purpose: General MIDI macros, constants and functions
// Author: Brad Larsen
// Modified by:
// Created: Dec 9, 2004
// RCS-ID:
// Copyright: (c) Brad Larsen
// License: wxWindows license
/////////////////////////////////////////////////////////////////////////////
#ifndef __GENERALMIDI_H__
#define __GENERALMIDI_H__
// Macros
// MIDI Duration constants
const wxUint32 MIDI_WHOLE = 2880;
const wxUint32 MIDI_HALF_DOTTED = 2160;
const wxUint32 MIDI_HALF = 1440;
const wxUint32 MIDI_QUARTER_DOTTED = 1080;
const wxUint32 MIDI_QUARTER = 720;
const wxUint32 MIDI_8TH_DOTTED = 540;
const wxUint32 MIDI_8TH = 360;
const wxUint32 MIDI_16TH_DOTTED = 270;
const wxUint32 MIDI_16TH = 180;
const wxUint32 MIDI_32ND_DOTTED = 120;
const wxUint32 MIDI_32ND = 90;
const wxUint32 MIDI_64TH = 45;
const wxUint32 MIDI_PPQN = MIDI_QUARTER; // MIDI PPQN = amount of "MIDI time" per quarter note
// MIDI Channel constants
const wxByte NUM_MIDI_CHANNELS_PER_PORT = 16; ///< Number of MIDI channels per port
const wxByte FIRST_MIDI_CHANNEL = 0; ///< First MIDI channel
const wxByte LAST_MIDI_CHANNEL = 15; ///< Last MIDI channel
const wxByte MIN_MIDI_CHANNEL_VOLUME = 0; ///< Minimum volume level for a MIDI channel
const wxByte MAX_MIDI_CHANNEL_VOLUME = 0x7f; ///< Maximum volume level for a MIDI channel
const wxByte MIN_MIDI_CHANNEL_EFFECT_LEVEL = 0; ///< Miniumum level for channel effects (chorus, reverb, etc.)
const wxByte MAX_MIDI_CHANNEL_EFFECT_LEVEL = 0x7f; ///< Maximum level for channel effects (chorus, reverb, etc.)
// MIDI Note constants
const wxByte NUM_MIDI_NOTES = 128; ///< Number of allowable notes
const wxByte MIN_MIDI_NOTE = 0; ///< Lowest note = C-1
const wxByte MAX_MIDI_NOTE = 127; ///< Highest note = G9
const wxByte MIDI_NOTE_KEY_C = 0;
const wxByte MIDI_NOTE_KEY_CSHARP = 1;
const wxByte MIDI_NOTE_KEY_DFLAT = 1;
const wxByte MIDI_NOTE_KEY_D = 2;
const wxByte MIDI_NOTE_KEY_DSHARP = 3;
const wxByte MIDI_NOTE_KEY_EFLAT = 3;
const wxByte MIDI_NOTE_KEY_E = 4;
const wxByte MIDI_NOTE_KEY_F = 5;
const wxByte MIDI_NOTE_KEY_FSHARP = 6;
const wxByte MIDI_NOTE_KEY_GFLAT = 6;
const wxByte MIDI_NOTE_KEY_G = 7;
const wxByte MIDI_NOTE_KEY_GSHARP = 8;
const wxByte MIDI_NOTE_KEY_AFLAT = 8;
const wxByte MIDI_NOTE_KEY_A = 9;
const wxByte MIDI_NOTE_KEY_ASHARP = 10;
const wxByte MIDI_NOTE_KEY_BFLAT = 10;
const wxByte MIDI_NOTE_KEY_B = 11;
const wxByte MIN_MIDI_NOTE_KEY = MIDI_NOTE_KEY_C;
const wxByte MAX_MIDI_NOTE_KEY = MIDI_NOTE_KEY_B;
const wxByte MIDI_NOTE_CN1 = 0;
const wxByte MIDI_NOTE_CSHARPN1 = 1;
const wxByte MIDI_NOTE_DFLATN1 = 1;
const wxByte MIDI_NOTE_DN1 = 2;
const wxByte MIDI_NOTE_DSHARPN1 = 3;
const wxByte MIDI_NOTE_EFLATN1 = 3;
const wxByte MIDI_NOTE_EN1 = 4;
const wxByte MIDI_NOTE_FN1 = 5;
const wxByte MIDI_NOTE_FSHARPN1 = 6;
const wxByte MIDI_NOTE_GFLATN1 = 6;
const wxByte MIDI_NOTE_GN1 = 7;
const wxByte MIDI_NOTE_GSHARPN1 = 8;
const wxByte MIDI_NOTE_AFLATN1 = 8;
const wxByte MIDI_NOTE_AN1 = 9;
const wxByte MIDI_NOTE_ASHARPN1 = 10;
const wxByte MIDI_NOTE_BFLATN1 = 10;
const wxByte MIDI_NOTE_BN1 = 11;
const wxByte MIDI_NOTE_C0 = 12;
const wxByte MIDI_NOTE_CSHARP0 = 13;
const wxByte MIDI_NOTE_DFLAT0 = 13;
const wxByte MIDI_NOTE_D0 = 14;
const wxByte MIDI_NOTE_DSHARP0 = 15;
const wxByte MIDI_NOTE_EFLAT0 = 15;
const wxByte MIDI_NOTE_E0 = 16;
const wxByte MIDI_NOTE_F0 = 17;
const wxByte MIDI_NOTE_FSHARP0 = 18;
const wxByte MIDI_NOTE_GFLAT0 = 18;
const wxByte MIDI_NOTE_G0 = 19;
const wxByte MIDI_NOTE_GSHARP0 = 20;
const wxByte MIDI_NOTE_AFLAT0 = 20;
const wxByte MIDI_NOTE_A0 = 21;
const wxByte MIDI_NOTE_ASHARP0 = 22;
const wxByte MIDI_NOTE_BFLAT0 = 22;
const wxByte MIDI_NOTE_B0 = 23;
const wxByte MIDI_NOTE_C1 = 24;
const wxByte MIDI_NOTE_CSHARP1 = 25;
const wxByte MIDI_NOTE_DFLAT1 = 25;
const wxByte MIDI_NOTE_D1 = 26;
const wxByte MIDI_NOTE_DSHARP1 = 27;
const wxByte MIDI_NOTE_EFLAT1 = 27;
const wxByte MIDI_NOTE_E1 = 28;
const wxByte MIDI_NOTE_F1 = 29;
const wxByte MIDI_NOTE_FSHARP1 = 30;
const wxByte MIDI_NOTE_GFLAT1 = 30;
const wxByte MIDI_NOTE_G1 = 31;
const wxByte MIDI_NOTE_GSHARP1 = 32;
const wxByte MIDI_NOTE_AFLAT1 = 32;
const wxByte MIDI_NOTE_A1 = 33;
const wxByte MIDI_NOTE_ASHARP1 = 34;
const wxByte MIDI_NOTE_BFLAT1 = 34;
const wxByte MIDI_NOTE_B1 = 35;
const wxByte MIDI_NOTE_C2 = 36;
const wxByte MIDI_NOTE_CSHARP2 = 37;
const wxByte MIDI_NOTE_DFLAT2 = 37;
const wxByte MIDI_NOTE_D2 = 38;
const wxByte MIDI_NOTE_DSHARP2 = 39;
const wxByte MIDI_NOTE_EFLAT2 = 39;
const wxByte MIDI_NOTE_E2 = 40;
const wxByte MIDI_NOTE_F2 = 41;
const wxByte MIDI_NOTE_FSHARP2 = 42;
const wxByte MIDI_NOTE_GFLAT2 = 42;
const wxByte MIDI_NOTE_G2 = 43;
const wxByte MIDI_NOTE_GSHARP2 = 44;
const wxByte MIDI_NOTE_AFLAT2 = 44;
const wxByte MIDI_NOTE_A2 = 45;
const wxByte MIDI_NOTE_ASHARP2 = 46;
const wxByte MIDI_NOTE_BFLAT2 = 46;
const wxByte MIDI_NOTE_B2 = 47;
const wxByte MIDI_NOTE_C3 = 48;
const wxByte MIDI_NOTE_CSHARP3 = 49;
const wxByte MIDI_NOTE_DFLAT3 = 49;
const wxByte MIDI_NOTE_D3 = 50;
const wxByte MIDI_NOTE_DSHARP3 = 51;
const wxByte MIDI_NOTE_EFLAT3 = 51;
const wxByte MIDI_NOTE_E3 = 52;
const wxByte MIDI_NOTE_F3 = 53;
const wxByte MIDI_NOTE_FSHARP3 = 54;
const wxByte MIDI_NOTE_GFLAT3 = 54;
const wxByte MIDI_NOTE_G3 = 55;
const wxByte MIDI_NOTE_GSHARP3 = 56;
const wxByte MIDI_NOTE_AFLAT3 = 56;
const wxByte MIDI_NOTE_A3 = 57;
const wxByte MIDI_NOTE_ASHARP3 = 58;
const wxByte MIDI_NOTE_BFLAT3 = 58;
const wxByte MIDI_NOTE_B3 = 59;
const wxByte MIDI_NOTE_C4 = 60;
const wxByte MIDI_NOTE_MIDDLE_C = MIDI_NOTE_C4;
const wxByte MIDI_NOTE_CSHARP4 = 61;
const wxByte MIDI_NOTE_DFLAT4 = 61;
const wxByte MIDI_NOTE_D4 = 62;
const wxByte MIDI_NOTE_DSHARP4 = 63;
const wxByte MIDI_NOTE_EFLAT4 = 63;
const wxByte MIDI_NOTE_E4 = 64;
const wxByte MIDI_NOTE_F4 = 65;
const wxByte MIDI_NOTE_FSHARP4 = 66;
const wxByte MIDI_NOTE_GFLAT4 = 66;
const wxByte MIDI_NOTE_G4 = 67;
const wxByte MIDI_NOTE_GSHARP4 = 68;
const wxByte MIDI_NOTE_AFLAT4 = 68;
const wxByte MIDI_NOTE_A4 = 69;
const wxByte MIDI_NOTE_ASHARP4 = 70;
const wxByte MIDI_NOTE_BFLAT4 = 70;
const wxByte MIDI_NOTE_B4 = 71;
const wxByte MIDI_NOTE_C5 = 72;
const wxByte MIDI_NOTE_CSHARP5 = 73;
const wxByte MIDI_NOTE_DFLAT5 = 73;
const wxByte MIDI_NOTE_D5 = 74;
const wxByte MIDI_NOTE_DSHARP5 = 75;
const wxByte MIDI_NOTE_EFLAT5 = 75;
const wxByte MIDI_NOTE_E5 = 76;
const wxByte MIDI_NOTE_F5 = 77;
const wxByte MIDI_NOTE_FSHARP5 = 78;
const wxByte MIDI_NOTE_GFLAT5 = 78;
const wxByte MIDI_NOTE_G5 = 79;
const wxByte MIDI_NOTE_GSHARP5 = 80;
const wxByte MIDI_NOTE_AFLAT5 = 80;
const wxByte MIDI_NOTE_A5 = 81;
const wxByte MIDI_NOTE_ASHARP5 = 82;
const wxByte MIDI_NOTE_BFLAT5 = 82;
const wxByte MIDI_NOTE_B5 = 83;
const wxByte MIDI_NOTE_C6 = 84;
const wxByte MIDI_NOTE_CSHARP6 = 85;
const wxByte MIDI_NOTE_DFLAT6 = 85;
const wxByte MIDI_NOTE_D6 = 86;
const wxByte MIDI_NOTE_DSHARP6 = 87;
const wxByte MIDI_NOTE_EFLAT6 = 87;
const wxByte MIDI_NOTE_E6 = 88;
const wxByte MIDI_NOTE_F6 = 89;
const wxByte MIDI_NOTE_FSHARP6 = 90;
const wxByte MIDI_NOTE_GFLAT6 = 90;
const wxByte MIDI_NOTE_G6 = 91;
const wxByte MIDI_NOTE_GSHARP6 = 92;
const wxByte MIDI_NOTE_AFLAT6 = 92;
const wxByte MIDI_NOTE_A6 = 93;
const wxByte MIDI_NOTE_ASHARP6 = 94;
const wxByte MIDI_NOTE_BFLAT6 = 94;
const wxByte MIDI_NOTE_B6 = 95;
const wxByte MIDI_NOTE_C7 = 96;
const wxByte MIDI_NOTE_CSHARP7 = 97;
const wxByte MIDI_NOTE_DFLAT7 = 97;
const wxByte MIDI_NOTE_D7 = 98;
const wxByte MIDI_NOTE_DSHARP7 = 99;
const wxByte MIDI_NOTE_EFLAT7 = 99;
const wxByte MIDI_NOTE_E7 = 100;
const wxByte MIDI_NOTE_F7 = 101;
const wxByte MIDI_NOTE_FSHARP7 = 102;
const wxByte MIDI_NOTE_GFLAT7 = 102;
const wxByte MIDI_NOTE_G7 = 103;
const wxByte MIDI_NOTE_GSHARP7 = 104;
const wxByte MIDI_NOTE_AFLAT7 = 104;
const wxByte MIDI_NOTE_A7 = 105;
const wxByte MIDI_NOTE_ASHARP7 = 106;
const wxByte MIDI_NOTE_BFLAT7 = 106;
const wxByte MIDI_NOTE_B7 = 107;
const wxByte MIDI_NOTE_C8 = 108;
const wxByte MIDI_NOTE_CSHARP8 = 109;
const wxByte MIDI_NOTE_DFLAT8 = 109;
const wxByte MIDI_NOTE_D8 = 110;
const wxByte MIDI_NOTE_DSHARP8 = 111;
const wxByte MIDI_NOTE_EFLAT8 = 111;
const wxByte MIDI_NOTE_E8 = 112;
const wxByte MIDI_NOTE_F8 = 113;
const wxByte MIDI_NOTE_FSHARP8 = 114;
const wxByte MIDI_NOTE_GFLAT8 = 114;
const wxByte MIDI_NOTE_G8 = 115;
const wxByte MIDI_NOTE_GSHARP8 = 116;
const wxByte MIDI_NOTE_AFLAT8 = 116;
const wxByte MIDI_NOTE_A8 = 117;
const wxByte MIDI_NOTE_ASHARP8 = 118;
const wxByte MIDI_NOTE_BFLAT8 = 118;
const wxByte MIDI_NOTE_B8 = 119;
const wxByte MIDI_NOTE_C9 = 120;
const wxByte MIDI_NOTE_CSHARP9 = 121;
const wxByte MIDI_NOTE_DFLAT9 = 121;
const wxByte MIDI_NOTE_D9 = 122;
const wxByte MIDI_NOTE_DSHARP9 = 123;
const wxByte MIDI_NOTE_EFLAT9 = 123;
const wxByte MIDI_NOTE_E9 = 124;
const wxByte MIDI_NOTE_F9 = 125;
const wxByte MIDI_NOTE_FSHARP9 = 126;
const wxByte MIDI_NOTE_GFLAT9 = 126;
const wxByte MIDI_NOTE_G9 = 127;
const wxByte MIN_MIDI_NOTE_VOLUME = 0; ///< Minimum volume level for a MIDI note
const wxByte MAX_MIDI_NOTE_VOLUME = 0x7f; ///< Maximum volume level for a MIDI note
// MIDI Preset constants
const wxByte NUM_MIDI_PRESETS = 128;
const wxByte MIDI_PRESET_ACOUSTIC_GRAND = 0;
const wxByte MIDI_PRESET_BRIGHT_ACOUSTIC = 1;
const wxByte MIDI_PRESET_ELECTRIC_GRAND = 2;
const wxByte MIDI_PRESET_HONKY_TONK = 3;
const wxByte MIDI_PRESET_ELECTRIC_PIANO1 = 4;
const wxByte MIDI_PRESET_ELECTRIC_PIANO2 = 5;
const wxByte MIDI_PRESET_HARPSICHORD = 6;
const wxByte MIDI_PRESET_CLAV = 7;
const wxByte MIDI_PRESET_CELESTA = 8;
const wxByte MIDI_PRESET_GLOCKENSPIEL = 9;
const wxByte MIDI_PRESET_MUSIC_BOX = 10;
const wxByte MIDI_PRESET_VIBRAPHONE = 11;
const wxByte MIDI_PRESET_MARIMBA = 12;
const wxByte MIDI_PRESET_XYLOPHONE = 13;
const wxByte MIDI_PRESET_TUBULAR_BELLS = 14;
const wxByte MIDI_PRESET_DULCIMER = 15;
const wxByte MIDI_PRESET_DRAWBAR_ORGAN = 16;
const wxByte MIDI_PRESET_PERCUSSIVE_ORGAN = 17;
const wxByte MIDI_PRESET_ROCK_ORGAN = 18;
const wxByte MIDI_PRESET_CHURCH_ORGAN = 19;
const wxByte MIDI_PRESET_REED_ORGAN = 20;
const wxByte MIDI_PRESET_ACCORDIAN = 21;
const wxByte MIDI_PRESET_HARMONICA = 22;
const wxByte MIDI_PRESET_TANGO_ACCORDIAN = 23;
const wxByte MIDI_PRESET_ACOUSTIC_GUITAR_NYLON = 24;
const wxByte MIDI_PRESET_ACOUSTIC_GUITAR_STEEL = 25;
const wxByte MIDI_PRESET_ELECTRIC_GUITAR_JAZZ = 26;
const wxByte MIDI_PRESET_ELECTRIC_GUITAR_CLEAN = 27;
const wxByte MIDI_PRESET_ELECTRIC_GUITAR_MUTED = 28;
const wxByte MIDI_PRESET_OVERDRIVEN_GUITAR = 29;
const wxByte MIDI_PRESET_DISTORTION_GUITAR = 30;
const wxByte MIDI_PRESET_GUITAR_HARMONICS = 31;
const wxByte MIDI_PRESET_ACOUSTIC_BASS = 32;
const wxByte MIDI_PRESET_ELECTRIC_BASS_FINGER = 33;
const wxByte MIDI_PRESET_ELECTRIC_BASS_PICK = 34;
const wxByte MIDI_PRESET_FRETLESS_BASS = 35;
const wxByte MIDI_PRESET_SLAP_BASS1 = 36;
const wxByte MIDI_PRESET_SLAP_BASS2 = 37;
const wxByte MIDI_PRESET_SYNTH_BASS1 = 38;
const wxByte MIDI_PRESET_SYNTH_BASS2 = 39;
const wxByte MIDI_PRESET_VIOLIN = 40;
const wxByte MIDI_PRESET_VIOLA = 41;
const wxByte MIDI_PRESET_CELLO = 42;
const wxByte MIDI_PRESET_CONTRABASS = 43;
const wxByte MIDI_PRESET_TREMOLO_STRINGS = 44;
const wxByte MIDI_PRESET_PIZZICATO_STRINGS = 45;
const wxByte MIDI_PRESET_ORCHESTRAL_STRINGS = 46;
const wxByte MIDI_PRESET_TIMPANI = 47;
const wxByte MIDI_PRESET_STRING_ENSEMBLE1 = 48;
const wxByte MIDI_PRESET_STRING_ENSEMBLE2 = 49;
const wxByte MIDI_PRESET_SYNTHSTRINGS1 = 50;
const wxByte MIDI_PRESET_SYNTHSTRINGS2 = 51;
const wxByte MIDI_PRESET_CHOIR_AAHS = 52;
const wxByte MIDI_PRESET_VOICE_OOHS = 53;
const wxByte MIDI_PRESET_SYNTH_VOICE = 54;
const wxByte MIDI_PRESET_ORCHESTRA_HIT = 55;
const wxByte MIDI_PRESET_TRUMPET = 56;
const wxByte MIDI_PRESET_TROMBONE = 57;
const wxByte MIDI_PRESET_TUBA = 58;
const wxByte MIDI_PRESET_MUTED_TRUMPET = 59;
const wxByte MIDI_PRESET_FRENCH_HORN = 60;
const wxByte MIDI_PRESET_BRASS_SECTION = 61;
const wxByte MIDI_PRESET_SYNTHBRASS1 = 62;
const wxByte MIDI_PRESET_SYNTHBRASS2 = 63;
const wxByte MIDI_PRESET_SOPRANO_SAX = 64;
const wxByte MIDI_PRESET_ALTO_SAX = 65;
const wxByte MIDI_PRESET_TENOR_SAX = 66;
const wxByte MIDI_PRESET_BARITONE_SAX = 67;
const wxByte MIDI_PRESET_OBOE = 68;
const wxByte MIDI_PRESET_ENGLISH_HORN = 69;
const wxByte MIDI_PRESET_BASSOON = 70;
const wxByte MIDI_PRESET_CLARINET = 71;
const wxByte MIDI_PRESET_PICCOLO = 72;
const wxByte MIDI_PRESET_FLUTE = 73;
const wxByte MIDI_PRESET_RECORDER = 74;
const wxByte MIDI_PRESET_PAN_FLUTE = 75;
const wxByte MIDI_PRESET_BLOWN_BOTTLE = 76;
const wxByte MIDI_PRESET_SKAKUHACHI = 77;
const wxByte MIDI_PRESET_WHISTLE = 78;
const wxByte MIDI_PRESET_OCARINA = 79;
const wxByte MIDI_PRESET_LEAD1_SQUARE = 80;
const wxByte MIDI_PRESET_LEAD2_SAWTOOTH = 81;
const wxByte MIDI_PRESET_LEAD3_CALLIOPE = 82;
const wxByte MIDI_PRESET_LEAD4_CHIFF = 83;
const wxByte MIDI_PRESET_LEAD5_CHARANG = 84;
const wxByte MIDI_PRESET_LEAD6_VOICE = 85;
const wxByte MIDI_PRESET_LEAD7_FIFTHS = 86;
const wxByte MIDI_PRESET_LEAD8_BASSLEAD = 87;
const wxByte MIDI_PRESET_PAD1_NEWAGE = 88;
const wxByte MIDI_PRESET_PAD2_WARM = 89;
const wxByte MIDI_PRESET_PAD3_POLYSYNTH = 90;
const wxByte MIDI_PRESET_PAD4_CHOIR = 91;
const wxByte MIDI_PRESET_PAD5_BOWED = 92;
const wxByte MIDI_PRESET_PAD6_METALLIC = 93;
const wxByte MIDI_PRESET_PAD7_HALO = 94;
const wxByte MIDI_PRESET_PAD8_SWEEP = 95;
const wxByte MIDI_PRESET_FX1_RAIN = 96;
const wxByte MIDI_PRESET_FX2_SOUNDTRACK = 97;
const wxByte MIDI_PRESET_FX3_CRYSTAL = 98;
const wxByte MIDI_PRESET_FX4_ATMOSPHERE = 99;
const wxByte MIDI_PRESET_FX5_BRIGHTNESS = 100;
const wxByte MIDI_PRESET_FX6_GOBLINS = 101;
const wxByte MIDI_PRESET_FX7_ECHOES = 102;
const wxByte MIDI_PRESET_FX8_SCIFI = 103;
const wxByte MIDI_PRESET_SITAR = 104;
const wxByte MIDI_PRESET_BANJO = 105;
const wxByte MIDI_PRESET_SHAMISEN = 106;
const wxByte MIDI_PRESET_KOTO = 107;
const wxByte MIDI_PRESET_KALIMBA = 108;
const wxByte MIDI_PRESET_BAGPIPE = 109;
const wxByte MIDI_PRESET_FIDDLE = 110;
const wxByte MIDI_PRESET_SHANAI = 111;
const wxByte MIDI_PRESET_TINKLE_BELL = 112;
const wxByte MIDI_PRESET_AGOGO = 113;
const wxByte MIDI_PRESET_STEEL_DRUMS = 114;
const wxByte MIDI_PRESET_WOODBLOCK = 115;
const wxByte MIDI_PRESET_TAIKO_DRUM = 116;
const wxByte MIDI_PRESET_MELODIC_TOM = 117;
const wxByte MIDI_PRESET_SYNTH_DRUM = 118;
const wxByte MIDI_PRESET_REVERSE_CYMBAL = 119;
const wxByte MIDI_PRESET_GUITAR_FRET_NOISE = 120;
const wxByte MIDI_PRESET_BREATH_NOISE = 121;
const wxByte MIDI_PRESET_SEASHORE = 122;
const wxByte MIDI_PRESET_BIRD_TWEET = 123;
const wxByte MIDI_PRESET_TELEPHONE_RING = 124;
const wxByte MIDI_PRESET_HELICOPTER = 125;
const wxByte MIDI_PRESET_APPLAUSE = 126;
const wxByte MIDI_PRESET_GUNSHOT = 127;
const wxByte FIRST_MIDI_PRESET = MIDI_PRESET_ACOUSTIC_GRAND;
const wxByte LAST_MIDI_PRESET = MIDI_PRESET_GUNSHOT;
// Percussion Sounds constants
const wxByte NUM_MIDI_PERCUSSION_PRESETS = 47;
const wxByte MIDI_PERCUSSION_PRESET_ACOUSTIC_BASS_DRUM = 0;
const wxByte MIDI_PERCUSSION_PRESET_BASS_DRUM1 = 1;
const wxByte MIDI_PERCUSSION_PRESET_SIDE_STICK = 2;
const wxByte MIDI_PERCUSSION_PRESET_ACOUSTIC_SNARE = 3;
const wxByte MIDI_PERCUSSION_PRESET_HAND_CLAP = 4;
const wxByte MIDI_PERCUSSION_PRESET_ELECTRIC_SNARE = 5;
const wxByte MIDI_PERCUSSION_PRESET_LOW_FLOOR_TOM = 6;
const wxByte MIDI_PERCUSSION_PRESET_CLOSED_HI_HAT = 7;
const wxByte MIDI_PERCUSSION_PRESET_HIGH_FLOOR_TOM = 8;
const wxByte MIDI_PERCUSSION_PRESET_PEDAL_HI_HAT = 9;
const wxByte MIDI_PERCUSSION_PRESET_LOW_TOM = 10;
const wxByte MIDI_PERCUSSION_PRESET_OPEN_HI_HAT = 11;
const wxByte MIDI_PERCUSSION_PRESET_LOW_MID_TOM = 12;
const wxByte MIDI_PERCUSSION_PRESET_HI_MID_TOM = 13;
const wxByte MIDI_PERCUSSION_PRESET_CRASH_CYMBAL1 = 14;
const wxByte MIDI_PERCUSSION_PRESET_HIGH_TOM = 15;
const wxByte MIDI_PERCUSSION_PRESET_RIDE_CYMBAL1 = 16;
const wxByte MIDI_PERCUSSION_PRESET_CHINESE_CYMBAL = 17;
const wxByte MIDI_PERCUSSION_PRESET_RIDE_BELL = 18;
const wxByte MIDI_PERCUSSION_PRESET_TAMBOURINE = 19;
const wxByte MIDI_PERCUSSION_PRESET_SPLASH_CYMBAL = 20;
const wxByte MIDI_PERCUSSION_PRESET_COWBELL = 21;
const wxByte MIDI_PERCUSSION_PRESET_CRASH_CYMBAL2 = 22;
const wxByte MIDI_PERCUSSION_PRESET_VIBRASLAP = 23;
const wxByte MIDI_PERCUSSION_PRESET_RIDE_CYMBAL2 = 24;
const wxByte MIDI_PERCUSSION_PRESET_HI_BONGO = 25;
const wxByte MIDI_PERCUSSION_PRESET_LOW_BONGO = 26;
const wxByte MIDI_PERCUSSION_PRESET_MUTE_HI_CONGA = 27;
const wxByte MIDI_PERCUSSION_PRESET_OPEN_HI_CONGA = 28;
const wxByte MIDI_PERCUSSION_PRESET_LOW_CONGA = 29;
const wxByte MIDI_PERCUSSION_PRESET_HIGH_TIMBALE = 30;
const wxByte MIDI_PERCUSSION_PRESET_LOW_TIMBALE = 31;
const wxByte MIDI_PERCUSSION_PRESET_HIGH_AGOGO = 32;
const wxByte MIDI_PERCUSSION_PRESET_LOW_AGOGO = 33;
const wxByte MIDI_PERCUSSION_PRESET_CABASA = 34;
const wxByte MIDI_PERCUSSION_PRESET_MARACAS = 35;
const wxByte MIDI_PERCUSSION_PRESET_SHORT_WHISTLE = 36;
const wxByte MIDI_PERCUSSION_PRESET_LONG_WHISTLE = 37;
const wxByte MIDI_PERCUSSION_PRESET_SHORT_GUIRO = 38;
const wxByte MIDI_PERCUSSION_PRESET_LONG_GUIRO = 39;
const wxByte MIDI_PERCUSSION_PRESET_CLAVES = 40;
const wxByte MIDI_PERCUSSION_PRESET_HI_WOOD_BLOCK = 41;
const wxByte MIDI_PERCUSSION_PRESET_LOW_WOOD_BLOCK = 42;
const wxByte MIDI_PERCUSSION_PRESET_MUTE_CUICA = 43;
const wxByte MIDI_PERCUSSION_PRESET_OPEN_CUICA = 44;
const wxByte MIDI_PERCUSSION_PRESET_MUTE_TRIANGLE = 45;
const wxByte MIDI_PERCUSSION_PRESET_OPEN_TRIANGLE = 46;
const wxByte FIRST_MIDI_PERCUSSION_PRESET = MIDI_PERCUSSION_PRESET_ACOUSTIC_BASS_DRUM;
const wxByte LAST_MIDI_PERCUSSION_PRESET = MIDI_PERCUSSION_PRESET_OPEN_TRIANGLE;
// MIDI Channel Functions
extern bool wxIsValidMidiChannel(wxByte channel);
extern bool wxIsValidMidiChannelVolume(wxByte volume);
extern bool wxIsValidMidiChannelEffectLevel(wxByte level);
// MIDI Note Functions
extern bool wxIsValidMidiNote(wxByte note);
extern bool wxIsValidMidiNoteKey(wxByte key);
extern wxByte wxGetMidiNotePitch(wxByte note);
extern wxInt32 wxGetMidiNoteOctave(wxByte note);
extern wxString wxGetMidiNoteText(wxByte note, bool sharps);
extern wxByte wxOffsetMidiNote(wxByte note, wxInt8 offset);
extern bool wxIsValidMidiNoteVolume(wxByte volume);
// MIDI Preset Functions
extern bool wxIsValidMidiPreset(wxByte preset);
// MIDI Percussion Preset Functions
extern bool wxIsValidMidiPercussionPreset(wxByte preset);
#endif