X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fardour%2Fardour%2Fplugin.h;h=9e4f5c40fd7c8ef89fe6319c4606983d895492b3;hb=43f7813b248686bfa89600f91dccd83017dfe669;hp=d73fef2f53301482db6d634783f15f2a62ced218;hpb=21a0b7ace085ec506950d357ca8958c19dd1060c;p=ardour.git diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h index d73fef2f53..9e4f5c40fd 100644 --- a/libs/ardour/ardour/plugin.h +++ b/libs/ardour/ardour/plugin.h @@ -67,6 +67,18 @@ class PluginInfo { virtual PluginPtr load (Session& session) = 0; virtual bool is_instrument() const; + /* NOTE: this block of virtual methods looks like the interface + to a Processor, but Plugin does not inherit from Processor. + It is therefore not required that these precisely match + the interface, but it is likely that they will evolve together. + */ + + /* this returns true if the plugin can change its inputs or outputs on demand. + LADSPA, LV2 and VST plugins cannot do this. AudioUnits can. + */ + + virtual bool reconfigurable_io() const { return false; } + protected: friend class PluginManager; uint32_t index; @@ -118,6 +130,8 @@ class Plugin : public PBD::StatefulDestructible, public Latent virtual uint32_t parameter_count () const = 0; virtual float default_value (uint32_t port) = 0; virtual float get_parameter(uint32_t which) const = 0; + virtual std::string get_docs () const { return ""; } + virtual std::string get_parameter_docs (uint32_t /*which*/) const { return ""; } virtual int get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const = 0; virtual uint32_t nth_parameter (uint32_t which, bool& ok) const = 0; @@ -152,28 +166,50 @@ class Plugin : public PBD::StatefulDestructible, public Latent void monitoring_changed (); struct PresetRecord { - PresetRecord () : user (true) {} - PresetRecord (const std::string& u, const std::string& l, bool s = true) : uri (u), label (l), user (s) {} - - bool operator!= (PresetRecord const & a) const { - return uri != a.uri || label != a.label; - } - - std::string uri; - std::string label; - bool user; + PresetRecord () : number (-1), user (true) {} + PresetRecord (const std::string& u, const std::string& l, int n = -1, bool s = true) : uri (u), label (l), number (n), user (s) {} + + bool operator!= (PresetRecord const & a) const { + return number != a.number || uri != a.uri || label != a.label; + } + + std::string uri; + std::string label; + int number; // if <0, invalid + bool user; }; PresetRecord save_preset (std::string); void remove_preset (std::string); virtual bool load_preset (PresetRecord); + void clear_preset (); const PresetRecord * preset_by_label (const std::string &); const PresetRecord * preset_by_uri (const std::string &); std::vector get_presets (); + /** @return true if this plugin will respond to MIDI program + * change messages by changing presets. + * + * This is hard to return a correct value for because most plugin APIs + * do not specify plugin behaviour. However, if you want to force + * the display of plugin built-in preset names rather than MIDI program + * numbers, return true. If you want a generic description, return + * false. + */ + virtual bool presets_are_MIDI_programs() const { return false; } + + /** @return true if this plugin is General MIDI compliant, false + * otherwise. + * + * It is important to note that it is is almost impossible for a host + * (e.g. Ardour) to determine this for just about any plugin API + * known as of June 2012 + */ + virtual bool current_preset_uses_general_midi() const { return false; } + /** @return Last preset to be requested; the settings may have * been changed since; find out with parameter_changed_since_last_preset. */ @@ -201,19 +237,6 @@ class Plugin : public PBD::StatefulDestructible, public Latent /** Emitted when any parameter changes */ PBD::Signal2 ParameterChanged; - /* NOTE: this block of virtual methods looks like the interface - to a Processor, but Plugin does not inherit from Processor. - It is therefore not required that these precisely match - the interface, but it is likely that they will evolve together. - */ - - /* this returns true if the plugin can change its inputs or outputs on demand. - LADSPA, LV2 and VST plugins cannot do this. AudioUnits can. - */ - - virtual bool reconfigurable_io() const { return false; } - - /* this is only called if reconfigurable_io() returns true */ virtual bool configure_io (ChanCount /*in*/, ChanCount /*out*/) { return true; } /* specific types of plugins can overload this. As of September 2008, only @@ -232,6 +255,9 @@ class Plugin : public PBD::StatefulDestructible, public Latent void set_cycles (uint32_t c) { _cycles = c; } cycles_t cycles() const { return _cycles; } + PBD::Signal1 StartTouch; + PBD::Signal1 EndTouch; + protected: friend class PluginInsert;