X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Faudio_unit.cc;h=431fb99a481630ed5c843d5cccd7a1bbefcf0a4c;hb=8d6d3c309d75f5280bf32cffcab271a287827c01;hp=a76bcc4aaefea98f9b31861dabedba13627f00b7;hpb=0fb8c89eeb785427d2af08c49ad7b79bb5fb1330;p=ardour.git diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc index a76bcc4aae..431fb99a48 100644 --- a/libs/ardour/audio_unit.cc +++ b/libs/ardour/audio_unit.cc @@ -2753,6 +2753,26 @@ AUPlugin::listen_to_parameter (uint32_t param_id) return -1; } + event.mEventType = kAudioUnitEvent_BeginParameterChangeGesture; + event.mArgument.mParameter.mAudioUnit = unit->AU(); + event.mArgument.mParameter.mParameterID = descriptors[param_id].id; + event.mArgument.mParameter.mScope = descriptors[param_id].scope; + event.mArgument.mParameter.mElement = descriptors[param_id].element; + + if (AUEventListenerAddEventType (_parameter_listener, _parameter_listener_arg, &event) != noErr) { + return -1; + } + + event.mEventType = kAudioUnitEvent_EndParameterChangeGesture; + event.mArgument.mParameter.mAudioUnit = unit->AU(); + event.mArgument.mParameter.mParameterID = descriptors[param_id].id; + event.mArgument.mParameter.mScope = descriptors[param_id].scope; + event.mArgument.mParameter.mElement = descriptors[param_id].element; + + if (AUEventListenerAddEventType (_parameter_listener, _parameter_listener_arg, &event) != noErr) { + return -1; + } + return 0; } @@ -2775,6 +2795,26 @@ AUPlugin::end_listen_to_parameter (uint32_t param_id) return -1; } + event.mEventType = kAudioUnitEvent_BeginParameterChangeGesture; + event.mArgument.mParameter.mAudioUnit = unit->AU(); + event.mArgument.mParameter.mParameterID = descriptors[param_id].id; + event.mArgument.mParameter.mScope = descriptors[param_id].scope; + event.mArgument.mParameter.mElement = descriptors[param_id].element; + + if (AUEventListenerRemoveEventType (_parameter_listener, _parameter_listener_arg, &event) != noErr) { + return -1; + } + + event.mEventType = kAudioUnitEvent_EndParameterChangeGesture; + event.mArgument.mParameter.mAudioUnit = unit->AU(); + event.mArgument.mParameter.mParameterID = descriptors[param_id].id; + event.mArgument.mParameter.mScope = descriptors[param_id].scope; + event.mArgument.mParameter.mElement = descriptors[param_id].element; + + if (AUEventListenerRemoveEventType (_parameter_listener, _parameter_listener_arg, &event) != noErr) { + return -1; + } + return 0; } @@ -2789,17 +2829,19 @@ AUPlugin::parameter_change_listener (void* /*arg*/, void* /*src*/, const AudioUn { ParameterMap::iterator i; + if ((i = parameter_map.find (event->mArgument.mParameter.mParameterID)) == parameter_map.end()) { + return; + } + switch (event->mEventType) { case kAudioUnitEvent_BeginParameterChangeGesture: + StartTouch (i->second); break; case kAudioUnitEvent_EndParameterChangeGesture: + EndTouch (i->second); break; case kAudioUnitEvent_ParameterValueChange: - i = parameter_map.find (event->mArgument.mParameter.mParameterID); - - if (i != parameter_map.end()) { - ParameterChanged (i->second, new_value); - } + ParameterChanged (i->second, new_value); break; default: break;