OSStatus AUInstrumentBase::HandleControlChange( UInt8 inChannel, UInt8 inController, UInt8 inValue, UInt32 inStartFrame) { #if DEBUG_PRINT printf("AUInstrumentBase::HandleControlChange ch %u ctlr: %u val: %u frm: %u\n", inChannel, inController, inValue, inStartFrame); #endif SynthGroupElement *gp = GetElForGroupID(inChannel); if (gp) { gp->ChannelMessage(inController, inValue); } else return kAudioUnitErr_InvalidElement; switch (inController) { case kMidiController_Sustain : if (inValue >= 64) SendPedalEvent(inChannel, SynthEvent::kEventType_SustainOn, inStartFrame); else SendPedalEvent(inChannel, SynthEvent::kEventType_SustainOff, inStartFrame); break; case kMidiController_Sostenuto : if (inValue >= 64) SendPedalEvent(inChannel, SynthEvent::kEventType_SostenutoOn, inStartFrame); else SendPedalEvent(inChannel, SynthEvent::kEventType_SostenutoOff, inStartFrame); break; } return noErr; }
OSStatus AUInstrumentBase::HandleChannelPressure(UInt8 inChannel, UInt8 inValue, UInt32 inStartFrame) { SynthGroupElement *gp = GetElForGroupID(inChannel); if (gp) { gp->ChannelMessage(kMidiMessage_ChannelPressure, inValue); return noErr; } else return kAudioUnitErr_InvalidElement; }
OSStatus AUInstrumentBase::HandlePitchWheel( UInt8 inChannel, UInt8 inPitch1, // LSB UInt8 inPitch2, // MSB UInt32 inStartFrame) { SynthGroupElement *gp = GetElForGroupID(inChannel); if (gp) { gp->ChannelMessage(kMidiMessage_PitchWheel, (inPitch2 << 7) | inPitch1); return noErr; } else return kAudioUnitErr_InvalidElement; }
OSStatus AUInstrumentBase::HandlePolyPressure( UInt8 inChannel, UInt8 inKey, UInt8 inValue, UInt32 inStartFrame) { SynthGroupElement *gp = GetElForGroupID(inChannel); if (gp) { // Combine key and value into single argument. UGLY! gp->ChannelMessage(kMidiMessage_PolyPressure, (inKey << 7) | inValue); return noErr; } else return kAudioUnitErr_InvalidElement; }
OSStatus AUInstrumentBase::HandleProgramChange( UInt8 inChannel, UInt8 inValue) { #if DEBUG_PRINT printf("AUInstrumentBase::HandleProgramChange %u %u\n", inChannel, inValue); #endif SynthGroupElement *gp = GetElForGroupID(inChannel); if (gp) { gp->ChannelMessage(kMidiMessage_ProgramChange, inValue); return noErr; } else return kAudioUnitErr_InvalidElement; }