diff options
author | Carl Hetherington <carl@carlh.net> | 2010-12-07 14:44:47 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-12-07 14:44:47 +0000 |
commit | 94b4c264d156d79efc687a98f17514b128960118 (patch) | |
tree | 97847ecdb68b1da8ea482b5e4de54fcc058dcf4a /libs/ardour/ardour | |
parent | 40c162d6096f9bb338b602fb7845234133285411 (diff) |
Send note-offs to VST instrument plugins on transport stop. Fixes #3583.
git-svn-id: svn://localhost/ardour2/branches/3.0@8203 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r-- | libs/ardour/ardour/midi_track.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/plugin.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/plugin_insert.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/processor.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/route.h | 3 | ||||
-rw-r--r-- | libs/ardour/ardour/vst_plugin.h | 7 |
6 files changed, 15 insertions, 3 deletions
diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h index 554f5b3385..60d2567c21 100644 --- a/libs/ardour/ardour/midi_track.h +++ b/libs/ardour/ardour/midi_track.h @@ -42,7 +42,7 @@ public: int roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, int declick, bool can_record, bool rec_monitors_input, bool& need_butler); - void handle_transport_stopped (bool abort, bool did_locate, bool flush_processors); + void realtime_handle_transport_stopped (); void use_new_diskstream (); void set_diskstream (boost::shared_ptr<Diskstream>); diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h index 828e532c6a..d917ef85af 100644 --- a/libs/ardour/ardour/plugin.h +++ b/libs/ardour/ardour/plugin.h @@ -128,6 +128,8 @@ class Plugin : public PBD::StatefulDestructible, public Latent virtual bool parameter_is_input(uint32_t) const = 0; virtual bool parameter_is_output(uint32_t) const = 0; + virtual void realtime_handle_transport_stopped () {} + bool save_preset (std::string); void remove_preset (std::string); virtual bool load_preset (const std::string& uri) = 0; diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h index e4a42d8165..a83f75ed3e 100644 --- a/libs/ardour/ardour/plugin_insert.h +++ b/libs/ardour/ardour/plugin_insert.h @@ -74,6 +74,8 @@ class PluginInsert : public Processor bool is_generator() const; + void realtime_handle_transport_stopped (); + struct PluginControl : public AutomationControl { PluginControl (PluginInsert* p, const Evoral::Parameter ¶m, diff --git a/libs/ardour/ardour/processor.h b/libs/ardour/ardour/processor.h index 182208e560..9038088cf0 100644 --- a/libs/ardour/ardour/processor.h +++ b/libs/ardour/ardour/processor.h @@ -84,6 +84,8 @@ class Processor : public SessionObject, public Automatable, public Latent virtual ChanCount input_streams () const { return _configured_input; } virtual ChanCount output_streams() const { return _configured_output; } + virtual void realtime_handle_transport_stopped () {} + /* note: derived classes should implement state(), NOT get_state(), to allow us to merge C++ inheritance and XML lack-of-inheritance reasonably smoothly. diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index afa6c0e527..7f2f5dc719 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -116,7 +116,8 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, virtual void set_record_enabled (bool /*yn*/, void * /*src*/) {} virtual bool record_enabled() const { return false; } - virtual void handle_transport_stopped (bool abort, bool did_locate, bool flush_processors); + virtual void nonrealtime_handle_transport_stopped (bool abort, bool did_locate, bool flush_processors); + virtual void realtime_handle_transport_stopped () {} virtual void set_pending_declick (int); /* end of vfunc-based API */ diff --git a/libs/ardour/ardour/vst_plugin.h b/libs/ardour/ardour/vst_plugin.h index 332872e9bd..24af13c053 100644 --- a/libs/ardour/ardour/vst_plugin.h +++ b/libs/ardour/ardour/vst_plugin.h @@ -28,8 +28,8 @@ #include <dlfcn.h> #include "pbd/stateful.h" -#include <jack/types.h> #include "ardour/plugin.h" +#include "ardour/midi_state_tracker.h" struct _FSTHandle; struct _FST; @@ -79,6 +79,8 @@ class VSTPlugin : public ARDOUR::Plugin bool parameter_is_input(uint32_t i) const { return true; } bool parameter_is_output(uint32_t i) const { return false; } + void realtime_handle_transport_stopped (); + bool load_preset (const std::string& preset_label); virtual std::vector<PresetRecord> get_presets (); int first_user_preset_index () const; @@ -103,6 +105,9 @@ private: FST* _fst; AEffect* _plugin; bool been_resumed; + MidiStateTracker _tracker; + BufferSet _pending_stop_events; + bool _have_pending_stop_events; }; class VSTPluginInfo : public PluginInfo |