&& _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];
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;
#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"
}
}
+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);
+}