prevent double declicks (click after RecStop)

If there's port-latency > period-size, there is a
split cycle with (this_event->action_frame - _transport_frame).
Yet Session::check_declick_out() keeps PendingDeclickOut if
StopPendingCapture is set. The route declick’ed twice:
Once with the period-size and one with the remaining frames,
which resulted in a click.
This commit is contained in:
Robin Gareus 2015-04-07 05:19:28 +02:00
parent a306968283
commit 6ba555c2f5
2 changed files with 13 additions and 0 deletions

View file

@ -506,6 +506,7 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou
framecnt_t _signal_latency_at_amp_position;
framecnt_t _initial_delay;
framecnt_t _roll_delay;
bool _declicked_silent;
ProcessorList _processors;
mutable Glib::Threads::RWLock _processor_lock;

View file

@ -83,6 +83,7 @@ Route::Route (Session& sess, string name, Flag flg, DataType default_type)
, _signal_latency_at_amp_position (0)
, _initial_delay (0)
, _roll_delay (0)
, _declicked_silent (true)
, _flags (flg)
, _pending_declick (true)
, _meter_point (MeterPostFader)
@ -465,7 +466,18 @@ Route::process_output_buffers (BufferSet& bufs,
GLOBAL DECLICK (for transport changes etc.)
----------------------------------------------------------------------------------------- */
if (_declickable && _declicked_silent && declick <= 0) {
bufs.silence (nframes, 0);
}
maybe_declick (bufs, nframes, declick);
if (declick < 0) {
_declicked_silent = true;
}
else if (declick > 0) {
_declicked_silent = false;
}
_pending_declick = 0;
/* -------------------------------------------------------------------------------------------