Fix another thinko in 9581cb26 + 02b087c5 (VCA gain automation)
authorRobin Gareus <robin@gareus.org>
Tue, 13 Jun 2017 14:05:33 +0000 (16:05 +0200)
committerRobin Gareus <robin@gareus.org>
Tue, 13 Jun 2017 16:09:47 +0000 (18:09 +0200)
This went unnoticed because: VCA gain automation was always applied
(regardless of automation state) but when it was not playing
master_ratio() factored it out again (per block).

libs/ardour/slavable_automation_control.cc

index d512b959ba036a53ebe80b9accaf7a827b84e1da..4b1dc7721e6b8c95ddbd54ae546fdf8f7da78a90 100644 (file)
@@ -128,7 +128,8 @@ bool
 SlavableAutomationControl::masters_curve_multiply (framepos_t start, framepos_t end, float* vec, framecnt_t veclen) const
 {
        gain_t* scratch = _session.scratch_automation_buffer ();
-       bool rv = list()->curve().rt_safe_get_vector (start, end, scratch, veclen);
+       bool from_list = _list && boost::dynamic_pointer_cast<AutomationList>(_list)->automation_playback();
+       bool rv = from_list && list()->curve().rt_safe_get_vector (start, end, scratch, veclen);
        if (rv) {
                for (framecnt_t i = 0; i < veclen; ++i) {
                        vec[i] *= scratch[i];
@@ -145,7 +146,9 @@ SlavableAutomationControl::masters_curve_multiply (framepos_t start, framepos_t
                        = boost::dynamic_pointer_cast<SlavableAutomationControl>(mr->second.master());
                assert (sc);
                rv |= sc->masters_curve_multiply (start, end, vec, veclen);
-               apply_gain_to_buffer (vec, veclen, mr->second.master_ratio ());
+               if (mr->second.val_master () != 0) {
+                       apply_gain_to_buffer (vec, veclen, 1.f / mr->second.val_master ());
+               }
        }
        return rv;
 }