diff options
author | Robin Gareus <robin@gareus.org> | 2017-06-13 16:05:33 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-06-13 18:09:47 +0200 |
commit | fdb3df77860e6d39dac4e1b0b996c09fe067baf8 (patch) | |
tree | ce69cc9d4cff77154f9b972c3c29b1735cee6df1 | |
parent | b34f2e2c3801091213628a0969a6f86e3bacebc8 (diff) |
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).
-rw-r--r-- | libs/ardour/slavable_automation_control.cc | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/libs/ardour/slavable_automation_control.cc b/libs/ardour/slavable_automation_control.cc index d512b959ba..4b1dc7721e 100644 --- a/libs/ardour/slavable_automation_control.cc +++ b/libs/ardour/slavable_automation_control.cc @@ -128,7 +128,8 @@ bool SlavableAutomationControl::masters_curve_multiply (framepos_t start, framepos_t end, float* vec, framecnt_t veclen) const { 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) { for (framecnt_t i = 0; i < veclen; ++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()); assert (sc); 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; } |