diff options
author | David Robillard <d@drobilla.net> | 2006-08-10 01:22:45 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2006-08-10 01:22:45 +0000 |
commit | ab6f1ed9bafa869648b6e94ee5186ff317b32c3e (patch) | |
tree | d61dba7f9b6f1ae755803afc4b79bcff06a36005 /libs/ardour/ardour | |
parent | 38c7d34d8c449c7ce5f7da9575c24e60c6b31b1a (diff) |
Merged with trunk R776
git-svn-id: svn://localhost/ardour2/branches/midi@777 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r-- | libs/ardour/ardour/ardour.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/audio_unit.h | 76 | ||||
-rw-r--r-- | libs/ardour/ardour/automation_event.h | 8 | ||||
-rw-r--r-- | libs/ardour/ardour/ladspa_plugin.h | 15 | ||||
-rw-r--r-- | libs/ardour/ardour/location.h | 6 | ||||
-rw-r--r-- | libs/ardour/ardour/playlist.h | 3 | ||||
-rw-r--r-- | libs/ardour/ardour/plugin.h | 30 | ||||
-rw-r--r-- | libs/ardour/ardour/plugin_manager.h | 12 | ||||
-rw-r--r-- | libs/ardour/ardour/route.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/session.h | 75 | ||||
-rw-r--r-- | libs/ardour/ardour/state_manager.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/tempo.h | 3 | ||||
-rw-r--r-- | libs/ardour/ardour/track.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/vst_plugin.h | 11 |
14 files changed, 190 insertions, 57 deletions
diff --git a/libs/ardour/ardour/ardour.h b/libs/ardour/ardour/ardour.h index ba92416339..c138cbf32f 100644 --- a/libs/ardour/ardour/ardour.h +++ b/libs/ardour/ardour/ardour.h @@ -45,7 +45,7 @@ namespace ARDOUR { static const jack_nframes_t max_frames = JACK_MAX_FRAMES; - int init (AudioEngine&, bool with_vst, bool try_optimization); + int init (AudioEngine& engine, bool with_vst, bool try_optimization); int cleanup (); diff --git a/libs/ardour/ardour/audio_unit.h b/libs/ardour/ardour/audio_unit.h index ec437109a4..1c8d6cbc2d 100644 --- a/libs/ardour/ardour/audio_unit.h +++ b/libs/ardour/ardour/audio_unit.h @@ -21,36 +21,93 @@ #ifndef __ardour_audio_unit_h__ #define __ardour_audio_unit_h__ +#include <stdint.h> + #include <list> +#include <set> +#include <string> +#include <vector> #include <ardour/plugin.h> #include <boost/shared_ptr.hpp> -struct ComponentDescription; +class CAComponent; +class CAAudioUnit; +class CAComponentDescription; +struct AudioBufferList; namespace ARDOUR { +class AudioEngine; +class Session; + class AUPlugin : public ARDOUR::Plugin { public: - AUPlugin (AudioEngine& engine, Session& session) : Plugin(engine, session) {}; - virtual ~AUPlugin () {}; + AUPlugin (AudioEngine& engine, Session& session, CAComponent* comp); + virtual ~AUPlugin (); + + uint32_t unique_id () const; + const char * label () const; + const char * name () const { return _info->name.c_str(); } + const char * maker () const; + uint32_t parameter_count () const; + float default_value (uint32_t port); + jack_nframes_t latency () const; + void set_parameter (uint32_t which, float val); + float get_parameter (uint32_t which) const; + + int get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const; + uint32_t nth_parameter (uint32_t which, bool& ok) const; + void activate (); + void deactivate (); + void set_block_size (jack_nframes_t nframes); + + int connect_and_run (vector<Sample*>& bufs, uint32_t maxbuf, int32_t& in, int32_t& out, jack_nframes_t nframes, jack_nframes_t offset); + std::set<uint32_t> automatable() const; + void store_state (ARDOUR::PluginState&); + void restore_state (ARDOUR::PluginState&); + string describe_parameter (uint32_t); + string state_node_name () const { return "audiounit"; } + void print_parameter (uint32_t, char*, uint32_t len) const; + + bool parameter_is_audio (uint32_t) const; + bool parameter_is_control (uint32_t) const; + bool parameter_is_input (uint32_t) const; + bool parameter_is_output (uint32_t) const; + + XMLNode& get_state(); + int set_state(const XMLNode& node); + + bool save_preset (string name); + bool load_preset (const string preset_label); + std::vector<std::string> get_presets (); + + bool has_editor () const; + + private: + CAComponent* comp; + CAAudioUnit* unit; + + AudioBufferList* in_list; + AudioBufferList* out_list; + + std::vector<std::pair<uint32_t, uint32_t> > parameter_map; }; class AUPluginInfo : public PluginInfo { - public: - typedef boost::shared_ptr<ComponentDescription> CompDescPtr; - + public: AUPluginInfo () { }; - ~AUPluginInfo () { }; + ~AUPluginInfo (); - CompDescPtr desc; + CAComponentDescription* desc; static PluginInfoList discover (); + PluginPtr load (Session& session); private: - friend class PluginManager; + static std::string get_name (CAComponentDescription&); }; typedef boost::shared_ptr<AUPluginInfo> AUPluginInfoPtr; @@ -58,4 +115,3 @@ typedef boost::shared_ptr<AUPluginInfo> AUPluginInfoPtr; } // namespace ARDOUR #endif // __ardour_audio_unit_h__ - diff --git a/libs/ardour/ardour/automation_event.h b/libs/ardour/ardour/automation_event.h index 78daa531dd..5864de73c6 100644 --- a/libs/ardour/ardour/automation_event.h +++ b/libs/ardour/ardour/automation_event.h @@ -51,7 +51,7 @@ struct ControlEvent { }; -class AutomationList : public StateManager +class AutomationList : public StateManager, public Stateful { public: typedef std::list<ControlEvent*> AutomationEventList; @@ -153,6 +153,11 @@ class AutomationList : public StateManager virtual void store_state (XMLNode& node) const; virtual void load_state (const XMLNode&); + XMLNode &get_state(void); + int set_state (const XMLNode &s); + + PBD::ID id() { return _id; } + void set_max_xval (double); double get_max_xval() const { return max_xval; } @@ -179,6 +184,7 @@ class AutomationList : public StateManager }; protected: + PBD::ID _id; struct State : public ARDOUR::StateManager::State { AutomationEventList events; diff --git a/libs/ardour/ardour/ladspa_plugin.h b/libs/ardour/ardour/ladspa_plugin.h index e4aba93ef6..99fc884898 100644 --- a/libs/ardour/ardour/ladspa_plugin.h +++ b/libs/ardour/ardour/ladspa_plugin.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2000 Paul Davis + Copyright (C) 2000-2006 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 @@ -137,6 +137,17 @@ class LadspaPlugin : public ARDOUR::Plugin void run (jack_nframes_t nsamples); void latency_compute_run (); }; -} + +class LadspaPluginInfo : public PluginInfo { + public: + LadspaPluginInfo () { }; + ~LadspaPluginInfo () { }; + + PluginPtr load (Session& session); +}; + +typedef boost::shared_ptr<LadspaPluginInfo> LadspaPluginInfoPtr; + +} // namespace ARDOUR #endif /* __ardour_ladspa_plugin_h__ */ diff --git a/libs/ardour/ardour/location.h b/libs/ardour/ardour/location.h index 30c02a80a1..ff953d1d78 100644 --- a/libs/ardour/ardour/location.h +++ b/libs/ardour/ardour/location.h @@ -119,7 +119,10 @@ class Location : public Stateful, public sigc::trackable XMLNode& get_state (void); int set_state (const XMLNode&); + PBD::ID id() { return _id; } + private: + PBD::ID _id; string _name; jack_nframes_t _start; jack_nframes_t _end; @@ -145,6 +148,7 @@ class Locations : public Stateful, public StateManager XMLNode& get_state (void); int set_state (const XMLNode&); + PBD::ID id() { return _id; } Location* auto_loop_location () const; Location* auto_punch_location () const; @@ -197,6 +201,8 @@ class Locations : public Stateful, public StateManager Change restore_state (StateManager::State&); StateManager::State* state_factory (std::string why) const; + + PBD::ID _id; }; } // namespace ARDOUR diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index 9fb5b0eb2b..b389258860 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -76,6 +76,7 @@ class Playlist : public Stateful, public StateManager { EditMode get_edit_mode() const { return _edit_mode; } void set_edit_mode (EditMode); + PBD::ID id() { return _id; } /* Editing operations */ void add_region (const Region&, jack_nframes_t position, float times = 1, bool with_save = true); @@ -273,6 +274,8 @@ class Playlist : public Stateful, public StateManager { void unset_freeze_child (Playlist*); void timestamp_layer_op (Region&); + + PBD::ID _id; }; } /* namespace ARDOUR */ diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h index 86666c19af..6b11a975ca 100644 --- a/libs/ardour/ardour/plugin.h +++ b/libs/ardour/ardour/plugin.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2000 Paul Davis + Copyright (C) 2000-2006 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 @@ -18,8 +18,8 @@ $Id$ */ -#ifndef __ardour_ladspa_h__ -#define __ardour_ladspa_h__ +#ifndef __ardour_plugin_h__ +#define __ardour_plugin_h__ #include <boost/shared_ptr.hpp> #include <sigc++/signal.h> @@ -46,6 +46,9 @@ namespace ARDOUR { class AudioEngine; class Session; +class Plugin; +typedef boost::shared_ptr<Plugin> PluginPtr; + class PluginInfo { public: enum Type { @@ -54,11 +57,12 @@ class PluginInfo { VST }; - PluginInfo () { }; + PluginInfo () { } PluginInfo (const PluginInfo &o) : name(o.name), n_inputs(o.n_inputs), n_outputs(o.n_outputs), unique_id(o.unique_id), path (o.path), index(o.index) {} - ~PluginInfo () { }; + virtual ~PluginInfo () { } + string name; string category; uint32_t n_inputs; @@ -67,7 +71,9 @@ class PluginInfo { long unique_id; - private: + virtual PluginPtr load (Session& session) = 0; + + protected: friend class PluginManager; string path; uint32_t index; @@ -82,7 +88,7 @@ class Plugin : public Stateful, public sigc::trackable public: Plugin (ARDOUR::AudioEngine&, ARDOUR::Session&); Plugin (const Plugin&); - ~Plugin (); + virtual ~Plugin (); struct ParameterDescriptor { @@ -143,8 +149,8 @@ class Plugin : public Stateful, public sigc::trackable PBD::Controllable *get_nth_control (uint32_t); - PluginInfo & get_info() { return _info; } - void set_info (const PluginInfo &inf) { _info = inf; } + PluginInfoPtr get_info() { return _info; } + void set_info (const PluginInfoPtr inf) { _info = inf; } ARDOUR::AudioEngine& engine() const { return _engine; } ARDOUR::Session& session() const { return _session; } @@ -155,7 +161,7 @@ class Plugin : public Stateful, public sigc::trackable protected: ARDOUR::AudioEngine& _engine; ARDOUR::Session& _session; - PluginInfo _info; + PluginInfoPtr _info; uint32_t _cycles; map<string,string> presets; bool save_preset(string name, string domain /* vst, ladspa etc. */); @@ -181,9 +187,7 @@ class Plugin : public Stateful, public sigc::trackable vector<PortControllable*> controls; }; -/* this is actually defined in plugin_manager.cc */ - -boost::shared_ptr<Plugin> find_plugin(ARDOUR::Session&, string name, long unique_id, PluginInfo::Type); +PluginPtr find_plugin(ARDOUR::Session&, string name, long unique_id, PluginInfo::Type); } // namespace ARDOUR diff --git a/libs/ardour/ardour/plugin_manager.h b/libs/ardour/ardour/plugin_manager.h index 8543ad5285..8e6c0bd1c7 100644 --- a/libs/ardour/ardour/plugin_manager.h +++ b/libs/ardour/ardour/plugin_manager.h @@ -5,42 +5,34 @@ #include <map> #include <string> -#include <boost/shared_ptr.hpp> - #include <ardour/types.h> #include <ardour/plugin.h> #include <ardour/audio_unit.h> namespace ARDOUR { -class PluginInfo; class Plugin; class Session; class AudioEngine; class PluginManager { public: - PluginManager (ARDOUR::AudioEngine&); + PluginManager (); ~PluginManager (); ARDOUR::PluginInfoList &vst_plugin_info () { return _vst_plugin_info; } ARDOUR::PluginInfoList &ladspa_plugin_info () { return _ladspa_plugin_info; } - ARDOUR::PluginInfoList &au_plugin_info () { return _au_plugin_info; } void refresh (); int add_ladspa_directory (std::string dirpath); int add_vst_directory (std::string dirpath); - boost::shared_ptr<Plugin> load (ARDOUR::Session& s, PluginInfoPtr info); - static PluginManager* the_manager() { return _manager; } private: - ARDOUR::AudioEngine& _engine; ARDOUR::PluginInfoList _vst_plugin_info; ARDOUR::PluginInfoList _ladspa_plugin_info; - ARDOUR::PluginInfoList _au_plugin_info; std::map<uint32_t, std::string> rdf_type; std::string ladspa_path; @@ -60,8 +52,6 @@ class PluginManager { int ladspa_discover_from_path (std::string path); int ladspa_discover (std::string path); - int au_discover (); - std::string get_ladspa_category (uint32_t id); static PluginManager* _manager; // singleton diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index 8271c1cf6a..d1db818e40 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -97,7 +97,7 @@ class Route : public IO virtual int silent_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t offset, bool can_record, bool rec_monitors_input); virtual void toggle_monitor_input (); - virtual bool can_record() const { return false; } + virtual bool can_record() { return false; } virtual void set_record_enable (bool yn, void *src) {} virtual bool record_enabled() const { return false; } virtual void handle_transport_stopped (bool abort, bool did_locate, bool flush_redirects); diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index d39807be3f..6eb025f076 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -489,6 +489,7 @@ class Session : public sigc::trackable, public Stateful int save_state (string snapshot_name, bool pending = false); int restore_state (string snapshot_name); int save_template (string template_name); + int save_history (); static int rename_template (string old_name, string new_name); @@ -501,7 +502,7 @@ class Session : public sigc::trackable, public Stateful static vector<string*>* possible_states(string path); XMLNode& get_state(); - int set_state(const XMLNode& node); + int set_state(const XMLNode& node); // not idempotent XMLNode& get_template(); void add_instant_xml (XMLNode&, const std::string& dir); @@ -844,23 +845,65 @@ class Session : public sigc::trackable, public Stateful string next_undo() const { return history.next_undo(); } string next_redo() const { return history.next_redo(); } - void begin_reversible_command (string cmd_name, UndoAction *private_undo = 0); - void commit_reversible_command (UndoAction* private_redo = 0); + void begin_reversible_command (string cmd_name); + void commit_reversible_command (Command* cmd = 0); - void add_undo (const UndoAction& ua) { - current_cmd.add_undo (ua); - } - void add_redo (const UndoAction& ua) { - current_cmd.add_redo (ua); - } - void add_redo_no_execute (const UndoAction& ua) { - current_cmd.add_redo_no_execute (ua); + void add_command (Command *const cmd) { + current_trans.add_command (cmd); } - UndoAction global_solo_memento (void *src); - UndoAction global_mute_memento (void *src); - UndoAction global_record_enable_memento (void *src); - UndoAction global_metering_memento (void *src); + // these commands are implemented in libs/ardour/session_command.cc + class GlobalSoloStateCommand : public Command + { + GlobalRouteBooleanState before, after; + Session &sess; + void *src; + public: + GlobalSoloStateCommand(Session &, void *src); + void operator()(); + void undo(); + XMLNode &get_state(); + void mark(); + }; + + class GlobalMuteStateCommand : public Command + { + GlobalRouteBooleanState before, after; + Session &sess; + void *src; + public: + GlobalMuteStateCommand(Session &, void *src); + void operator()(); + void undo(); + XMLNode &get_state(); + void mark(); + }; + + class GlobalRecordEnableStateCommand : public Command + { + GlobalRouteBooleanState before, after; + Session &sess; + void *src; + public: + GlobalRecordEnableStateCommand(Session &, void *src); + void operator()(); + void undo(); + XMLNode &get_state(); + void mark(); + }; + + class GlobalMeteringStateCommand : public Command + { + GlobalRouteMeterState before, after; + Session &sess; + void *src; + public: + GlobalMeteringStateCommand(Session &, void *src); + void operator()(); + void undo(); + XMLNode &get_state(); + void mark(); + }; /* edit mode */ @@ -1635,7 +1678,7 @@ class Session : public sigc::trackable, public Stateful void reverse_diskstream_buffers (); UndoHistory history; - UndoCommand current_cmd; + UndoTransaction current_trans; GlobalRouteBooleanState get_global_route_boolean (bool (Route::*method)(void) const); GlobalRouteMeterState get_global_route_metering (); diff --git a/libs/ardour/ardour/state_manager.h b/libs/ardour/ardour/state_manager.h index 19ee2e624a..99bfcfc3ce 100644 --- a/libs/ardour/ardour/state_manager.h +++ b/libs/ardour/ardour/state_manager.h @@ -35,6 +35,8 @@ class StateManager : public sigc::trackable state_id_t _current_state_id; + virtual bool should_save_state () const { return true; } + static void prohibit_save (); static void allow_save (const char* why, bool dosave); diff --git a/libs/ardour/ardour/tempo.h b/libs/ardour/ardour/tempo.h index db06894607..bfd3e429c3 100644 --- a/libs/ardour/ardour/tempo.h +++ b/libs/ardour/ardour/tempo.h @@ -238,6 +238,7 @@ class TempoMap : public Stateful, public StateManager { XMLNode& get_state (void); int set_state (const XMLNode&); + PBD::ID id() { return _id; } void dump (std::ostream&) const; void clear (); @@ -315,6 +316,8 @@ class TempoMap : public Stateful, public StateManager { void save_state (std::string why); + PBD::ID _id; + }; }; /* namespace ARDOUR */ diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h index f16e9d29d9..4e2af5c80e 100644 --- a/libs/ardour/ardour/track.h +++ b/libs/ardour/ardour/track.h @@ -48,7 +48,7 @@ class Track : public Route void toggle_monitor_input (); - bool can_record() const { return true; } + virtual bool can_record(); Diskstream& diskstream() const { return *_diskstream; } diff --git a/libs/ardour/ardour/vst_plugin.h b/libs/ardour/ardour/vst_plugin.h index 3cb10d1779..5253da7b0a 100644 --- a/libs/ardour/ardour/vst_plugin.h +++ b/libs/ardour/ardour/vst_plugin.h @@ -104,6 +104,15 @@ class VSTPlugin : public ARDOUR::Plugin bool been_resumed; }; -} +class VSTPluginInfo : public PluginInfo +{ + public: + VSTPluginInfo () {} + ~VSTPluginInfo () {} + + PluginPtr load (Session& session); +}; + +} // namespace ARDOUR #endif /* __ardour_vst_plugin_h__ */ |