diff options
-rw-r--r-- | libs/ardour/ardour/io.h | 4 | ||||
-rw-r--r-- | libs/ardour/insert.cc | 6 | ||||
-rw-r--r-- | libs/ardour/io.cc | 9 | ||||
-rw-r--r-- | libs/ardour/panner.cc | 4 |
4 files changed, 14 insertions, 9 deletions
diff --git a/libs/ardour/ardour/io.h b/libs/ardour/ardour/io.h index 6ae917b9d4..7c0c0e1e78 100644 --- a/libs/ardour/ardour/io.h +++ b/libs/ardour/ardour/io.h @@ -244,9 +244,7 @@ class IO : public PBD::StatefulDestructible void clear_automation (); - bool gain_automation_recording() const { - return (_gain_automation_curve.automation_state() & (Auto_Write|Auto_Touch)); - } + bool gain_automation_recording(); bool gain_automation_playback() const { return (_gain_automation_curve.automation_state() & Auto_Play) || diff --git a/libs/ardour/insert.cc b/libs/ardour/insert.cc index 035d344ab6..1dd6cff83d 100644 --- a/libs/ardour/insert.cc +++ b/libs/ardour/insert.cc @@ -340,7 +340,7 @@ PluginInsert::automation_snapshot (nframes_t now, bool force) AutomationList *alist = *li; - if (alist && alist->automation_write ()) { + if (alist && alist->automation_write () && _session.transport_rolling()) { float val = _plugins[0]->get_parameter (n); alist->rt_add (now, val); @@ -361,7 +361,7 @@ PluginInsert::transport_stopped (nframes_t now) if (alist) { alist->reposition_for_rt_add (now); - if (alist->automation_state() != Auto_Off) { + if (alist->automation_state() == Auto_Touch || alist->automation_state() == Auto_Play) { _plugins[0]->set_parameter (n, alist->eval (now)); } } @@ -423,7 +423,7 @@ PluginInsert::set_parameter (uint32_t port, float val) _plugins[0]->set_parameter (port, val); - if (automation_list (port).automation_write()) { + if (automation_list (port).automation_write() && _session.transport_rolling()) { if ( desc.toggled ) //store the previous value just before this so any interpolation works right automation_list (port).add (_session.audible_frame()-1, last_val); automation_list (port).add (_session.audible_frame(), val); diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc index 2fe72a276c..35d0df9e9f 100644 --- a/libs/ardour/io.cc +++ b/libs/ardour/io.cc @@ -2567,6 +2567,13 @@ IO::meter () } } +bool +IO::gain_automation_recording () +{ + return (_session.transport_rolling() && _gain_automation_curve.automation_write() ); +} + + void IO::clear_automation () { @@ -2719,7 +2726,7 @@ IO::transport_stopped (nframes_t frame) { _gain_automation_curve.reposition_for_rt_add (frame); - if (_gain_automation_curve.automation_state() != Auto_Off) { + if (_gain_automation_curve.automation_state() == Auto_Touch || _gain_automation_curve.automation_state() == Auto_Play) { /* the src=0 condition is a special signal to not propagate automation gain changes into the mix group when locating. diff --git a/libs/ardour/panner.cc b/libs/ardour/panner.cc index 25ce8b2277..511a4778d5 100644 --- a/libs/ardour/panner.cc +++ b/libs/ardour/panner.cc @@ -198,7 +198,7 @@ BaseStereoPanner::~BaseStereoPanner () void BaseStereoPanner::snapshot (nframes_t now) { - if (_automation.automation_state() == Auto_Write || _automation.automation_state() == Auto_Touch) { + if (_automation.automation_write () && parent.session().transport_rolling()) { _automation.rt_add (now, x); } } @@ -206,7 +206,7 @@ BaseStereoPanner::snapshot (nframes_t now) void BaseStereoPanner::transport_stopped (nframes_t frame) { - if (_automation.automation_state() != Auto_Off) { + if (_automation.automation_state() == Auto_Touch || _automation.automation_state() == Auto_Play) { set_position (_automation.eval (frame)); } |