CMidi.hpp

Go to the documentation of this file.
00001 #ifndef __CMidi__
00002 #define __CMidi__
00003 
00004 //  ===========================================================================
00005 
00006 #include <MathTools/CMathTools.hpp>
00007 #include <Basics/CString.hpp>
00008 
00009 //  ===========================================================================
00010 
00011 using Exponent::MathTools::CMathTools;
00012 using Exponent::Basics::CString;
00013 
00014 //  ===========================================================================
00015 
00016 namespace Exponent
00017 {
00018     namespace Midi
00019     {
00037         class CMidi
00038         {
00039         public:
00040 
00041 //  ===========================================================================
00042 
00048             FORCEINLINE static double midiToFloat(const long midiValue)
00049             {
00050                 const static double midiScalar = 0.00787401574803149606299212598425197;
00051                 return CMathTools::clamp(midiValue * midiScalar);
00052             }
00053 
00059             FORCEINLINE static long floatToMidi(const double value)
00060             {
00061                 const static double floatScalar = 127.0;
00062                 return (long)(value * floatScalar);
00063             }
00064 
00070             static void getMidiNoteString(const long midiNote, CString &theString)
00071             {
00072                 if (midiNote >= 0 && midiNote < 128)
00073                 {
00074                     const static char *CMIDI_NOTE_STRINGS[] = { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "Bb", "B" };
00075                     theString.setStringWithFormat("%s%li", CMIDI_NOTE_STRINGS[midiNote % 12], (midiNote / 12) - 1);
00076                 }
00077                 else
00078                 {
00079                     theString = "Range Error";
00080                 }
00081             }
00082 
00088             static bool isWhiteNote(const long midiNote)
00089             {
00090                 const long index = midiNote % 12;
00091                 return (!(index == 1 || index == 3 || index == 5 || index == 8 || index == 10));
00092             }
00093 
00099             static bool isBlackNote(const long midiNote)
00100             {
00101                 const long index = midiNote % 12;
00102                 return (index == 1 || index == 3 || index == 5 || index == 8 || index == 10);
00103             }
00104 
00105 //  ===========================================================================
00106 
00107             const static long CMIDI_MIDI_NONE                   = 0x0;      
00109 //  ===========================================================================
00110 
00111             const static long CMIDI_NOTE_OFF                    = 0x80;     
00112             const static long CMIDI_NOTE_ON                     = 0x90;     
00113             const static long CMIDI_POLY_PRESSURE               = 0xA0;     
00114             const static long CMIDI_CONTROL_CHANGE              = 0xB0;     
00115             const static long CMIDI_PROGRAM_CHANGE              = 0xC0;     
00116             const static long CMIDI_CHANNEL_PRESSURE            = 0xD0;     
00117             const static long CMIDI_PITCH_BEND                  = 0xE0;     
00119 //  ===========================================================================
00120 
00121             // Sysex and more
00122             const static long CMIDI_SYSEX                       = 0xF0;     
00123             const static long CMIDI_SYSTEM_COMMON               = 0xF1;     
00124             const static long CMIDI_SONG_POSITION               = 0xF2;     
00125             const static long CMIDI_SONG_SELECT                 = 0xF3;     
00126             const static long CMIDI_F4                          = 0xF4;     
00127             const static long CMIDI_F5                          = 0xF5;     
00128             const static long CMIDI_TUNER_QUEST                 = 0xF6;     
00129             const static long CMIDI_EOX                         = 0xF7;     
00130             const static long CMIDI_TIMING_CLOCK                = 0xF8;     
00131             const static long CMIDI_F9                          = 0xF9;     
00132             const static long CMIDI_START                       = 0xFA;     
00133             const static long CMIDI_CONTINUE                    = 0xFB;     
00134             const static long CMIDI_STOP                        = 0xFC;     
00135             const static long CMIDI_FD                          = 0xFD;     
00136             const static long CMIDI_ACTIVE_SENSING              = 0xFE;     
00137             const static long CMIDI_SYSTEM_RESET                = 0xFF;     
00139 //  ===========================================================================
00140 
00141             // control numbers for m_midi_CONTROL_CHANGE (m_midi status byte 0xB0)
00142 
00143             // MSBs
00144             const static long CMIDI_BACK_CHANGE                 = 0x00;     
00145             const static long CMIDI_MODULATION_WHEEL            = 0x01;     
00146             const static long CMIDI_BREATH_CONTROL              = 0x02;     
00147             const static long CMIDI_UNDEFINED_CC03              = 0x03;     
00148             const static long CMIDI_FOOT_CONTROLLER             = 0x04;     
00149             const static long CMIDI_PORTAMENTO_TIME             = 0x05;     
00150             const static long CMIDI_DATA_ENTRY                  = 0x06;     
00151             const static long CMIDI_CHANNEL_VOLUME              = 0x07;     
00152             const static long CMIDI_BALANCE                     = 0x08;     
00153             const static long CMIDI_UNDEFINED_CC09              = 0x09;     
00154             const static long CMIDI_PAN                         = 0x0A;     
00155             const static long CMIDI_EXPRESSION                  = 0x0B;     
00156             const static long CMIDI_EFFECT_CONTROL1             = 0x0C;     
00157             const static long CMIDI_EFFECT_CONTROL2             = 0x0D;     
00158             const static long CMIDI_UNDEFINED_CC0E              = 0x0E;     
00159             const static long CMIDI_UNDEFINED_CC0F              = 0x0F;     
00160             const static long CMIDI_GENERAL_PURPOSE1            = 0x10;     
00161             const static long CMIDI_GENERAL_PURPOSE2            = 0x11;     
00162             const static long CMIDI_GENERAL_PURPOSE3            = 0x12;     
00163             const static long CMIDI_GENERAL_PURPOSE4            = 0x13;     
00164             const static long CMIDI_UNDEFINED_CC14              = 0x14;     
00165             const static long CMIDI_UNDEFINED_CC15              = 0x15;     
00166             const static long CMIDI_UNDEFINED_CC16              = 0x16;     
00167             const static long CMIDI_UNDEFINED_CC17              = 0x17;     
00168             const static long CMIDI_UNDEFINED_CC18              = 0x18;     
00169             const static long CMIDI_UNDEFINED_CC19              = 0x19;     
00170             const static long CMIDI_UNDEFINED_CC1A              = 0x1A;     
00171             const static long CMIDI_UNDEFINED_CC1B              = 0x1B;     
00172             const static long CMIDI_UNDEFINED_CC1C              = 0x1C;     
00173             const static long CMIDI_UNDEFINED_CC1D              = 0x1D;     
00174             const static long CMIDI_UNDEFINED_CC1E              = 0x1E;     
00175             const static long CMIDI_UNDEFINED_CC1F              = 0x1F;     
00177 //  ===========================================================================
00178 
00179             //[0x20:0x3F] are LSBs
00180 
00181             const static long CMIDI_SUSTAIN                     = 0x40;     
00182             const static long CMIDI_PORTAMENTO                  = 0x41;     
00183             const static long CMIDI_SOSTENUTO                   = 0x42;     
00184             const static long CMIDI_SOFT                        = 0x43;     
00185             const static long CMIDI_HOLD2                       = 0x45;     
00186             const static long CMIDI_GENERAL_PURPOSE5            = 0x50;     
00187             const static long CMIDI_GENERAL_PURPOSE6            = 0x51;     
00188             const static long CMIDI_GENERAL_PURPOSE7            = 0x52;     
00189             const static long CMIDI_GENERAL_PURPOSE8            = 0x53;     
00191 //  ===========================================================================
00192 
00193             const static long CMIDI_EXTERNAL_EFFECTS_DEPTH      = 0x5B;     
00194             const static long CMIDI_TREMELO_DEPTH               = 0x5C;     
00195             const static long CMIDI_CHORUS_DEPTH                = 0x5D;     
00196             const static long CMIDI_CELESTE_DEPTH               = 0x5E;     
00197             const static long CMIDI_PHASE_DEPTH                 = 0x5F;     
00198             const static long CMIDI_DATA_INCREMENT              = 0x60;     
00199             const static long CMIDI_DATA_DECREMENT              = 0x61;     
00200             const static long CMIDI_NON_REG_PARAM_NUMBER_MSB    = 0x62;     
00201             const static long CMIDI_NON_REG_PARAM_NUMBER_LSB    = 0x63;     
00202             const static long CMIDI_REG_PARAM_NUMBER_MSB        = 0x64;     
00203             const static long CMIDI_REG_PARAM_NUMBER_LSB        = 0x65;     
00205 //  ===========================================================================
00206 
00207             const static long CMIDI_ALL_SOUNDS_OFF              = 0x78;     
00208             const static long CMIDI_RESET_ALL_CONTROLLERS       = 0x79;     
00209             const static long CMIDI_LOCAL_CONTROL               = 0x7A;     
00210             const static long CMIDI_ALL_NOTES_OFF               = 0x7B;     
00211             const static long CMIDI_OMNI_MODE_OFF               = 0x7C;     
00212             const static long CMIDI_OMNI_MODE_ON                = 0x7D;     
00213             const static long CMIDI_MONO_MODE_ON                = 0x7E;     
00214             const static long CMIDI_POLY_MODE_ON                = 0x7F;     
00216 //  ===========================================================================
00217 
00218             // Standard m_midi info
00219             const static long CMIDI_MAX_NOTES                   = 128;      
00220             const static long CMIDI_MAX_CC                      = 128;      
00221             const static long CMIDI_MAX_NUMBER_OF_NOTES         = 127;      
00223 //  ===========================================================================
00224 
00225             const static long CMIDI_STATUS_MASK                 = 0xF0;     
00226             const static long CMIDI_CHANNEL_MASK                = 0x08;     
00227             const static long CMIDI_VALUE_MASK                  = 0x7F;     
00229 //  ===========================================================================
00230 
00231             // MIDI FILE VARIABLES
00232             const static long CMIDI_MIDIFILE_TRACK_NUM          = 0x20;     
00233             const static long CMIDI_MIDIFILE_TEMPO              = 0x51;     
00234             const static long CMIDI_MIDIFILE_TIME_SIGNATURE     = 0x58;     
00235             const static long CMIDI_MIDIFILE_TRACK_NAME         = 0x03;     
00237         };
00238     }
00239 }
00240 #endif  // End of CMidi.hpp

Infinity API - CMidi.hpp Source File generated on 7 Mar 2007