Fix another thinko in 9581cb26 + 02b087c5 (VCA gain automation)

This went unnoticed because: VCA gain automation was always applied
(regardless of automation state) but when it was not playing
master_ratio() factored it out again (per block).
This commit is contained in:
Robin Gareus 2017-06-13 16:05:33 +02:00
parent b34f2e2c38
commit fdb3df7786

View file

@ -128,7 +128,8 @@ bool
SlavableAutomationControl::masters_curve_multiply (framepos_t start, framepos_t end, float* vec, framecnt_t veclen) const SlavableAutomationControl::masters_curve_multiply (framepos_t start, framepos_t end, float* vec, framecnt_t veclen) const
{ {
gain_t* scratch = _session.scratch_automation_buffer (); gain_t* scratch = _session.scratch_automation_buffer ();
bool rv = list()->curve().rt_safe_get_vector (start, end, scratch, veclen); bool from_list = _list && boost::dynamic_pointer_cast<AutomationList>(_list)->automation_playback();
bool rv = from_list && list()->curve().rt_safe_get_vector (start, end, scratch, veclen);
if (rv) { if (rv) {
for (framecnt_t i = 0; i < veclen; ++i) { for (framecnt_t i = 0; i < veclen; ++i) {
vec[i] *= scratch[i]; vec[i] *= scratch[i];
@ -145,7 +146,9 @@ SlavableAutomationControl::masters_curve_multiply (framepos_t start, framepos_t
= boost::dynamic_pointer_cast<SlavableAutomationControl>(mr->second.master()); = boost::dynamic_pointer_cast<SlavableAutomationControl>(mr->second.master());
assert (sc); assert (sc);
rv |= sc->masters_curve_multiply (start, end, vec, veclen); rv |= sc->masters_curve_multiply (start, end, vec, veclen);
apply_gain_to_buffer (vec, veclen, mr->second.master_ratio ()); if (mr->second.val_master () != 0) {
apply_gain_to_buffer (vec, veclen, 1.f / mr->second.val_master ());
}
} }
return rv; return rv;
} }