/* * midiinfo.h - A collection of macros and constants for MIDI programming. * These should work independant of 'Steevs MIDI Library' * Version 1.4 * * AUTHOR: Steven Goodwin (StevenGoodwin@gmail.com) * Copyright 1998-2010, Steven Goodwin. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License,or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _MIDIINFO_H #define _MIDIINFO_H /* ** MIDI Messages [ consist of message, and optional bytes ] ** a 'msg' has two nibbles: message type & channel */ typedef enum { msgNoteOff = 0x80, /* [ pitch, volume ] */ msgNoteOn = 0x90, /* [ pitch, volume ] */ msgNoteKeyPressure = 0xa0, /* [ pitch, pressure (after touch) ] */ msgSetParameter = 0xb0, /* [ param number (CC), setting ] */ msgSetProgram = 0xc0, /* [ program ] */ msgChangePressure = 0xd0, /* [ pressure (after touch) ] */ msgSetPitchWheel = 0xe0, /* [ LSB, MSG (two 7 bit values) ] */ msgMetaEvent = 0xff, msgSysEx1 = 0xf0, msgSysEx2 = 0xf7, /* Alternative names */ msgPatchChange = msgSetProgram, msgControlChange = msgSetParameter, msgSysMask = 0xf0, } tMIDI_MSG; /* ** Control Changes */ typedef enum { /* 0-31, where defined, all indicate the MSB */ ccBankSelect = 0, ccModulation = 1, ccBreathControl = 2, ccUndefined3 = 3, ccFootControl = 4, ccPortamentoTime = 5, ccDateEntry = 6, ccVolume = 7, ccBalance = 8, ccUndefined9 = 9, ccPan = 10, ccExpression = 11, ccEffectControl1 = 12, ccEffectControl2 = 13, ccUndefined14 = 14, ccUndefined15 = 15, ccGeneralPurpose1 = 16, ccGeneralPurpose2 = 17, ccGeneralPurpose3 = 18, ccGeneralPurpose4 = 19, /* 20-31 are undefined */ ccUndefined20 = 20, ccUndefined21 = 21, ccUndefined22 = 22, ccUndefined23 = 23, ccUndefined24 = 24, ccUndefined25 = 25, ccUndefined26 = 26, ccUndefined27 = 27, ccUndefined28 = 28, ccUndefined29 = 29, ccUndefined30 = 30, ccUndefined31 = 31, /* LSB for control changes 0-31 32-63 */ ccBankSelectLSB = 32, ccModulationLSB = 33, ccBreathControlLSB = 34, ccUndefined35 = 35, ccFootControlLSB = 36, ccPortamentoTimeLSB = 37, ccDateEntryLSB = 38, ccVolumeLSB = 39, ccBalanceLSB = 40, ccUndefined41 = 41, ccPanLSB = 42, ccExpressionLSB = 43, ccEffectControl1LSB = 44, ccEffectControl2LSB = 45, ccUndefined46 = 46, ccUndefined47 = 47, ccGeneralPurpose1LSB = 48, ccGeneralPurpose2LSB = 49, ccGeneralPurpose3LSB = 50, ccGeneralPurpose4LSB = 51, /* 52-63 are undefined */ ccUndefined52 = 52, ccUndefined53 = 53, ccUndefined54 = 54, ccUndefined55 = 55, ccUndefined56 = 56, ccUndefined57 = 57, ccUndefined58 = 58, ccUndefined59 = 59, ccUndefined60 = 60, ccUndefined61 = 61, ccUndefined62 = 62, ccUndefined63 = 63, ccSustainPedal = 64, ccPortamento = 65, ccPedalSustenuto = 66, ccPedalSoft = 67, ccLegatoFootSwitch = 68, ccHold2 = 69, ccSoundVariation = 70, ccTimbre = 71, ccReleaseTime = 72, ccAttackTime = 73, ccBrightness = 74, ccReverb = 75, ccDelay = 76, ccPitchTranspose = 77, ccFlange = 78, ccSpecialFX = 79, ccGeneralPurpose5 = 80, ccGeneralPurpose6 = 81, ccGeneralPurpose7 = 82, ccGeneralPurpose8 = 83, ccPortamentoControl = 84, /* 85-90 are undefined */ ccUndefined85 = 85, ccUndefined86 = 86, ccUndefined87 = 87, ccUndefined88 = 88, ccUndefined89 = 89, ccUndefined90 = 90, /* Effects depth */ ccFXDepth = 91, ccTremeloDepth = 92, ccChorusDepth = 93, ccCelestaDepth = 94, ccPhaserDepth = 95, ccDataInc = 96, ccDataDec = 97, ccNonRegParamLSB = 98, ccNonRefParamMSB = 99, ccRegParamLSB = 100, ccRegParamMSB = 101, /* 102-119 are undefined */ ccUndefined102 = 102, ccUndefined103 = 103, ccUndefined104 = 104, ccUndefined105 = 105, ccUndefined106 = 106, ccUndefined107 = 107, ccUndefined108 = 108, ccUndefined109 = 109, ccUndefined110 = 110, ccUndefined111 = 111, ccUndefined112 = 112, ccUndefined113 = 113, ccUndefined114 = 114, ccUndefined115 = 115, ccUndefined116 = 116, ccUndefined117 = 117, ccUndefined118 = 118, ccUndefined119 = 119, ccAllSoundOff = 120, ccResetAllControllers = 121, ccLocalControl = 122, ccAllNotesOff = 123, ccOmniModeOff = 124, ccOmniModeOn = 125, ccMonoModeOn = 126, ccPolyModeOn = 127, /* Alternative names */ ccModWheel = 1, /* All sound controllers have only LSB */ ccHarmContent = 71, ccSoundController1 = 70, ccSoundController2 = 71, ccSoundController3 = 72, ccSoundController4 = 73, ccSoundController5 = 74, ccSoundController6 = 75, ccSoundController7 = 76, ccSoundController8 = 77, ccSoundController9 = 78, ccSoundController10 = 79, ccEffect1Depth = 91, ccEffect2Depth = 92, ccEffect3Depth = 93, ccEffect4Depth = 94, ccEffect5Depth = 95, ccDetuneDepth = 94, } tMIDI_CC; /* ** System Common (Status byte: 1111 0ttt) */ typedef enum { sysUndefinedF1 = 0xf1, sysSongPosition = 0xf2, /* [LSB, MSB] */ sysSongSelect = 0xf3, sysUndefinedF4 = 0xf4, sysUndefinedF5 = 0xf5, sysTuneRequest = 0xf6, sysEOX = 0xf7, /* End of Exclusive */ } tMIDI_SYSCOMMON; /* ** System Real Time (Status byte: 1111 1ttt) */ typedef enum { srtTimingClock = 0xf8, srtUndefinedF9 = 0xf9, srtStart = 0xfa, srtContinue = 0xfb, srtStop = 0xfc, srtUndefinedFD = 0xfd, srtActiveSensing = 0xfe, srtSystemReset = 0xff, } tMIDI_REALTIME; /* ** System Exclusive (Status byte: 1111 0000) ** ** The first byte of a sysex must be the identification number ** (7 bits, MSB=0). This is followed by an arbitary number of ** data bytes (all MSB=0), and ending in the sexEOX msg. ** Note: Any other status byte (where MSB=1) will also terminate ** a sysex message, with the exception of the System Real Time ** events above. */ typedef enum { sexEOX = 0xf7, } tMIDI_SYSEX; /* ** Key signatures */ typedef enum { keyCFlatMaj = 0x87, keyGFlatMaj = 0x86, keyDFlatMaj = 0x85, keyAFlatMaj = 0x84, keyEFlatMaj = 0x83, keyBFlatMaj = 0x82, keyFMaj = 0x81, keyCMaj = 0x00, keyGMaj = 0x01, keyDMaj = 0x02, keyAMaj = 0x03, keyEMaj = 0x04, keyBMaj = 0x05, keyFSharpMaj = 0x06, keyCSharpMaj = 0x07, keyCFlatMin = 0xc7, keyGFlatMin = 0xc6, keyDFlatMin = 0xc5, keyAFlatMin = 0xc4, keyEFlatMin = 0xc3, keyBFlatMin = 0xc2, keyFMin = 0xc1, keyCMin = 0x40, keyGMin = 0x41, keyDMin = 0x42, keyAMin = 0x43, keyEMin = 0x44, keyBMin = 0x45, keyFSharpMin = 0x46, keyCSharpMin = 0x47, /* Format: Bit 7=represent as negative, Bit 6=Minor key, bits 0-3=key id*/ /* By no coincidence, masking out the 'minor' flag,we have a signed char value */ keyMaskNeg = 0x80, keyMaskFlatKeys = 0x80, keyMaskMin = 0x40, keyMaskKey = 0x07, } tMIDI_KEYSIG; typedef enum { metaSequenceNumber = 0, /* followed by 2 and then the sequence number */ /* Text Information */ metaTextEvent = 1, metaCopyright = 2, metaTrackName = 3, metaInstrument = 4, metaLyric = 5, metaMarker = 6, metaCuePoint = 7, /* Data */ metaMIDIPort = 0x21, /* followed by 1, then the port number */ metaEndSequence = 0x2f, /* followed by zero */ metaSetTempo = 0x51, /* followed by 3 (size), and time between beats in us: us = 60000000/tempo. Write as three bytes, MSG first */ metaSMPTEOffset = 0x54, /* followed by 5 (size), and 5 bytes detailing frame info: hr.mins.sec:frame.ff */ metaTimeSig = 0x58, /* followed by 4 (size), and 4 bytes detailing nominator and denominator of sig,clock_in_metro_tick and notated_32nds_in_quarter */ metaKeySig = 0x59, /* followed by 2 (size), and the key (-7=7 flats, 0=key of C,7=7 sharps)), followed by a 'major?' flag (0=major, 1=minor) */ /* Custom */ metaSequencerSpecific = 0x7f, /* followed by the number of bytes, then the data */ } tMIDI_META; typedef enum { textTextEvent = 1, textCopyright = 2, textTrackName = 3, textInstrument = 4, textLyric = 5, textMarker = 6, textCuePoint = 7, } tMIDI_TEXT; /* ** MIDI Constants */ #define MIDI_WHEEL_CENTRE 8192 /* ** MIDI Channels */ #define MIDI_CHANNEL_1 1 #define MIDI_CHANNEL_2 2 #define MIDI_CHANNEL_3 3 #define MIDI_CHANNEL_4 4 #define MIDI_CHANNEL_5 5 #define MIDI_CHANNEL_6 6 #define MIDI_CHANNEL_7 7 #define MIDI_CHANNEL_8 8 #define MIDI_CHANNEL_9 9 #define MIDI_CHANNEL_10 10 #define MIDI_CHANNEL_11 11 #define MIDI_CHANNEL_12 12 #define MIDI_CHANNEL_13 13 #define MIDI_CHANNEL_14 14 #define MIDI_CHANNEL_15 15 #define MIDI_CHANNEL_16 16 #define MIDI_CHANNEL_DRUMS 10 /* ** Notes */ #define MIDI_OCTAVE 12 /* ** The MIDI spec only indicates middle C to be ** 60. It doesn't indicate which octave this is. ** Some may consider 4, if they label octaves ** from -1, instead of 0. I have adopted an octave ** number here for tighter intergration. */ #define MIDI_NOTE_MIDDLE_C MIDI_NOTE_C5 #define MIDI_NOTE_C 0 #define MIDI_NOTE_C_SHARP 1 #define MIDI_NOTE_C_FLAT -11 #define MIDI_NOTE_D 2 #define MIDI_NOTE_D_SHARP 3 #define MIDI_NOTE_D_FLAT 1 #define MIDI_NOTE_E 4 #define MIDI_NOTE_E_SHARP 5 #define MIDI_NOTE_E_FLAT 3 #define MIDI_NOTE_F 5 #define MIDI_NOTE_F_SHARP 6 #define MIDI_NOTE_F_FLAT 5 #define MIDI_NOTE_G 7 #define MIDI_NOTE_G_SHARP 8 #define MIDI_NOTE_G_FLAT 6 #define MIDI_NOTE_A 9 #define MIDI_NOTE_A_SHARP 10 #define MIDI_NOTE_A_FLAT 8 #define MIDI_NOTE_B 11 #define MIDI_NOTE_B_SHARP 12 #define MIDI_NOTE_B_FLAT 10 #define MIDI_NOTE_C0 0 #define MIDI_NOTE_C1 12 #define MIDI_NOTE_C2 24 #define MIDI_NOTE_C3 36 #define MIDI_NOTE_C4 48 #define MIDI_NOTE_C5 60 #define MIDI_NOTE_C6 72 #define MIDI_NOTE_C7 84 #define MIDI_NOTE_C8 96 #define MIDI_NOTE_C9 108 #define MIDI_NOTE_C10 120 #define MIDI_OCTAVE_0 MIDI_NOTE_C0 #define MIDI_OCTAVE_1 MIDI_NOTE_C1 #define MIDI_OCTAVE_2 MIDI_NOTE_C2 #define MIDI_OCTAVE_3 MIDI_NOTE_C3 #define MIDI_OCTAVE_4 MIDI_NOTE_C4 #define MIDI_OCTAVE_5 MIDI_NOTE_C5 #define MIDI_OCTAVE_6 MIDI_NOTE_C6 #define MIDI_OCTAVE_7 MIDI_NOTE_C7 #define MIDI_OCTAVE_8 MIDI_NOTE_C8 #define MIDI_OCTAVE_9 MIDI_NOTE_C9 #define MIDI_OCTAVE_10 MIDI_NOTE_C10 /* ** Note Duration (on PPQN=384) */ #define MIDI_NOTE_BREVE 1536 #define MIDI_NOTE_MINIM 768 #define MIDI_NOTE_CROCHET 384 #define MIDI_NOTE_QUAVER 192 #define MIDI_NOTE_SEMIQUAVER 96 #define MIDI_NOTE_SEMIDEMIQUAVER 48 #define MIDI_NOTE_DOTTED_MINIM (768+384) #define MIDI_NOTE_DOTTED_CROCHET (384+192) #define MIDI_NOTE_DOTTED_QUAVER (192+96) #define MIDI_NOTE_DOTTED_SEMIQUAVER (96+48) #define MIDI_NOTE_DOTTED_SEMIDEMIQUAVER (48+24) #define MIDI_NOTE_TRIPLE_CROCHET 256 /* 3 notes in 2 crochet */ /* ** Notes - Volume */ #define MIDI_VOL_FULL 127 #define MIDI_VOL_HALF 64 #define MIDI_VOL_OFF 0 /* ** Notes - Instrument Names */ #define MIDI_PATCH_ACOUSTIC_GRAND_PIANO 0 #define MIDI_PATCH_BRIGHT_ACOUSTIC_PIANO 1 #define MIDI_PATCH_ELECTRIC_GRAND_PIANO 2 #define MIDI_PATCH_HONKY_TONK_PIANO 3 #define MIDI_PATCH_ELECTRIC_PIANO_1 4 #define MIDI_PATCH_ELECTRIC_PIANO_2 5 #define MIDI_PATCH_HARPSICHORD 6 #define MIDI_PATCH_CLAVI 7 #define MIDI_PATCH_CELESTA 8 #define MIDI_PATCH_GLOCKENSPIEL 9 #define MIDI_PATCH_MUSIC_BOX 10 #define MIDI_PATCH_VIBRAPHONE 11 #define MIDI_PATCH_MARIMBA 12 #define MIDI_PATCH_XYLOPHONE 13 #define MIDI_PATCH_TUBULAR_BELLS 14 #define MIDI_PATCH_DULCIMER 15 #define MIDI_PATCH_DRAWBAR_ORGAN 16 #define MIDI_PATCH_PERCUSSIVE_ORGAN 17 #define MIDI_PATCH_ROCK_ORGAN 18 #define MIDI_PATCH_CHURCH_ORGAN 19 #define MIDI_PATCH_REED_ORGAN 20 #define MIDI_PATCH_ACCORDION 21 #define MIDI_PATCH_HARMONICA 22 #define MIDI_PATCH_TANGO_ACCORDION 23 #define MIDI_PATCH_ACOUSTIC_GUITAR_NYLON 24 #define MIDI_PATCH_ACOUSTIC_GUITAR_STEEL 25 #define MIDI_PATCH_ELECTRIC_GUITAR_JAZZ 26 #define MIDI_PATCH_ELECTRIC_GUITAR_CLEAN 27 #define MIDI_PATCH_ELECTRIC_GUITAR_MUTED 28 #define MIDI_PATCH_OVERDRIVEN_GUITAR 29 #define MIDI_PATCH_DISTORTION_GUITAR 30 #define MIDI_PATCH_GUITAR_HARMONICS 31 #define MIDI_PATCH_ACOUSTIC_BASS 32 #define MIDI_PATCH_ELECTRIC_BASS_FINGER 33 #define MIDI_PATCH_ELECTRIC_BASS_PICK 34 #define MIDI_PATCH_FRETLESS_BASS 35 #define MIDI_PATCH_SLAP_BASS_1 36 #define MIDI_PATCH_SLAP_BASS_2 37 #define MIDI_PATCH_SYNTH_BASS_1 38 #define MIDI_PATCH_SYNTH_BASS_2 39 #define MIDI_PATCH_VIOLIN 40 #define MIDI_PATCH_VIOLA 41 #define MIDI_PATCH_CELLO 42 #define MIDI_PATCH_CONTRABASS 43 #define MIDI_PATCH_TREMOLO_STRINGS 44 #define MIDI_PATCH_PIZZICATO_STRINGS 45 #define MIDI_PATCH_ORCHESTRAL_HARP 46 #define MIDI_PATCH_TIMPANI 47 #define MIDI_PATCH_STRING_ENSEMBLE_1 48 #define MIDI_PATCH_STRING_ENSEMBLE_2 49 #define MIDI_PATCH_SYNTHSTRINGS_1 50 #define MIDI_PATCH_SYNTHSTRINGS_2 51 #define MIDI_PATCH_CHOIR_AAHS 52 #define MIDI_PATCH_VOICE_OOHS 53 #define MIDI_PATCH_SYNTH_VOICE 54 #define MIDI_PATCH_ORCHESTRA_HIT 55 #define MIDI_PATCH_TRUMPET 56 #define MIDI_PATCH_TROMBONE 57 #define MIDI_PATCH_TUBA 58 #define MIDI_PATCH_MUTED_TRUMPET 59 #define MIDI_PATCH_FRENCH_HORN 60 #define MIDI_PATCH_BRASS_SECTION 61 #define MIDI_PATCH_SYNTHBRASS_1 62 #define MIDI_PATCH_SYNTHBRASS_2 63 #define MIDI_PATCH_SOPRANO_SAX 64 #define MIDI_PATCH_ALTO_SAX 65 #define MIDI_PATCH_TENOR_SAX 66 #define MIDI_PATCH_BARITONE_SAX 67 #define MIDI_PATCH_OBOE 68 #define MIDI_PATCH_ENGLISH_HORN 69 #define MIDI_PATCH_BASSOON 70 #define MIDI_PATCH_CLARINET 71 #define MIDI_PATCH_PICCOLO 72 #define MIDI_PATCH_FLUTE 73 #define MIDI_PATCH_RECORDER 74 #define MIDI_PATCH_PAN_FLUTE 75 #define MIDI_PATCH_BLOWN_BOTTLE 76 #define MIDI_PATCH_SHAKUHACHI 77 #define MIDI_PATCH_WHISTLE 78 #define MIDI_PATCH_OCARINA 79 #define MIDI_PATCH_LEAD_1_SQUARE 80 #define MIDI_PATCH_LEAD_2_SAWTOOTH 81 #define MIDI_PATCH_LEAD_3_CALLIOPE 82 #define MIDI_PATCH_LEAD_4_CHIFF 83 #define MIDI_PATCH_LEAD_5_CHARANG 84 #define MIDI_PATCH_LEAD_6_VOICE 85 #define MIDI_PATCH_LEAD_7_FIFTHS 86 #define MIDI_PATCH_LEAD_8_BASS_AND_LEAD 87 #define MIDI_PATCH_PAD_1_NEW_AGE 88 #define MIDI_PATCH_PAD_2_WARM 89 #define MIDI_PATCH_PAD_3_POLYSYNTH 90 #define MIDI_PATCH_PAD_4_CHOIR 91 #define MIDI_PATCH_PAD_5_BOWED 92 #define MIDI_PATCH_PAD_6_METALLIC 93 #define MIDI_PATCH_PAD_7_HALO 94 #define MIDI_PATCH_PAD_8_SWEEP 95 #define MIDI_PATCH_FX_1_RAIN 96 #define MIDI_PATCH_FX_2_SOUNDTRACK 97 #define MIDI_PATCH_FX_3_CRYSTAL 98 #define MIDI_PATCH_FX_4_ATMOSPHERE 99 #define MIDI_PATCH_FX_5_BRIGHTNESS 100 #define MIDI_PATCH_FX_6_GOBLINS 101 #define MIDI_PATCH_FX_7_ECHOES 102 #define MIDI_PATCH_FX_8_SCIFI 103 #define MIDI_PATCH_SITAR 104 #define MIDI_PATCH_BANJO 105 #define MIDI_PATCH_SHAMISEN 106 #define MIDI_PATCH_KOTO 107 #define MIDI_PATCH_KALIMBA 108 #define MIDI_PATCH_BAG_PIPE 109 #define MIDI_PATCH_FIDDLE 110 #define MIDI_PATCH_SHANAI 111 #define MIDI_PATCH_TINKLE_BELL 112 #define MIDI_PATCH_AGOGO 113 #define MIDI_PATCH_STEEL_DRUMS 114 #define MIDI_PATCH_WOODBLOCK 115 #define MIDI_PATCH_TAIKO_DRUM 116 #define MIDI_PATCH_MELODIC_TOM 117 #define MIDI_PATCH_SYNTH_DRUM 118 #define MIDI_PATCH_REVERSE_CYMBAL 119 #define MIDI_PATCH_GUITAR_FRET NOISE 120 #define MIDI_PATCH_BREATH_NOISE 121 #define MIDI_PATCH_SEASHORE 122 #define MIDI_PATCH_BIRD_TWEET 123 #define MIDI_PATCH_TELEPHONE_RING 124 #define MIDI_PATCH_HELICOPTER 125 #define MIDI_PATCH_APPLAUSE 126 #define MIDI_PATCH_GUNSHOT 127 /* ** Notes - Keyed Percussion Names */ #define MIDI_DRUM_ACOUSTIC_BASS_DRUM 35 #define MIDI_DRUM_BASS_DRUM 36 #define MIDI_DRUM_SIDE_STICK 37 #define MIDI_DRUM_ACOUSTIC_SNARE 38 #define MIDI_DRUM_HAND_CLAP 39 #define MIDI_DRUM_ELECTRIC_SNARE 40 #define MIDI_DRUM_LOW_FLOOR_TOM 41 #define MIDI_DRUM_CLOSED_HI_HAT 42 #define MIDI_DRUM_HIGH_FLOOR_TOM 43 #define MIDI_DRUM_PEDAL_HI_HAT 44 #define MIDI_DRUM_LOW_TOM 45 #define MIDI_DRUM_OPEN_HI_HAT 46 #define MIDI_DRUM_LOW_MID_TOM 47 #define MIDI_DRUM_HI_MID_TOM 48 #define MIDI_DRUM_CRASH_CYMBAL_1 49 #define MIDI_DRUM_HIGH_TOM 50 #define MIDI_DRUM_RIDE_CYMBAL_1 51 #define MIDI_DRUM_CHINESE_CYMBAL 52 #define MIDI_DRUM_RIDE_BELL 53 #define MIDI_DRUM_TAMBOURINE 54 #define MIDI_DRUM_SPLASH_CYMBAL 55 #define MIDI_DRUM_COWBELL 56 #define MIDI_DRUM_CRASH_CYMBAL_2 57 #define MIDI_DRUM_VIBRA_SLAP 58 #define MIDI_DRUM_RIDE_CYMBAL_2 59 #define MIDI_DRUM_HI_BONGO 60 #define MIDI_DRUM_LOW_BONGO 61 #define MIDI_DRUM_MUTE_HI_CONGA 62 #define MIDI_DRUM_OPEN_HI_CONGA 63 #define MIDI_DRUM_LOW_CONGA 64 #define MIDI_DRUM_HIGH_TIMBALE 65 #define MIDI_DRUM_LOW_TIMBALE 66 #define MIDI_DRUM_HIGH_AGOGO 67 #define MIDI_DRUM_LOW_AGOGO 68 #define MIDI_DRUM_CABASA 69 #define MIDI_DRUM_MARACAS 70 #define MIDI_DRUM_SHORT_WHISTLE 71 #define MIDI_DRUM_LONG_WHISTLE 72 #define MIDI_DRUM_SHORT_GUIRO 73 #define MIDI_DRUM_LONG_GUIRO 74 #define MIDI_DRUM_CLAVES 75 #define MIDI_DRUM_HI_WOOD_BLOCK 76 #define MIDI_DRUM_LOW_WOOD_BLOCK 77 #define MIDI_DRUM_MUTE_CUICA 78 #define MIDI_DRUM_OPEN_CUICA 79 #define MIDI_DRUM_MUTE_TRIANGLE 80 #define MIDI_DRUM_OPEN_TRIANGLE 81 #endif /* _MIDIINFO_H */