31#if defined(__msx1__) || defined(__cpc__)
35static unsigned int SOUND_FREQUENCIES[] = {
40 3229, 3047, 2876, 2715, 2562, 2419, 2283, 2155, 2034, 1920, 1812, 1710,
41 1614, 1524, 1438, 1357, 1281, 1209, 1141, 1077, 1017, 960, 906, 855,
42 807, 762, 719, 679, 641, 605, 571, 539, 508, 480, 453, 428,
43 404, 381, 360, 339, 320, 302, 285, 269, 254, 240, 226, 214,
44 202, 190, 180, 170, 160, 151, 143, 135, 127, 120, 113, 107,
45 101, 95, 90, 85, 80, 76, 71, 67, 64, 60, 57, 53,
46 50, 48, 45, 42, 40, 38, 36, 34, 32, 30, 28
79 cpu_call( _environment,
"AY8910STARTUP" );
86 cpu_label( _environment,
"AY8910STARTUP" );
94 deploy( ay8910vars, src_hw_ay8910_vars_asm );
95 deploy( ay8910startup, src_hw_ay8910_startup_asm );
97 if ( _channels & 0x01 ) {
100 if ( _channels & 0x02 ) {
103 if ( _channels & 0x04 ) {
106 if ( _channels & 0x08 ) {
114 deploy( ay8910vars, src_hw_ay8910_vars_asm );
115 deploy( ay8910startup, src_hw_ay8910_startup_asm );
117 outline1(
"LD A, $%2.2x", ( _volume & 0x0f ) );
119 outline1(
"LD A, $%2.2x", ( _channels & 0x07 ) );
124#define PROGRAM_FREQUENCY( c, f ) \
125 outline1("LD A, $%2.2x", ( f & 0xff ) ); \
126 outline0("LD E, A" ); \
127 outline1("LD A, $%2.2x", ( ( f >> 8 ) & 0xff ) ); \
128 outline0("LD D, A" ); \
129 if ( ( c & 0x01 ) ) \
130 outline0("CALL AY8910PROGFREQ0" ); \
131 if ( ( c & 0x02 ) ) \
132 outline0("CALL AY8910PROGFREQ1" ); \
133 if ( ( c & 0x04 ) ) \
134 outline0("CALL AY8910PROGFREQ2" ); \
135 if ( ( c & 0x08 ) ) \
136 outline0("CALL AY8910PROGFREQN0" );
138#define PROGRAM_FREQUENCY_V( c, f ) \
139 outline1("LD A, (%s)", f ); \
140 outline0("LD E, A" ); \
141 outline1("LD A, (%s)", address_displacement(_environment, f, "1") ); \
142 outline0("LD D, A" ); \
144 outline0("LD A, $7"); \
146 outline1("LD A, (%s)", c ); \
148 outline0("CALL AY8910FREQ" );
150#define PROGRAM_FREQUENCY_SV( c, f ) \
151 outline1("LD A, $%2.2x", ( f & 0xff ) ); \
152 outline0("LD E, A" ); \
153 outline1("LD A, $%2.2x", ( ( f >> 8 ) & 0xff ) ); \
154 outline0("LD D, A" ); \
156 outline0("LD A, $7"); \
158 outline1("LD A, (%s)", c ); \
160 outline0("CALL AY8910FREQ2" );
162#define PROGRAM_DURATION( c, d ) \
163 outline1("LD A, $%2.2x", ( d & 0xff ) ); \
164 outline0("LD E, A" ); \
165 outline1("LD A, $%2.2x", ( ( d >> 8 ) & 0xff ) ); \
166 outline0("LD D, A" ); \
167 if ( ( c & 0x01 ) ) \
168 outline0("CALL AY8910PROGDUR0" ); \
169 if ( ( c & 0x02 ) ) \
170 outline0("CALL AY8910PROGDUR1" ); \
171 if ( ( c & 0x04 ) ) \
172 outline0("CALL AY8910PROGDUR2" ); \
173 if ( ( c & 0x08 ) ) \
174 outline0("CALL AY8910PROGDURN0" );
176#define WAIT_DURATION( c ) \
177 if ( ( c & 0x01 ) ) \
178 outline0("CALL AY8910WAITDUR0" ); \
179 if ( ( c & 0x02 ) ) \
180 outline0("CALL AY8910WAITDUR1" ); \
181 if ( ( c & 0x04 ) ) \
182 outline0("CALL AY8910WAITDUR2" ); \
183 if ( ( c & 0x08 ) ) \
184 outline0("CALL AY8910WAITDURN0" );
186#define PROGRAM_PITCH( c, f ) \
187 outline1("LD A, $%2.2x", ( f & 0xff ) ); \
188 outline0("LD E, A" ); \
189 outline1("LD A, $%2.2x", ( ( f >> 8 ) & 0xff ) ); \
190 outline0("LD D, A" ); \
191 if ( ( c & 0x01 ) ) \
192 outline0("CALL AY8910PROGFREQ0" ); \
193 if ( ( c & 0x02 ) ) \
194 outline0("CALL AY8910PROGFREQ1" ); \
195 if ( ( c & 0x04 ) ) \
196 outline0("CALL AY8910PROGFREQ2" ); \
197 if ( ( c & 0x08 ) ) \
198 outline0("CALL AY8910PROGFREQN0" );
200#define PROGRAM_PITCH_V( c, f ) \
201 outline1("LD A, (%s)", f ); \
202 outline0("LD E, A" ); \
203 outline1("LD A, (%s)", address_displacement(_environment, f, "1") ); \
204 outline0("LD D, A" ); \
206 outline0("LD A, $7"); \
208 outline1("LD A, (%s)", c ); \
210 outline0("CALL AY8910PROGFREQ" );
212#define PROGRAM_PITCH_SV( c, f ) \
213 outline1("LD A, $%2.2x", ( f & 0xff ) ); \
214 outline0("LD E, A" ); \
215 outline1("LD A, $%2.2x", ( ( f >> 8 ) & 0xff ) ); \
216 outline0("LD D, A" ); \
218 outline0("LD A, $7"); \
220 outline1("LD A, (%s)", c ); \
222 outline0("CALL AY8910PROGFREQ" );
224#define PROGRAM_PULSE( c, p ) \
225 outline1("LD A, $%2.2x", ( p & 0xff ) ); \
226 outline0("LD E, A" ); \
227 outline1("LD A, $%2.2x", ( ( p >> 8 ) & 0xff ) ); \
228 outline0("LD D, A" ); \
229 if ( ( c & 0x01 ) ) \
230 outline0("CALL AY8910PROGPULSE0" ); \
231 if ( ( c & 0x02 ) ) \
232 outline0("CALL AY8910PROGPULSE1" ); \
233 if ( ( c & 0x04 ) ) \
234 outline0("CALL AY8910PROGPULSE2" );
236#define PROGRAM_PULSE_V( c, p ) \
237 outline1("LD A, (%s)", p ); \
238 outline0("LD E, A" ); \
239 outline1("LD A, (%s)", address_displacement(_environment, p, "1") ); \
240 outline0("LD D, A" ); \
242 outline0("LD A, $7"); \
244 outline1("LD A, (%s)", c ); \
246 outline0("CALL AY8910PROGPULSE" );
248#define PROGRAM_PULSE_SV( c, p ) \
249 outline1("LD A, $%2.2x", ( p & 0xff ) ); \
250 outline0("LD E, A" ); \
251 outline1("LD A, $%2.2x", ( ( p >> 8 ) & 0xff ) ); \
252 outline0("LD D, A" ); \
254 outline0("LD A, $7"); \
256 outline1("LD A, (%s)", c ); \
258 outline0("CALL AY8910PROGPULSE" );
260#define PROGRAM_NOISE( c ) \
261 outline0("LD A, $82" ); \
262 outline0("LD B, A" ); \
263 if ( ( c & 0x01 ) ) \
264 outline0("CALL AY8910PROGCTR0" ); \
265 if ( ( c & 0x02 ) ) \
266 outline0("CALL AY8910PROGCTR1" ); \
267 if ( ( c & 0x04 ) ) \
268 outline0("CALL AY8910PROGCTR2" );
270#define PROGRAM_NOISE_V( c, p ) \
271 outline0("LD A, $82" ); \
272 outline0("LD B, A" ); \
274 outline0("LD A, $7"); \
276 outline1("LD A, (%s)", c ); \
278 outline0("CALL AY8910PROGCTR" );
280#define PROGRAM_NOISE_SV( c ) \
281 outline0("LD A, $82" ); \
282 outline0("LD B, A" ); \
284 outline0("LD A, $7"); \
286 outline1("LD A, (%s)", c ); \
288 outline0("CALL AY8910PROGCTR" );
290#define PROGRAM_SAW( c ) \
291 outline0("LD A, $22" ); \
292 outline0("LD B, A" ); \
293 if ( ( c & 0x01 ) ) \
294 outline0("CALL AY8910PROGCTR0" ); \
295 if ( ( c & 0x02 ) ) \
296 outline0("CALL AY8910PROGCTR1" ); \
297 if ( ( c & 0x04 ) ) \
298 outline0("CALL AY8910PROGCTR2" );
300#define PROGRAM_SAW_V( c) \
301 outline0("LD A, $22" ); \
302 outline0("LD B, A" ); \
304 outline0("LD A, $7"); \
306 outline1("LD A, (%s)", c ); \
308 outline0("CALL AY8910PROGCTR" );
310#define PROGRAM_SAW_SV( c ) \
311 outline0("LD A, $22" ); \
312 outline0("LD B, A" ); \
314 outline0("LD A, $7"); \
316 outline1("LD A, (%s)", c ); \
318 outline0("CALL AY8910PROGCTR" );
320#define PROGRAM_TRIANGLE( c ) \
321 outline0("LD A, $12" ); \
322 outline0("LD B, A" ); \
323 if ( ( c & 0x01 ) ) \
324 outline0("CALL AY8910PROGCTR0" ); \
325 if ( ( c & 0x02 ) ) \
326 outline0("CALL AY8910PROGCTR1" ); \
327 if ( ( c & 0x04 ) ) \
328 outline0("CALL AY8910PROGCTR2" );
330#define PROGRAM_TRIANGLE_V( c ) \
331 outline0("LD A, $12" ); \
332 outline0("LD B, A" ); \
334 outline0("LD A, $7"); \
336 outline1("LD A, (%s)", c ); \
338 outline0("CALL AY8910PROGCTR" );
340#define PROGRAM_TRIANGLE_SV( c ) \
341 outline0("LD A, $12" ); \
342 outline0("LD B, A" ); \
344 outline0("LD A, $7"); \
346 outline1("LD A, (%s)", c ); \
348 outline0("CALL AY8910PROGCTR" );
350#define PROGRAM_SAW_TRIANGLE( c ) \
351 outline0("LD A, $32" ); \
352 outline0("LD B, A" ); \
353 if ( ( c & 0x01 ) ) \
354 outline0("CALL AY8910PROGCTR0" ); \
355 if ( ( c & 0x02 ) ) \
356 outline0("CALL AY8910PROGCTR1" ); \
357 if ( ( c & 0x04 ) ) \
358 outline0("CALL AY8910PROGCTR2" );
360#define PROGRAM_SAW_TRIANGLE_V( c ) \
361 outline0("LD A, $32" ); \
362 outline0("LD B, A" ); \
364 outline0("LD A, $7"); \
366 outline1("LD A, (%s)", c ); \
368 outline0("CALL AY8910PROGCTR" );
370#define PROGRAM_SAW_TRIANGLE_SV( c ) \
371 outline0("LD A, $32" ); \
372 outline0("LD B, A" ); \
374 outline0("LD A, $7"); \
376 outline1("LD A, (%s)", c ); \
378 outline0("CALL AY8910PROGCTR" );
380#define PROGRAM_ATTACK_DECAY( c, a, d ) \
381 outline1("LD A, $%2.2x", ( a & 0x0f ) ); \
382 outline0("LD E, A" ); \
383 outline1("LD A, $%2.2x", ( d & 0x0f ) ); \
384 outline0("LD D, A" ); \
385 if ( ( c & 0x01 ) ) \
386 outline0("CALL AY8910PROGAD0" ); \
387 if ( ( c & 0x02 ) ) \
388 outline0("CALL AY8910PROGAD1" ); \
389 if ( ( c & 0x04 ) ) \
390 outline0("CALL AY8910PROGAD2" );
392#define PROGRAM_ATTACK_DECAY_V( c, a, d ) \
393 outline1("LD A, %s", a ); \
394 outline0("LD E, A" ); \
395 outline1("LD A, %s", d ); \
396 outline0("LD D, A" ); \
398 outline0("LD A, $7"); \
400 outline1("LD A, (%s)", c ); \
402 outline0("CALL AY8910PROGAD" );
404#define PROGRAM_ATTACK_DECAY_SV( c, a, d ) \
405 outline1("LD A, $%2.2x", ( a & 0x0f ) ); \
406 outline0("LD E, A" ); \
407 outline1("LD A, $%2.2x", ( d & 0x0f ) ); \
408 outline0("LD D, A" ); \
410 outline0("LD A, $7"); \
412 outline1("LD A, (%s)", c ); \
414 outline0("CALL AY8910PROGAD" );
416#define PROGRAM_SUSTAIN_RELEASE( c, s, r ) \
417 outline1("LD A, $%2.2x", ( s & 0x0f ) ); \
418 outline0("LD E, A" ); \
419 outline1("LD A, $%2.2x", ( r & 0x0f ) ); \
420 outline0("LD D, A" ); \
421 if ( ( c & 0x01 ) ) \
422 outline0("CALL AY8910PROGSR0" ); \
423 if ( ( c & 0x02 ) ) \
424 outline0("CALL AY8910PROGSR1" ); \
425 if ( ( c & 0x04 ) ) \
426 outline0("CALL AY8910PROGSR2" );
428#define PROGRAM_SUSTAIN_RELEASE_V( c, s, r ) \
429 outline1("LD A, %s", s ); \
430 outline0("LD E, A" ); \
431 outline1("LD A, %s", r ); \
432 outline0("LD D, A" ); \
434 outline0("LD A, $7"); \
436 outline1("LD A, (%s)", c ); \
438 outline0("CALL AY8910PROGSR" );
440#define PROGRAM_SUSTAIN_RELEASE_SV( c, s, r ) \
441 outline1("LD A, $%2.2x", ( s & 0x0f ) ); \
442 outline0("LD E, A" ); \
443 outline1("LD A, $%2.2x", ( r & 0x0f ) ); \
444 outline0("LD D, A" ); \
446 outline0("LD A, $7"); \
448 outline1("LD A, (%s)", c ); \
450 outline0("CALL AY8910PROGSR" );
452#define STOP_FREQUENCY( c ) \
453 if ( ( c & 0x01 ) ) \
454 outline0("CALL AY8910STOP0" ); \
455 if ( ( c & 0x02 ) ) \
456 outline0("CALL AY8910STOP1" ); \
457 if ( ( c & 0x04 ) ) \
458 outline0("CALL AY8910STOP2" ); \
459 if ( ( c & 0x08 ) ) \
460 outline0("CALL AY8910STOPN0" );
462#define STOP_FREQUENCY_V( c ) \
464 outline0("LD A, $7"); \
466 outline1("LD A, (%s)", c ); \
468 outline0("CALL AY8910STOP" );
470#define STOP_FREQUENCY_SV( c ) \
472 outline0("LD A, $7"); \
474 outline1("LD A, (%s)", c ); \
476 outline0("CALL AY8910STOP" );
480 deploy( ay8910vars, src_hw_ay8910_vars_asm );
481 deploy( ay8910startup, src_hw_ay8910_startup_asm );
686 deploy( ay8910vars, src_hw_ay8910_vars_asm );
687 deploy( ay8910startup, src_hw_ay8910_startup_asm );
695 deploy( ay8910vars, src_hw_ay8910_vars_asm );
696 deploy( ay8910startup, src_hw_ay8910_startup_asm );
710 deploy( ay8910vars, src_hw_ay8910_vars_asm );
711 deploy( ay8910startup, src_hw_ay8910_startup_asm );
719 deploy( ay8910vars, src_hw_ay8910_vars_asm );
720 deploy( ay8910startup, src_hw_ay8910_startup_asm );
733 deploy( ay8910vars, src_hw_ay8910_vars_asm );
734 deploy( ay8910startup, src_hw_ay8910_startup_asm );
753 deploy( ay8910vars, src_hw_ay8910_vars_asm );
754 deploy( ay8910startup, src_hw_ay8910_startup_asm );
769 deploy( ay8910vars, src_hw_ay8910_vars_asm );
770 deploy( ay8910startup, src_hw_ay8910_startup_asm );
971 deploy( ay8910vars, src_hw_ay8910_vars_asm );
972 deploy( ay8910startup, src_hw_ay8910_startup_asm );
974 outline1(
"LD A, (%s)", _frequency );
990 deploy( ay8910vars, src_hw_ay8910_vars_asm );
991 deploy( ay8910startup, src_hw_ay8910_startup_asm );
1009 deploy( ay8910vars, src_hw_ay8910_vars_asm );
1010 deploy( ay8910startup, src_hw_ay8910_startup_asm );
1012 outline0(
"LD HL, AY8910FREQTABLE");
1027 outline1(
"LD A, (%s)", _channels );
1038 deploy( ay8910vars, src_hw_ay8910_vars_asm );
1039 deploy( ay8910startup, src_hw_ay8910_startup_asm );
1041 outline1(
"LD A, (%s)", _channels );
1048 deploy( ay8910vars, src_hw_ay8910_vars_asm );
1049 deploy( ay8910startup, src_hw_ay8910_startup_asm );
1050 deploy( music, src_hw_ay8910_music_asm );
1055 outline1(
"LD A, $%2.2x", ( _size>>8 ) & 0xff);
1057 outline1(
"LD A, $%2.2x", _size & 0xff );
1060 outline0(
"LD (AY8910MUSICLOOP), A");
1068 deploy( ay8910vars, src_hw_ay8910_vars_asm );
1069 deploy( ay8910startup, src_hw_ay8910_startup_asm );
1077 deploy( ay8910vars, src_hw_ay8910_vars_asm );
1078 deploy( ay8910startup, src_hw_ay8910_startup_asm );
1086 deploy( ay8910vars, src_hw_ay8910_vars_asm );
1087 deploy( ay8910startup, src_hw_ay8910_startup_asm );
1090 outline1(
"LD DE, (%s)", _duration );
1106 deploy( ay8910vars, src_hw_ay8910_vars_asm );
1107 deploy( ay8910startup, src_hw_ay8910_startup_asm );
void cpu_label(Environment *_environment, char *_label)
void cpu_call(Environment *_environment, char *_label)
Variable * variable_import(Environment *_environment, char *_name, VariableType _type, int _size_or_value)
void variable_global(Environment *_environment, char *_pattern)
char * address_displacement(Environment *_environment, char *_address, char *_displacement)
void ay8910_stop(Environment *_environment, int _channels)
#define PROGRAM_DURATION(c, d)
#define PROGRAM_TRIANGLE_SV(c)
#define PROGRAM_SAW_SV(c)
void ay8910_set_frequency_vars(Environment *_environment, char *_channels, char *_frequency)
#define PROGRAM_FREQUENCY(c, f)
void ay8910_set_parameter(Environment *_environment, int _channels, int _parameter, int _value)
void ay8910_finalization(Environment *_environment)
void ay8910_set_note_vars(Environment *_environment, char *_channels, char *_note)
void ay8910_wait_duration_vars(Environment *_environment, char *_channel)
#define PROGRAM_NOISE_SV(c)
void ay8910_wait_duration(Environment *_environment, int _channel)
void ay8910_set_frequency(Environment *_environment, int _channels, int _frequency)
void ay8910_set_pitch(Environment *_environment, int _channels, int _pitch)
void ay8910_set_pitch_vars(Environment *_environment, char *_channels, char *_pitch)
void ay8910_set_program_semi_var(Environment *_environment, char *_channels, int _program)
void ay8910_music(Environment *_environment, char *_music, int _size, int _loop)
void ay8910_set_volume_semi_var(Environment *_environment, char *_channel, int _volume)
#define STOP_FREQUENCY(c)
void ay8910_set_duration_vars(Environment *_environment, char *_channel, char *_duration)
#define PROGRAM_ATTACK_DECAY(c, a, d)
#define PROGRAM_SUSTAIN_RELEASE_SV(c, s, r)
void ay8910_set_volume(Environment *_environment, int _channels, int _volume)
void ay8910_set_volume_vars(Environment *_environment, char *_channels, char *_volume)
void ay8910_set_program(Environment *_environment, int _channels, int _program)
#define PROGRAM_SUSTAIN_RELEASE(c, s, r)
#define PROGRAM_PULSE_SV(c, p)
void ay8910_initialization(Environment *_environment)
void ay8910_start_var(Environment *_environment, char *_channels)
#define PROGRAM_PITCH(c, f)
void ay8910_start(Environment *_environment, int _channels)
void ay8910_set_duration(Environment *_environment, int _channel, int _duration)
void ay8910_stop_vars(Environment *_environment, char *_channels)
#define PROGRAM_PULSE(c, p)
void ay8910_set_note(Environment *_environment, int _channels, int _note)
#define PROGRAM_TRIANGLE(c)
#define PROGRAM_ATTACK_DECAY_SV(c, a, d)
#define IMF_INSTRUMENT_LEAD_8_BASS_LEAD
#define IMF_INSTRUMENT_MARIMBA
#define IMF_INSTRUMENT_LEAD_6_VOICE
#define IMF_INSTRUMENT_DRAWBAR_ORGAN
#define IMF_INSTRUMENT_FRETLESS_BASS
#define IMF_INSTRUMENT_PAD_1_NEW_AGE
#define IMF_INSTRUMENT_VIOLIN
#define IMF_INSTRUMENT_SYNTH_BASS_1
#define IMF_INSTRUMENT_MELODIC_TOM
#define IMF_INSTRUMENT_REVERSE_CYMBAL
#define IMF_INSTRUMENT_ELECTRIC_BASS_FINGER
#define IMF_INSTRUMENT_HARMONICA
#define IMF_INSTRUMENT_BLOWN_BOTTLE
#define IMF_INSTRUMENT_PAD_3_POLYSYNTH
#define IMF_INSTRUMENT_FX_8_SCI_FI
#define IMF_INSTRUMENT_RECORDER
#define IMF_INSTRUMENT_FX_6_GOBLINS
#define IMF_INSTRUMENT_FX_1_RAIN
#define IMF_INSTRUMENT_SYNTH_VOICE
#define IMF_INSTRUMENT_TENOR_SAX
#define IMF_INSTRUMENT_PICCOLO
#define IMF_INSTRUMENT_LEAD_7_FIFTHS
#define IMF_INSTRUMENT_SLAP_BASS_1
#define IMF_INSTRUMENT_MUSIC_BOX
#define IMF_INSTRUMENT_SOPRANO_SAX
#define IMF_INSTRUMENT_TRUMPET
#define IMF_INSTRUMENT_BIRD_TWEET
#define IMF_INSTRUMENT_PAD_8_SWEEP
#define IMF_INSTRUMENT_CHURCH_ORGAN
#define IMF_INSTRUMENT_HELICOPTER
#define IMF_INSTRUMENT_BRIGHT_ACOUSTIC_PIANO
#define IMF_INSTRUMENT_CELESTA
#define IMF_INSTRUMENT_ACOUSTIC_GUITAR_NYLON
#define IMF_INSTRUMENT_GLOCKENSPIEL
#define IMF_INSTRUMENT_ORCHESTRAL_HARP
#define IMF_INSTRUMENT_BREATH_NOISE
#define IMF_INSTRUMENT_BAG_PIPE
#define IMF_INSTRUMENT_ELECTRIC_GUITAR_JAZZ
#define IMF_INSTRUMENT_ELECTRIC_GRAND_PIANO
#define IMF_INSTRUMENT_SITAR
#define IMF_INSTRUMENT_APPLAUSE
#define IMF_INSTRUMENT_WHISTLE
#define IMF_INSTRUMENT_PERCUSSIVE_ORGAN
#define IMF_INSTRUMENT_HONKY_TONK_PIANO
#define IMF_INSTRUMENT_CHOIR_AAHS
#define IMF_INSTRUMENT_SHANAI
#define IMF_INSTRUMENT_CELLO
#define IMF_INSTRUMENT_FX_3_CRYSTAL
#define IMF_INSTRUMENT_ELECTRIC_GUITAR_MUTED
#define IMF_INSTRUMENT_HARPSICHORD
#define IMF_INSTRUMENT_BRASS_SECTION
#define IMF_INSTRUMENT_ELECTRIC_BASS_PICK
#define IMF_INSTRUMENT_FX_5_BRIGHTNESS
#define IMF_INSTRUMENT_FLUTE
struct _Environment Environment
Structure of compilation environment.
#define IMF_INSTRUMENT_ELECTRIC_GUITAR_CLEAN
#define IMF_INSTRUMENT_ACOUSTIC_BASS
#define IMF_INSTRUMENT_GUITAR_FRET_NOISE
#define IMF_INSTRUMENT_SYNTHSTRINGS_2
#define IMF_INSTRUMENT_PAD_4_CHOIR
#define IMF_INSTRUMENT_LEAD_2_SAWTOOTH
#define IMF_INSTRUMENT_DULCIMER
#define IMF_INSTRUMENT_KOTO
#define IMF_INSTRUMENT_TUBA
#define IMF_INSTRUMENT_GUITAR_HARMONICS
#define IMF_INSTRUMENT_CLAVI
#define IMF_INSTRUMENT_BANJO
#define IMF_INSTRUMENT_SYNTHBRASS_2
#define IMF_INSTRUMENT_LEAD_4_CHIFF
#define IMF_INSTRUMENT_VOICE_OOHS
#define IMF_INSTRUMENT_TANGO_ACCORDION
#define IMF_INSTRUMENT_FX_7_ECHOES
#define IMF_INSTRUMENT_PAD_6_METALLIC
#define IMF_INSTRUMENT_PAD_5_BOWED
#define IMF_INSTRUMENT_GUNSHOT
#define IMF_INSTRUMENT_REED_ORGAN
#define IMF_INSTRUMENT_ORCHESTRA_HIT
#define IMF_INSTRUMENT_SYNTH_DRUM
#define IMF_INSTRUMENT_SEASHORE
#define IMF_INSTRUMENT_OCARINA
#define IMF_INSTRUMENT_TELEPHONE_RING
#define IMF_INSTRUMENT_FX_2_SOUNDTRACK
#define IMF_INSTRUMENT_ACOUSTIC_GUITAR_STEEL
#define IMF_INSTRUMENT_SYNTHSTRINGS_1
#define IMF_INSTRUMENT_MUTED_TRUMPET
#define IMF_INSTRUMENT_PAN_FLUTE
#define IMF_INSTRUMENT_TINKLE_BELL
#define IMF_INSTRUMENT_VIBRAPHONE
#define IMF_INSTRUMENT_KALIMBA
#define IMF_INSTRUMENT_FIDDLE
#define IMF_INSTRUMENT_PAD_7_HALO
#define IMF_INSTRUMENT_TUBULAR_BELLS
#define IMF_INSTRUMENT_LEAD_1_SQUARE
#define IMF_INSTRUMENT_STRING_ENSEMBLE_1
#define IMF_INSTRUMENT_DISTORTION_GUITAR
#define IMF_INSTRUMENT_PAD_2_WARM
#define IMF_INSTRUMENT_ACCORDION
#define IMF_INSTRUMENT_SLAP_BASS_2
#define IMF_INSTRUMENT_LEAD_5_CHARANG
#define IMF_INSTRUMENT_OBOE
#define IMF_INSTRUMENT_STEEL_DRUMS
#define IMF_INSTRUMENT_BASSOON
#define IMF_INSTRUMENT_TIMPANI
#define IMF_INSTRUMENT_ROCK_ORGAN
#define IMF_INSTRUMENT_SHAMISEN
#define IMF_INSTRUMENT_CLARINET
#define IMF_INSTRUMENT_ACOUSTIC_GRAND_PIANO
#define IMF_INSTRUMENT_ALTO_SAX
#define IMF_INSTRUMENT_EXPLOSION
#define IMF_INSTRUMENT_PIZZICATO_STRINGS
#define IMF_INSTRUMENT_WOODBLOCK
#define IMF_INSTRUMENT_XYLOPHONE
#define IMF_INSTRUMENT_AGOGO
#define IMF_INSTRUMENT_SYNTHBRASS_1
#define IMF_INSTRUMENT_LEAD_3_CALLIOPE
#define IMF_INSTRUMENT_STRING_ENSEMBLE_2
#define IMF_INSTRUMENT_SYNTH_BASS_2
#define IMF_INSTRUMENT_ELECTRIC_PIANO2
#define IMF_INSTRUMENT_FRENCH_HORN
#define IMF_INSTRUMENT_TREMOLO_STRINGS
#define IMF_INSTRUMENT_FX_4_ATMOSPHERE
#define IMF_INSTRUMENT_ENGLISH_HORN
#define IMF_INSTRUMENT_BARITONE_SAX
#define IMF_INSTRUMENT_SHAKUHACHI
#define IMF_INSTRUMENT_CONTRABASS
#define IMF_INSTRUMENT_VIOLA
#define IMF_INSTRUMENT_TROMBONE
#define IMF_INSTRUMENT_OVERDRIVEN_GUITAR
#define IMF_INSTRUMENT_ELECTRIC_PIANO1
#define IMF_INSTRUMENT_TAIKO_DRUM