1 /* 2 Copyright (C) 2016 Apple Inc. All Rights Reserved. 3 See LICENSE.txt for this sample’s licensing information 4 5 Abstract: 6 Part of Core Audio AUBase Classes 7 */ 8 9 #ifndef __AUMIDIBase_h__ 10 #define __AUMIDIBase_h__ 11 12 #include "AUBase.h" 13 14 #if CA_AUTO_MIDI_MAP 15 #include "CAAUMIDIMapManager.h" 16 #endif 17 18 struct MIDIPacketList; 19 20 // ________________________________________________________________________ 21 // MusicDeviceBase 22 // 23 /*! @class AUMIDIBase */ 24 class AUMIDIBase { 25 public: 26 // this is NOT a copy constructor! 27 /*! @ctor AUMIDIBase */ 28 AUMIDIBase(AUBase* inBase); 29 /*! @dtor ~AUMIDIBase */ 30 virtual ~AUMIDIBase(); 31 32 /*! @method MIDIEvent */ MIDIEvent(UInt32 inStatus,UInt32 inData1,UInt32 inData2,UInt32 inOffsetSampleFrame)33 virtual OSStatus MIDIEvent( UInt32 inStatus, 34 UInt32 inData1, 35 UInt32 inData2, 36 UInt32 inOffsetSampleFrame) 37 { 38 UInt32 strippedStatus = inStatus & 0xf0; 39 UInt32 channel = inStatus & 0x0f; 40 41 return HandleMidiEvent(strippedStatus, channel, inData1, inData2, inOffsetSampleFrame); 42 } 43 44 /*! @method HandleMIDIPacketList */ 45 OSStatus HandleMIDIPacketList(const MIDIPacketList *pktlist); 46 47 /*! @method SysEx */ 48 virtual OSStatus SysEx( const UInt8 * inData, 49 UInt32 inLength); 50 51 #if TARGET_API_MAC_OSX 52 /*! @method DelegateGetPropertyInfo */ 53 virtual OSStatus DelegateGetPropertyInfo(AudioUnitPropertyID inID, 54 AudioUnitScope inScope, 55 AudioUnitElement inElement, 56 UInt32 & outDataSize, 57 Boolean & outWritable); 58 59 /*! @method DelegateGetProperty */ 60 virtual OSStatus DelegateGetProperty( AudioUnitPropertyID inID, 61 AudioUnitScope inScope, 62 AudioUnitElement inElement, 63 void * outData); 64 65 /*! @method DelegateSetProperty */ 66 virtual OSStatus DelegateSetProperty( AudioUnitPropertyID inID, 67 AudioUnitScope inScope, 68 AudioUnitElement inElement, 69 const void * inData, 70 UInt32 inDataSize); 71 #endif 72 73 protected: 74 // MIDI dispatch 75 /*! @method HandleMidiEvent */ 76 virtual OSStatus HandleMidiEvent( UInt8 inStatus, 77 UInt8 inChannel, 78 UInt8 inData1, 79 UInt8 inData2, 80 UInt32 inStartFrame); 81 82 /*! @method HandleNonNoteEvent */ 83 virtual OSStatus HandleNonNoteEvent ( UInt8 status, 84 UInt8 channel, 85 UInt8 data1, 86 UInt8 data2, 87 UInt32 inStartFrame); 88 89 #if TARGET_API_MAC_OSX 90 /*! @method GetXMLNames */ GetXMLNames(CFURLRef * outNameDocument)91 virtual OSStatus GetXMLNames(CFURLRef *outNameDocument) 92 { return kAudioUnitErr_InvalidProperty; } // if not overridden, it's unsupported 93 #endif 94 95 // channel messages 96 /*! @method HandleNoteOn */ HandleNoteOn(UInt8 inChannel,UInt8 inNoteNumber,UInt8 inVelocity,UInt32 inStartFrame)97 virtual OSStatus HandleNoteOn( UInt8 inChannel, 98 UInt8 inNoteNumber, 99 UInt8 inVelocity, 100 UInt32 inStartFrame) { return noErr; } 101 102 /*! @method HandleNoteOff */ HandleNoteOff(UInt8 inChannel,UInt8 inNoteNumber,UInt8 inVelocity,UInt32 inStartFrame)103 virtual OSStatus HandleNoteOff( UInt8 inChannel, 104 UInt8 inNoteNumber, 105 UInt8 inVelocity, 106 UInt32 inStartFrame) { return noErr; } 107 108 /*! @method HandleControlChange */ HandleControlChange(UInt8 inChannel,UInt8 inController,UInt8 inValue,UInt32 inStartFrame)109 virtual OSStatus HandleControlChange( UInt8 inChannel, 110 UInt8 inController, 111 UInt8 inValue, 112 UInt32 inStartFrame) { return noErr; } 113 114 /*! @method HandlePitchWheel */ HandlePitchWheel(UInt8 inChannel,UInt8 inPitch1,UInt8 inPitch2,UInt32 inStartFrame)115 virtual OSStatus HandlePitchWheel( UInt8 inChannel, 116 UInt8 inPitch1, 117 UInt8 inPitch2, 118 UInt32 inStartFrame) { return noErr; } 119 120 /*! @method HandleChannelPressure */ HandleChannelPressure(UInt8 inChannel,UInt8 inValue,UInt32 inStartFrame)121 virtual OSStatus HandleChannelPressure( UInt8 inChannel, 122 UInt8 inValue, 123 UInt32 inStartFrame) { return noErr; } 124 125 /*! @method HandleProgramChange */ HandleProgramChange(UInt8 inChannel,UInt8 inValue)126 virtual OSStatus HandleProgramChange( UInt8 inChannel, 127 UInt8 inValue) { return noErr; } 128 129 /*! @method HandlePolyPressure */ HandlePolyPressure(UInt8 inChannel,UInt8 inKey,UInt8 inValue,UInt32 inStartFrame)130 virtual OSStatus HandlePolyPressure( UInt8 inChannel, 131 UInt8 inKey, 132 UInt8 inValue, 133 UInt32 inStartFrame) { return noErr; } 134 135 /*! @method HandleResetAllControllers */ HandleResetAllControllers(UInt8 inChannel)136 virtual OSStatus HandleResetAllControllers(UInt8 inChannel) { return noErr; } 137 138 /*! @method HandleAllNotesOff */ HandleAllNotesOff(UInt8 inChannel)139 virtual OSStatus HandleAllNotesOff( UInt8 inChannel) { return noErr; } 140 141 /*! @method HandleAllSoundOff */ HandleAllSoundOff(UInt8 inChannel)142 virtual OSStatus HandleAllSoundOff( UInt8 inChannel) { return noErr; } 143 144 145 //System messages 146 /*! @method HandleSysEx */ HandleSysEx(const UInt8 * inData,UInt32 inLength)147 virtual OSStatus HandleSysEx( const UInt8 * inData, 148 UInt32 inLength ) { return noErr; } 149 150 #if CA_AUTO_MIDI_MAP 151 /* map manager */ GetMIDIMapManager()152 CAAUMIDIMapManager *GetMIDIMapManager() {return mMapManager;}; 153 154 #endif 155 156 157 private: 158 /*! @var mAUBaseInstance */ 159 AUBase & mAUBaseInstance; 160 161 #if CA_AUTO_MIDI_MAP 162 /* map manager */ 163 CAAUMIDIMapManager * mMapManager; 164 #endif 165 166 public: 167 #if !CA_USE_AUDIO_PLUGIN_ONLY 168 // component dispatcher 169 /*! @method ComponentEntryDispatch */ 170 static OSStatus ComponentEntryDispatch( ComponentParameters *params, 171 AUMIDIBase *This); 172 #endif 173 }; 174 175 #endif // __AUMIDIBase_h__ 176