X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fvst_plugin.h;h=e56b9c005cc353716762077cdc3ff03a97b40b1a;hb=d6fd0486aef08fcccf013d889734971ed01eaedd;hp=3a05360f157923a7917ac982b6a0ebbdfa3dc1a6;hpb=bb457bb960c5bd7ed538f9d31477293415739f68;p=ardour.git diff --git a/libs/ardour/ardour/vst_plugin.h b/libs/ardour/ardour/vst_plugin.h index 3a05360f15..e56b9c005c 100644 --- a/libs/ardour/ardour/vst_plugin.h +++ b/libs/ardour/ardour/vst_plugin.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2004 Paul Davis + Copyright (C) 2010 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,99 +20,107 @@ #ifndef __ardour_vst_plugin_h__ #define __ardour_vst_plugin_h__ -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -using std::string; -using std::vector; -using std::list; -using std::map; - -struct _FSTHandle; -struct _FST; -typedef struct _FSTHandle FSTHandle; -typedef struct _FST FST; -class AEffect; +#include "ardour/plugin.h" + +struct _AEffect; +typedef struct _AEffect AEffect; +struct _VSTHandle; +typedef struct _VSTHandle VSTHandle; +struct _VSTState; +typedef struct _VSTState VSTState; + +#include "ardour/vestige/aeffectx.h" namespace ARDOUR { -class AudioEngine; -class Session; -class VSTPlugin : public ARDOUR::Plugin +class PluginInsert; + +/** Parent class for VST plugins of both Windows and Linux varieties */ +class LIBARDOUR_API VSTPlugin : public Plugin { - public: - VSTPlugin (ARDOUR::AudioEngine&, ARDOUR::Session&, FSTHandle* handle); - VSTPlugin (const VSTPlugin &); - ~VSTPlugin (); - - /* Plugin interface */ - - std::string unique_id() const; - const char * label() const; - const char * name() const; - const char * maker() const; - uint32_t parameter_count() const; +public: + VSTPlugin (AudioEngine &, Session &, VSTHandle *); + virtual ~VSTPlugin (); + + void activate (); + void deactivate (); + + int set_block_size (pframes_t); + bool inplace_broken() const { return true; } float default_value (uint32_t port); - nframes_t signal_latency() const; - void set_parameter (uint32_t port, float val); float get_parameter (uint32_t port) const; - int get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const; - std::set automatable() const; uint32_t nth_parameter (uint32_t port, bool& ok) const; - void activate (); - void deactivate (); - void set_block_size (nframes_t nframes); - int connect_and_run (BufferSet&, uint32_t& in, uint32_t& out, nframes_t nframes, nframes_t offset); - void store_state (ARDOUR::PluginState&); - void restore_state (ARDOUR::PluginState&); - string describe_parameter (uint32_t); - string state_node_name() const { return "vst"; } - void print_parameter (uint32_t, char*, uint32_t len) const; - - bool parameter_is_audio(uint32_t i) const { return false; } - bool parameter_is_control(uint32_t i) const { return true; } - bool parameter_is_input(uint32_t i) const { return true; } - bool parameter_is_output(uint32_t i) const { return false; } - - bool load_preset (const string preset_label ); - bool save_preset(string name); + void set_parameter (uint32_t port, float val); + void set_parameter_automated (uint32_t port, float val); + bool load_preset (PresetRecord); + int get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const; + std::string describe_parameter (Evoral::Parameter); + framecnt_t signal_latency() const; + std::set automatable() const; + + bool parameter_is_audio (uint32_t) const { return false; } + bool parameter_is_control (uint32_t) const { return true; } + bool parameter_is_input (uint32_t) const { return true; } + bool parameter_is_output (uint32_t) const { return false; } + + int connect_and_run (BufferSet&, + framepos_t start, framepos_t end, double speed, + ChanMapping in, ChanMapping out, + pframes_t nframes, framecnt_t offset + ); + + std::string unique_id () const; + const char * label () const; + const char * name () const; + const char * maker () const; + uint32_t parameter_count () const; + void print_parameter (uint32_t, char*, uint32_t len) const; bool has_editor () const; - XMLNode& get_state(); - int set_state(const XMLNode& node); - - AEffect* plugin() const { return _plugin; } - FST* fst() const { return _fst; } - - - private: - FSTHandle* handle; - FST* _fst; + AEffect * plugin () const { return _plugin; } + VSTState * state () const { return _state; } + MidiBuffer * midi_buffer () const { return _midi_out_buf; } + + int set_state (XMLNode const &, int); + + int first_user_preset_index () const; + + void set_insert (PluginInsert* pi, uint32_t num) { _pi = pi; _num = num; } + PluginInsert* plugin_insert () const { return _pi; } + uint32_t plugin_number () const { return _num; } + VstTimeInfo* timeinfo () { return &_timeInfo; } + framepos_t transport_frame () const { return _transport_frame; } + float transport_speed () const { return _transport_speed; } + + +protected: + void set_plugin (AEffect *); + gchar* get_chunk (bool) const; + int set_chunk (gchar const *, bool); + void add_state (XMLNode *) const; + bool load_user_preset (PresetRecord); + bool load_plugin_preset (PresetRecord); + std::string do_save_preset (std::string name); + void do_remove_preset (std::string name); + XMLTree * presets_tree () const; + std::string presets_file () const; + void find_presets (); + + VSTHandle* _handle; + VSTState* _state; AEffect* _plugin; - bool been_resumed; -}; + PluginInsert* _pi; + uint32_t _num; -class VSTPluginInfo : public PluginInfo -{ - public: - VSTPluginInfo () {} - ~VSTPluginInfo () {} - - PluginPtr load (Session& session); -}; + MidiBuffer* _midi_out_buf; + VstTimeInfo _timeInfo; -typedef boost::shared_ptr VSTPluginInfoPtr; + framepos_t _transport_frame; + float _transport_speed; + mutable std::map _parameter_defaults; +}; -} // namespace ARDOUR +} -#endif /* __ardour_vst_plugin_h__ */ +#endif