diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2015-10-20 09:07:51 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2015-10-20 09:07:58 -0400 |
commit | 336b2eb9a4a8634bae84a15e952d20335aa28c12 (patch) | |
tree | ab171341dd5ab7915ae77c937673ae586116ecb9 /libs/ardour/ardour | |
parent | f1a6d7816d13d3eca5885494f711b88a8270c899 (diff) |
rename ParameterChanged signal in Plugin to ParameterChangedExternally to reflect its intent, and clean up the result.
The signal exists to notify listeners that something outside of the host's control (e.g. a plugin's own GUI for AU or VST)
has modified a plugin parameter. Previous code had strange feedback loops and ambiguous semantics.
Significant modification of LV2 GUI updating was required.
Still to be tested for feedback loop issues: AudioUnits
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r-- | libs/ardour/ardour/plugin.h | 22 | ||||
-rw-r--r-- | libs/ardour/ardour/plugin_insert.h | 4 |
2 files changed, 21 insertions, 5 deletions
diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h index 2554a6816c..7bef40ab88 100644 --- a/libs/ardour/ardour/plugin.h +++ b/libs/ardour/ardour/plugin.h @@ -208,10 +208,17 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent /** Emitted when a preset has been loaded */ PBD::Signal0<void> PresetLoaded; + /** Emitted when a parameter is altered in a way that may have + * changed the settings with respect to any loaded preset. + */ + PBD::Signal0<void> PresetDirty; + virtual bool has_editor () const = 0; - /** Emitted when any parameter changes */ - PBD::Signal2<void, uint32_t, float> ParameterChanged; + /** Emitted when a parameter is altered by something outside of our + * control, most typically a Plugin GUI/editor + */ + PBD::Signal2<void, uint32_t, float> ParameterChangedExternally; virtual bool configure_io (ChanCount /*in*/, ChanCount /*out*/) { return true; } @@ -272,9 +279,18 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent protected: friend class PluginInsert; + friend class Session; + /* Called when a parameter of the plugin is changed outside of this + * host's control (typical via a plugin's own GUI/editor) + */ + void parameter_changed_externally (uint32_t which, float val); + + /* should be overridden by plugin API specific derived types to + * actually implement changing the parameter. The derived type should + * call this after the change is made. + */ virtual void set_parameter (uint32_t which, float val); - virtual void set_parameter_automated (uint32_t which, float val); /** Do the actual saving of the current plugin settings to a preset of the provided name. * Should return a URI on success, or an empty string on failure. diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h index 8788778a3a..d4d9adb54d 100644 --- a/libs/ardour/ardour/plugin_insert.h +++ b/libs/ardour/ardour/plugin_insert.h @@ -96,6 +96,7 @@ class LIBARDOUR_API PluginInsert : public Processor void set_value (double val); double get_value (void) const; + void catch_up_with_external_value (double val); XMLNode& get_state(); private: @@ -164,10 +165,9 @@ class LIBARDOUR_API PluginInsert : public Processor /* disallow copy construction */ PluginInsert (const PluginInsert&); - void parameter_changed (uint32_t, float); + void parameter_changed_externally (uint32_t, float); void set_parameter (Evoral::Parameter param, float val); - float get_parameter (Evoral::Parameter param); float default_parameter_value (const Evoral::Parameter& param); |