From 11ba1854b398c72e93cd42efeec6aa48a4e9a125 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 3 Jun 2017 13:29:28 +0200 Subject: [PATCH] Apply VCA master gain automation to Amp (Fader, Trim) --- libs/ardour/amp.cc | 16 +--------------- libs/ardour/ardour/gain_control.h | 2 ++ libs/ardour/gain_control.cc | 7 +++++++ 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/libs/ardour/amp.cc b/libs/ardour/amp.cc index 348f6957d4..d7b9014340 100644 --- a/libs/ardour/amp.cc +++ b/libs/ardour/amp.cc @@ -392,22 +392,8 @@ Amp::setup_gain_automation (framepos_t start_frame, framepos_t end_frame, framec && _gain_control->automation_playback()) { 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) { - apply_gain_to_buffer (_gain_automation_buffer, nframes, master_gain); - } - } + _apply_gain_automation = _gain_control->get_masters_curve ( start_frame, end_frame, _gain_automation_buffer, nframes); if (start_frame != _current_automation_frame && _session.bounce_processing ()) { _current_gain = _gain_automation_buffer[0]; diff --git a/libs/ardour/ardour/gain_control.h b/libs/ardour/ardour/gain_control.h index 431342dab3..c902cde001 100644 --- a/libs/ardour/ardour/gain_control.h +++ b/libs/ardour/ardour/gain_control.h @@ -45,6 +45,8 @@ class LIBARDOUR_API GainControl : public SlavableAutomationControl { double user_to_internal (double) const; std::string get_user_string () const; + bool get_masters_curve_locked (framepos_t, framepos_t, float*, framecnt_t) const; + double lower_db; double range_db; diff --git a/libs/ardour/gain_control.cc b/libs/ardour/gain_control.cc index e6154495a4..cbafc75ad4 100644 --- a/libs/ardour/gain_control.cc +++ b/libs/ardour/gain_control.cc @@ -21,6 +21,8 @@ #include "pbd/convert.h" #include "pbd/strsplit.h" +#include "evoral/Curve.hpp" + #include "ardour/dB.h" #include "ardour/gain_control.h" #include "ardour/session.h" @@ -100,3 +102,8 @@ GainControl::inc_gain (gain_t factor) } } +bool +GainControl::get_masters_curve_locked (framepos_t start, framepos_t end, float* vec, framecnt_t veclen) const +{ + return SlavableAutomationControl::masters_curve_multiply (start, end, vec, veclen); +}