in Source/AUMIDIBase.cpp [279:322]
OSStatus AUMIDIBase::HandleMIDIEvent(
UInt8 status, UInt8 channel, UInt8 data1, UInt8 data2, UInt32 inStartFrame)
{
if (!mAUBaseInstance.IsInitialized()) {
return kAudioUnitErr_Uninitialized;
}
#if AUSDK_HAVE_MIDI_MAPPING
// you potentially have a choice to make here - if a param mapping matches, do you still want to
// process the MIDI event or not. The default behaviour is to continue on with the MIDI event.
if (mMIDIMapper) {
if (mMIDIMapper->HandleHotMapping(status, channel, data1, mAUBaseInstance)) {
mAUBaseInstance.PropertyChanged(
kAudioUnitProperty_HotMapParameterMIDIMapping, kAudioUnitScope_Global, 0);
} else {
mMIDIMapper->FindParameterMapEventMatch(
status, channel, data1, data2, inStartFrame, mAUBaseInstance);
}
}
#endif
OSStatus result = noErr;
switch (status) {
case kMIDIStatus_NoteOn:
if (data2 != 0u) {
result = HandleNoteOn(channel, data1, data2, inStartFrame);
} else {
// zero velocity translates to note off
result = HandleNoteOff(channel, data1, data2, inStartFrame);
}
break;
case kMIDIStatus_NoteOff:
result = HandleNoteOff(channel, data1, data2, inStartFrame);
break;
default:
result = HandleNonNoteEvent(status, channel, data1, data2, inStartFrame);
break;
}
return result;
}