DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit 9c1fabc52a54cbaf11e578a00d03b4f8cf774ef7
parent 4bbef7482ff29f94688ef3da9d9d93b5eec56582
Author: falkTX <falktx@falktx.com>
Date:   Fri, 23 Feb 2024 01:37:06 +0100

AU: notify hosts and UI about output param changes

Signed-off-by: falkTX <falktx@falktx.com>

Diffstat:
Mdistrho/src/DistrhoPluginAU.cpp | 48++++++++++++++++++++++++------------------------
1 file changed, 24 insertions(+), 24 deletions(-)

diff --git a/distrho/src/DistrhoPluginAU.cpp b/distrho/src/DistrhoPluginAU.cpp @@ -1138,29 +1138,14 @@ public: #else fPlugin.run(inputs, outputs, inFramesToProcess); #endif - return noErr; - } - - OSStatus auReset(const AudioUnitScope scope, const AudioUnitElement elem) - { - DISTRHO_SAFE_ASSERT_UINT_RETURN(scope == kAudioUnitScope_Global || scope == kAudioUnitScope_Input || scope == kAudioUnitScope_Output, scope, kAudioUnitErr_InvalidScope); - DISTRHO_SAFE_ASSERT_UINT_RETURN(elem == 0, elem, kAudioUnitErr_InvalidElement); - // TODO - d_stdout("WIP Reset(%d:%s, %d)", scope, AudioUnitScope2Str(scope), elem); - return noErr; - } - -#if 0 -protected: - // ---------------------------------------------------------------------------------------------------------------- - // ComponentBase AU dispatch - - OSStatus Render(AudioUnitRenderActionFlags& ioActionFlags, - const AudioTimeStamp& inTimeStamp, - const UInt32 nFrames) override - { float value; + AudioUnitEvent event; + std::memset(&event, 0, sizeof(event)); + event.mEventType = kAudioUnitEvent_ParameterValueChange; + event.mArgument.mParameter.mAudioUnit = fComponent; + event.mArgument.mParameter.mScope = kAudioUnitScope_Global; + for (uint32_t i=0; i<fParameterCount; ++i) { if (fPlugin.isParameterOutputOrTrigger(i)) @@ -1172,14 +1157,29 @@ protected: fLastParameterValues[i] = value; - if (AUElement* const elem = GlobalScope().GetElement(0)) - elem->SetParameter(i, value); + // TODO flag param only, notify listeners later on bg thread (sem_post etc) + event.mArgument.mParameter.mParameterID = i; + AUEventListenerNotify(NULL, NULL, &event); + notifyListeners('DPFP', kAudioUnitScope_Global, i); } } return noErr; } -#endif + + OSStatus auReset(const AudioUnitScope scope, const AudioUnitElement elem) + { + DISTRHO_SAFE_ASSERT_UINT_RETURN(scope == kAudioUnitScope_Global || scope == kAudioUnitScope_Input || scope == kAudioUnitScope_Output, scope, kAudioUnitErr_InvalidScope); + DISTRHO_SAFE_ASSERT_UINT_RETURN(elem == 0, elem, kAudioUnitErr_InvalidElement); + + if (fPlugin.isActive()) + { + fPlugin.deactivate(); + fPlugin.activate(); + } + + return noErr; + } // ----------------------------------------------------------------------------------------------------------------