Amend c8a9b28d3 and 40aebce. Fix gain automation edge-cases:

* drop Trim/Fader automation for bypassed processor
* Trim/Fader automation for Busses is always active when rolling
This commit is contained in:
Robin Gareus 2017-09-19 04:54:42 +02:00
parent 1ec471c961
commit 29e553ab86
3 changed files with 7 additions and 4 deletions

View File

@ -78,6 +78,8 @@ void
Amp::run (BufferSet& bufs, samplepos_t /*start_sample*/, samplepos_t /*end_sample*/, double /*speed*/, pframes_t nframes, bool)
{
if (!_active && !_pending_active) {
/* disregard potentially prepared gain-automation. */
_apply_gain_automation = false;
return;
}
@ -121,7 +123,7 @@ Amp::run (BufferSet& bufs, samplepos_t /*start_sample*/, samplepos_t /*end_sampl
}
/* used it, don't do it again until setup_gain_automation() is
called successfully.
* called successfully.
*/
_apply_gain_automation = false;
@ -389,6 +391,9 @@ Amp::set_state (const XMLNode& node, int version)
/** Write gain automation for this cycle into the buffer previously passed in to
* set_gain_automation_buffer (if we are in automation playback mode and the
* transport is rolling).
*
* After calling this, the gain-automation buffer is valid for the next run.
* so make sure to call ::run() which invalidates the buffer again.
*/
void
Amp::setup_gain_automation (samplepos_t start_sample, samplepos_t end_sample, samplecnt_t nframes)

View File

@ -53,8 +53,6 @@ public:
void setup_gain_automation (samplepos_t start_sample, samplepos_t end_sample, samplecnt_t nframes);
bool apply_gain_automation() const { return _apply_gain_automation; }
XMLNode& state (bool full);
int set_state (const XMLNode&, int version);

View File

@ -3620,7 +3620,7 @@ Route::roll (pframes_t nframes, samplepos_t start_sample, samplepos_t end_sample
_meter->run (bufs, start_sample, end_sample, 1.0 /*speed()*/, nframes, true);
}
passthru (bufs, start_sample, end_sample, nframes, declick, ((_disk_writer && !_disk_writer->record_enabled()) && _session.transport_rolling()));
passthru (bufs, start_sample, end_sample, nframes, declick, (!_disk_writer || !_disk_writer->record_enabled()) && _session.transport_rolling());
if ((_disk_reader && _disk_reader->need_butler()) || (_disk_writer && _disk_writer->need_butler())) {
need_butler = true;