diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 665ddac5d6..519279bb1f 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -450,8 +450,13 @@ Route::process_output_buffers (BufferSet& bufs, on a transition between monitoring states we get a de-clicking gain change in the _main_outs delivery. */ + bool silence = monitoring_state () == MonitoringSilence; - _main_outs->no_outs_cuz_we_no_monitor (monitoring_state () == MonitoringSilence); + //but we override this in the case where we have an internal generator + if ( _have_internal_generator ) + silence = false; + + _main_outs->no_outs_cuz_we_no_monitor (silence); /* ------------------------------------------------------------------------------------------- GLOBAL DECLICK (for transport changes etc.) diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index 222c2d81ba..189b315e20 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -419,38 +419,30 @@ Track::no_roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, bool be_silent; - if (_have_internal_generator) { - /* since the instrument has no input streams, - there is no reason to send any signal - into the route. - */ + MonitorState const s = monitoring_state (); + /* we are not rolling, so be silent even if we are monitoring disk, as there + will be no disk data coming in. + */ + switch (s) { + case MonitoringSilence: be_silent = true; - - } else { - - MonitorState const s = monitoring_state (); - /* we are not rolling, so be silent even if we are monitoring disk, as there - will be no disk data coming in. - */ - switch (s) { - case MonitoringSilence: - /* if there is an instrument, be_silent should always - be false - */ - be_silent = (the_instrument_unlocked() == 0); - break; - case MonitoringDisk: - be_silent = true; - break; - case MonitoringInput: - be_silent = false; - break; - default: - be_silent = false; - break; - } + break; + case MonitoringDisk: + be_silent = true; + break; + case MonitoringInput: + be_silent = false; + break; + default: + be_silent = false; + break; } - + + //if we have an internal generator, let it play regardless of monitoring state + if (_have_internal_generator) { + be_silent = false; + } + _amp->apply_gain_automation (false); /* if have_internal_generator, or .. */