add support for VST default values (instantiation time value)
[ardour.git] / libs / ardour / ardour / vst_plugin.h
index f7ec486d3652e09827c5531e9e8537e4e3b6bbe0..e56b9c005cc353716762077cdc3ff03a97b40b1a 100644 (file)
@@ -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
 #ifndef __ardour_vst_plugin_h__
 #define __ardour_vst_plugin_h__
 
-#include <list>
-#include <map>
-#include <set>
-#include <vector>
-#include <string>
-#include <dlfcn.h>
-
-#include <sigc++/signal.h>
-#include <pbd/stateful.h> 
-#include <jack/types.h>
-#include <ardour/plugin.h>
-
-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 */
-       
-       uint32_t 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 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<uint32_t> 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 (vector<Sample*>& bufs, uint32_t maxbuf, int32_t& in, int32_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<Evoral::Parameter> 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<VSTPluginInfo> VSTPluginInfoPtr;
+       framepos_t _transport_frame;
+       float      _transport_speed;
+       mutable std::map <uint32_t, float> _parameter_defaults;
+};
 
-} // namespace ARDOUR
+}
 
-#endif /* __ardour_vst_plugin_h__ */
+#endif