summaryrefslogtreecommitdiff
path: root/libs/ardour/amp.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2017-01-21 15:02:29 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2017-01-21 15:02:29 +0000
commit94a136a6bf9f8e8d402b97c95924f253e505e9ac (patch)
treef57ce468781c0db89c7b69942d709cdcb7b6cf38 /libs/ardour/amp.cc
parent2f530d4fd86b00757a3cb15765b59d3976bf5011 (diff)
Amp is the one place where we generate a per-sample vector for automation playback. Scale this by the masters' value(s) if appropriate
Diffstat (limited to 'libs/ardour/amp.cc')
-rw-r--r--libs/ardour/amp.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/libs/ardour/amp.cc b/libs/ardour/amp.cc
index 21c79df684..a111350068 100644
--- a/libs/ardour/amp.cc
+++ b/libs/ardour/amp.cc
@@ -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];
}