summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-06-03 13:29:28 +0200
committerRobin Gareus <robin@gareus.org>2017-06-03 13:55:16 +0200
commit11ba1854b398c72e93cd42efeec6aa48a4e9a125 (patch)
tree5536e85bdfb303a6353eb7b55f63f0e783e88c9f
parent9581cb26e444229301d5fdafadd14ca5c0a83a18 (diff)
Apply VCA master gain automation to Amp (Fader, Trim)
-rw-r--r--libs/ardour/amp.cc18
-rw-r--r--libs/ardour/ardour/gain_control.h2
-rw-r--r--libs/ardour/gain_control.cc7
3 files changed, 11 insertions, 16 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);
+}