31#if defined(__coleco__) || defined(__sc3000__) || defined(__sg1000__)
35static unsigned int SOUND_FREQUENCIES[] = {
38 255, 255, 255, 255, 255, 255, 255,
40 255, 240, 227, 214, 202, 191, 180, 170, 160, 151,
41 143, 135, 127, 120, 113, 107, 101, 95, 90, 85,
42 80, 75, 71, 67, 63, 60, 56, 53, 50, 47,
43 45, 42, 40, 37, 35, 33, 31, 30, 28, 26,
44 25, 23, 22, 21, 20, 18, 17, 16, 15, 15,
45 14, 13, 12, 11, 11, 10, 10, 9, 8, 8,
46 7, 7, 7, 6, 6, 5, 5, 5, 5, 4,
47 4, 4, 3, 3, 3, 3, 3, 2, 2, 2,
48 2, 2, 2, 2, 1, 1, 1, 1, 1
83 cpu_call( _environment,
"SN76489STARTUP" );
90 cpu_label( _environment,
"SN76489STARTUP" );
100 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
103 if ( _channels & 0x01 ) {
106 if ( _channels & 0x02 ) {
109 if ( _channels & 0x04 ) {
117 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
120 outline1(
"LD A, $%2.2x", ( _volume & 0x0f ) );
122 outline1(
"LD A, $%2.2x", ( _channels ) );
127#define PROGRAM_FREQUENCY( c, f ) \
128 outline1("LD A, $%2.2x", ( f & 0xff ) ); \
129 outline0("LD E, A" ); \
130 outline1("LD A, $%2.2x", ( ( f >> 8 ) & 0xff ) ); \
131 outline0("LD D, A" ); \
132 if ( ( c & 0x01 ) ) \
133 outline0("CALL SN76489PROGFREQ0" ); \
134 if ( ( c & 0x02 ) ) \
135 outline0("CALL SN76489PROGFREQ1" ); \
136 if ( ( c & 0x04 ) ) \
137 outline0("CALL SN76489PROGFREQ2" );
139#define PROGRAM_FREQUENCY_V( c, f ) \
140 outline1("LD A, (%s)", f ); \
141 outline0("LD E, A" ); \
142 outline1("LD A, (%s)", address_displacement(_environment, f, "1") ); \
143 outline0("LD D, A" ); \
145 outline0("LD A, $7"); \
147 outline1("LD A, (%s)", c ); \
149 outline0("CALL SN76489FREQ" );
151#define PROGRAM_FREQUENCY_SV( c, f ) \
152 outline1("LD A, $%2.2x", ( f & 0xff ) ); \
153 outline0("LD E, A" ); \
154 outline1("LD A, $%2.2x", ( ( f >> 8 ) & 0xff ) ); \
155 outline0("LD D, A" ); \
157 outline0("LD A, $7"); \
159 outline1("LD A, (%s)", c ); \
161 outline0("CALL SN76489FREQ" );
163#define PROGRAM_DURATION( c, d ) \
164 outline1("LD A, $%2.2x", ( d & 0xff ) ); \
165 outline0("LD E, A" ); \
166 outline1("LD A, $%2.2x", ( ( d >> 8 ) & 0xff ) ); \
167 outline0("LD D, A" ); \
168 if ( ( c & 0x01 ) ) \
169 outline0("CALL SN76489PROGDUR0" ); \
170 if ( ( c & 0x02 ) ) \
171 outline0("CALL SN76489PROGDUR1" ); \
172 if ( ( c & 0x04 ) ) \
173 outline0("CALL SN76489PROGDUR2" );
175#define WAIT_DURATION( c ) \
176 if ( ( c & 0x01 ) ) \
177 outline0("CALL SN76489WAITDUR0" ); \
178 if ( ( c & 0x02 ) ) \
179 outline0("CALL SN76489WAITDUR1" ); \
180 if ( ( c & 0x04 ) ) \
181 outline0("CALL SN76489WAITDUR2" );
183#define PROGRAM_PITCH( c, f ) \
184 outline1("LD A, $%2.2x", ( f & 0xff ) ); \
185 outline0("LD E, A" ); \
186 outline1("LD A, $%2.2x", ( ( f >> 8 ) & 0xff ) ); \
187 outline0("LD D, A" ); \
188 if ( ( c & 0x01 ) ) \
189 outline0("CALL SN76489PROGFREQ0" ); \
190 if ( ( c & 0x02 ) ) \
191 outline0("CALL SN76489PROGFREQ1" ); \
192 if ( ( c & 0x04 ) ) \
193 outline0("CALL SN76489PROGFREQ2" );
195#define PROGRAM_PITCH_V( c, f ) \
196 outline1("LD A, (%s)", f ); \
197 outline0("LD E, A" ); \
198 outline1("LD A, (%s)", address_displacement(_environment, f, "1") ); \
199 outline0("LD D, A" ); \
201 outline0("LD A, $7"); \
203 outline1("LD A, (%s)", c ); \
205 outline0("CALL SN76489PROGFREQ" );
207#define PROGRAM_PITCH_SV( c, f ) \
208 outline1("LD A, $%2.2x", ( f & 0xff ) ); \
209 outline0("LD E, A" ); \
210 outline1("LD A, $%2.2x", ( ( f >> 8 ) & 0xff ) ); \
211 outline0("LD D, A" ); \
213 outline0("LD A, $7"); \
215 outline1("LD A, (%s)", c ); \
217 outline0("CALL SN76489PROGFREQ" );
219#define PROGRAM_PULSE( c, p ) \
220 outline1("LD A, $%2.2x", ( p & 0xff ) ); \
221 outline0("LD E, A" ); \
222 outline1("LD A, $%2.2x", ( ( p >> 8 ) & 0xff ) ); \
223 outline0("LD D, A" ); \
224 if ( ( c & 0x01 ) ) \
225 outline0("CALL SN76489PROGPULSE0" ); \
226 if ( ( c & 0x02 ) ) \
227 outline0("CALL SN76489PROGPULSE1" ); \
228 if ( ( c & 0x04 ) ) \
229 outline0("CALL SN76489PROGPULSE2" );
231#define PROGRAM_PULSE_V( c, p ) \
232 outline1("LD A, (%s)", p ); \
233 outline0("LD E, A" ); \
234 outline1("LD A, (%s)", address_displacement(_environment, p, "1") ); \
235 outline0("LD D, A" ); \
237 outline0("LD A, $7"); \
239 outline1("LD A, (%s)", c ); \
241 outline0("CALL SN76489PROGPULSE" );
243#define PROGRAM_PULSE_SV( c, p ) \
244 outline1("LD A, $%2.2x", ( p & 0xff ) ); \
245 outline0("LD E, A" ); \
246 outline1("LD A, $%2.2x", ( ( p >> 8 ) & 0xff ) ); \
247 outline0("LD D, A" ); \
249 outline0("LD A, $7"); \
251 outline1("LD A, (%s)", c ); \
253 outline0("CALL SN76489PROGPULSE" );
255#define PROGRAM_NOISE( c ) \
256 outline0("LD A, $82" ); \
257 outline0("LD B, A" ); \
258 if ( ( c & 0x01 ) ) \
259 outline0("CALL SN76489PROGCTR0" ); \
260 if ( ( c & 0x02 ) ) \
261 outline0("CALL SN76489PROGCTR1" ); \
262 if ( ( c & 0x04 ) ) \
263 outline0("CALL SN76489PROGCTR2" );
265#define PROGRAM_NOISE_V( c, p ) \
266 outline0("LD A, $82" ); \
267 outline0("LD B, A" ); \
269 outline0("LD A, $7"); \
271 outline1("LD A, (%s)", c ); \
273 outline0("CALL SN76489PROGCTR" );
275#define PROGRAM_NOISE_SV( c ) \
276 outline0("LD A, $82" ); \
277 outline0("LD B, A" ); \
279 outline0("LD A, $7"); \
281 outline1("LD A, (%s)", c ); \
283 outline0("CALL SN76489PROGCTR" );
285#define PROGRAM_SAW( c ) \
286 outline0("LD A, $22" ); \
287 outline0("LD B, A" ); \
288 if ( ( c & 0x01 ) ) \
289 outline0("CALL SN76489PROGCTR0" ); \
290 if ( ( c & 0x02 ) ) \
291 outline0("CALL SN76489PROGCTR1" ); \
292 if ( ( c & 0x04 ) ) \
293 outline0("CALL SN76489PROGCTR2" );
295#define PROGRAM_SAW_V( c) \
296 outline0("LD A, $22" ); \
297 outline0("LD B, A" ); \
299 outline0("LD A, $7"); \
301 outline1("LD A, (%s)", c ); \
303 outline0("CALL SN76489PROGCTR" );
305#define PROGRAM_SAW_SV( c ) \
306 outline0("LD A, $22" ); \
307 outline0("LD B, A" ); \
309 outline0("LD A, $7"); \
311 outline1("LD A, (%s)", c ); \
313 outline0("CALL SN76489PROGCTR" );
315#define PROGRAM_TRIANGLE( c ) \
316 outline0("LD A, $12" ); \
317 outline0("LD B, A" ); \
318 if ( ( c & 0x01 ) ) \
319 outline0("CALL SN76489PROGCTR0" ); \
320 if ( ( c & 0x02 ) ) \
321 outline0("CALL SN76489PROGCTR1" ); \
322 if ( ( c & 0x04 ) ) \
323 outline0("CALL SN76489PROGCTR2" );
325#define PROGRAM_TRIANGLE_V( c ) \
326 outline0("LD A, $12" ); \
327 outline0("LD B, A" ); \
329 outline0("LD A, $7"); \
331 outline1("LD A, (%s)", c ); \
333 outline0("CALL SN76489PROGCTR" );
335#define PROGRAM_TRIANGLE_SV( c ) \
336 outline0("LD A, $12" ); \
337 outline0("LD B, A" ); \
339 outline0("LD A, $7"); \
341 outline1("LD A, (%s)", c ); \
343 outline0("CALL SN76489PROGCTR" );
345#define PROGRAM_SAW_TRIANGLE( c ) \
346 outline0("LD A, $32" ); \
347 outline0("LD B, A" ); \
348 if ( ( c & 0x01 ) ) \
349 outline0("CALL SN76489PROGCTR0" ); \
350 if ( ( c & 0x02 ) ) \
351 outline0("CALL SN76489PROGCTR1" ); \
352 if ( ( c & 0x04 ) ) \
353 outline0("CALL SN76489PROGCTR2" );
355#define PROGRAM_SAW_TRIANGLE_V( c ) \
356 outline0("LD A, $32" ); \
357 outline0("LD B, A" ); \
359 outline0("LD A, $7"); \
361 outline1("LD A, (%s)", c ); \
363 outline0("CALL SN76489PROGCTR" );
365#define PROGRAM_SAW_TRIANGLE_SV( c ) \
366 outline0("LD A, $32" ); \
367 outline0("LD B, A" ); \
369 outline0("LD A, $7"); \
371 outline1("LD A, (%s)", c ); \
373 outline0("CALL SN76489PROGCTR" );
375#define PROGRAM_ATTACK_DECAY( c, a, d ) \
376 outline1("LD A, $%2.2x", ( a & 0x0f ) ); \
377 outline0("LD E, A" ); \
378 outline1("LD A, $%2.2x", ( d & 0x0f ) ); \
379 outline0("LD D, A" ); \
380 if ( ( c & 0x01 ) ) \
381 outline0("CALL SN76489PROGAD0" ); \
382 if ( ( c & 0x02 ) ) \
383 outline0("CALL SN76489PROGAD1" ); \
384 if ( ( c & 0x04 ) ) \
385 outline0("CALL SN76489PROGAD2" );
387#define PROGRAM_ATTACK_DECAY_V( c, a, d ) \
388 outline1("LD A, %s", a ); \
389 outline0("LD E, A" ); \
390 outline1("LD A, %s", d ); \
391 outline0("LD D, A" ); \
393 outline0("LD A, $7"); \
395 outline1("LD A, (%s)", c ); \
397 outline0("CALL SN76489PROGAD" );
399#define PROGRAM_ATTACK_DECAY_SV( c, a, d ) \
400 outline1("LD A, $%2.2x", ( a & 0x0f ) ); \
401 outline0("LD E, A" ); \
402 outline1("LD A, $%2.2x", ( d & 0x0f ) ); \
403 outline0("LD D, A" ); \
405 outline0("LD A, $7"); \
407 outline1("LD A, (%s)", c ); \
409 outline0("CALL SN76489PROGAD" );
411#define PROGRAM_SUSTAIN_RELEASE( c, s, r ) \
412 outline1("LD A, $%2.2x", ( s & 0x0f ) ); \
413 outline0("LD E, A" ); \
414 outline1("LD A, $%2.2x", ( r & 0x0f ) ); \
415 outline0("LD D, A" ); \
416 if ( ( c & 0x01 ) ) \
417 outline0("CALL SN76489PROGSR0" ); \
418 if ( ( c & 0x02 ) ) \
419 outline0("CALL SN76489PROGSR1" ); \
420 if ( ( c & 0x04 ) ) \
421 outline0("CALL SN76489PROGSR2" );
423#define PROGRAM_SUSTAIN_RELEASE_V( c, s, r ) \
424 outline1("LD A, %s", s ); \
425 outline0("LD E, A" ); \
426 outline1("LD A, %s", r ); \
427 outline0("LD D, A" ); \
429 outline0("LD A, $7"); \
431 outline1("LD A, (%s)", c ); \
433 outline0("CALL SN76489PROGSR" );
435#define PROGRAM_SUSTAIN_RELEASE_SV( c, s, r ) \
436 outline1("LD A, $%2.2x", ( s & 0x0f ) ); \
437 outline0("LD E, A" ); \
438 outline1("LD A, $%2.2x", ( r & 0x0f ) ); \
439 outline0("LD D, A" ); \
441 outline0("LD A, $7"); \
443 outline1("LD A, (%s)", c ); \
445 outline0("CALL SN76489PROGSR" );
447#define STOP_FREQUENCY( c ) \
448 if ( ( c & 0x01 ) ) \
449 outline0("CALL SN76489STOP0" ); \
450 if ( ( c & 0x02 ) ) \
451 outline0("CALL SN76489STOP1" ); \
452 if ( ( c & 0x04 ) ) \
453 outline0("CALL SN76489STOP2" );
455#define STOP_FREQUENCY_V( c ) \
457 outline0("LD A, $7"); \
459 outline1("LD A, (%s)", c ); \
461 outline0("CALL SN76489STOP" );
463#define STOP_FREQUENCY_SV( c ) \
465 outline0("LD A, $7"); \
467 outline1("LD A, (%s)", c ); \
469 outline0("CALL SN76489STOP" );
473 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
679 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
688 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
703 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
712 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
726 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
746 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
762 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
964 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
967 outline1(
"LD A, (%s)", _frequency );
983 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
1002 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
1005 outline0(
"LD HL, SN76489FREQTABLE");
1020 outline1(
"LD A, (%s)", _channels );
1031 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
1035 outline1(
"LD A, (%s)", _channels );
1045 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
1047 deploy( music, src_hw_sn76489z_music_asm );
1051 outline1(
"LD A, $%2.2x", ( _size>>8 ) & 0xff);
1053 outline1(
"LD A, $%2.2x", _size & 0xff );
1056 outline0(
"LD (SN76489MUSICLOOP), A");
1058 outline0(
"LD (SN76489MUSICTYPE), A");
1066 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
1075 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
1084 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
1088 outline1(
"LD HL, (%s)", _duration );
1104 deploy( sn76489vars, src_hw_sn76489z_vars_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)
#define PROGRAM_DURATION(c, d)
void sn76489z_start(Environment *_environment, int _channels)
#define PROGRAM_TRIANGLE_SV(c)
#define PROGRAM_SAW_SV(c)
void sn76489z_set_frequency_vars(Environment *_environment, char *_channels, char *_frequency)
void sn76489z_wait_duration(Environment *_environment, int _channel)
#define PROGRAM_FREQUENCY(c, f)
#define PROGRAM_NOISE_SV(c)
void sn76489z_set_pitch_vars(Environment *_environment, char *_channels, char *_pitch)
void sn76489z_set_note(Environment *_environment, int _channels, int _note)
void sn76489z_set_volume_semi_var(Environment *_environment, char *_channel, int _volume)
void sn76489z_set_parameter(Environment *_environment, int _channels, int _parameter, int _value)
void sn76489z_stop_vars(Environment *_environment, char *_channels)
void sn76489z_set_note_vars(Environment *_environment, char *_channels, char *_note)
void sn76489z_set_duration(Environment *_environment, int _channel, int _duration)
#define STOP_FREQUENCY(c)
#define PROGRAM_ATTACK_DECAY(c, a, d)
#define PROGRAM_SUSTAIN_RELEASE_SV(c, s, r)
void sn76489z_set_pitch(Environment *_environment, int _channels, int _pitch)
void sn76489z_initialization(Environment *_environment)
#define PROGRAM_SUSTAIN_RELEASE(c, s, r)
void sn76489z_set_volume(Environment *_environment, int _channels, int _volume)
#define PROGRAM_PULSE_SV(c, p)
#define PROGRAM_PITCH(c, f)
void sn76489z_finalization(Environment *_environment)
void sn76489z_music(Environment *_environment, char *_music, int _size, int _loop, int _type)
void sn76489z_wait_duration_vars(Environment *_environment, char *_channel)
void sn76489z_stop(Environment *_environment, int _channels)
#define PROGRAM_PULSE(c, p)
void sn76489z_start_var(Environment *_environment, char *_channels)
void sn76489z_set_frequency(Environment *_environment, int _channels, int _frequency)
void sn76489z_set_program_semi_var(Environment *_environment, char *_channels, int _program)
#define PROGRAM_TRIANGLE(c)
void sn76489z_set_duration_vars(Environment *_environment, char *_channel, char *_duration)
void sn76489z_set_program(Environment *_environment, int _channels, int _program)
#define PROGRAM_ATTACK_DECAY_SV(c, a, d)
void sn76489z_set_volume_vars(Environment *_environment, char *_channels, char *_volume)
#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 deploy_preferred(s, e)
#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