Amp is the one place where we generate a per-sample vector for automation playback...
authorPaul Davis <paul@linuxaudiosystems.com>
Sat, 21 Jan 2017 15:02:29 +0000 (15:02 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Sat, 21 Jan 2017 15:02:29 +0000 (15:02 +0000)
libs/ardour/amp.cc

index 21c79df684b6f1ccc4ca1a9d23d61bfd6affc99d..a111350068b77be04f531f8297ae5cb6b41a5aa7 100644 (file)
@@ -395,6 +395,23 @@ Amp::setup_gain_automation (framepos_t start_frame, framepos_t end_frame, framec
                assert (_gain_automation_buffer);
                _apply_gain_automation = _gain_control->list()->curve().rt_safe_get_vector (
                        start_frame, end_frame, _gain_automation_buffer, nframes);
+
+               /* XXX the future requires a way to automate the control master
+                * and merge its own automation vector/curve with this one. We
+                * don't have a way to do that just yet, so for now, just get
+                * the master's current gain and scale our own automation
+                * vector/curve by this value.
+                */
+
+               if (_gain_control->slaved()) {
+                       const double master_gain = _gain_control->get_masters_value ();
+                       if (master_gain != 1.0) {
+                               for (framecnt_t n = 0; n < nframes; ++n) {
+                                       _gain_automation_buffer[n] *= master_gain;
+                               }
+                       }
+               }
+
                if (start_frame != _current_automation_frame && _session.bounce_processing ()) {
                        _current_gain = _gain_automation_buffer[0];
                }