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:
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;
+ }
// ----------------------------------------------------------------------------------------------------------------