diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 1534385d7e..ae109032f4 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -537,10 +537,21 @@ Route::process_output_buffers (BufferSet& bufs, } } - if (speed < 0) { - (*i)->run (bufs, start_sample + latency, end_sample + latency, pspeed, nframes, *i != _processors.back()); - } else { - (*i)->run (bufs, start_sample - latency, end_sample - latency, pspeed, nframes, *i != _processors.back()); + /* run_disk_reader being false means we are still inside + * latency_preroll, and during this time we do not want to run + * the triggerbox at all. The disk reader looks at the speed + * (pspeed) that was reset to zero as a indication of how it + * should behave. The triggerbox is not speed-sensitive in the + * same way, so we need a more explicit test here to avoid + * running it. + */ + + if (run_disk_reader || ((*i) != _triggerbox)) { + if (speed < 0) { + (*i)->run (bufs, start_sample + latency, end_sample + latency, pspeed, nframes, *i != _processors.back()); + } else { + (*i)->run (bufs, start_sample - latency, end_sample - latency, pspeed, nframes, *i != _processors.back()); + } } bufs.set_count ((*i)->output_streams());