triggerbox: fix mis-designed handling of dest_offset when a trigger starts within the same run() call as another

This commit is contained in:
Paul Davis 2021-12-06 14:06:48 -07:00
parent bc7e14c8ac
commit 7b8be04623
1 changed files with 9 additions and 5 deletions

View File

@ -405,7 +405,7 @@ pframes_t
Trigger::maybe_compute_next_transition (samplepos_t start_sample, Temporal::Beats const & start, Temporal::Beats const & end, pframes_t dest_offset, bool passthru) Trigger::maybe_compute_next_transition (samplepos_t start_sample, Temporal::Beats const & start, Temporal::Beats const & end, pframes_t dest_offset, bool passthru)
{ {
using namespace Temporal; using namespace Temporal;
/* This should never be called by a stopped trigger */ /* This should never be called by a stopped trigger */
assert (_state != Stopped); assert (_state != Stopped);
@ -414,12 +414,13 @@ Trigger::maybe_compute_next_transition (samplepos_t start_sample, Temporal::Beat
if (_state == Running || _state == Stopping) { if (_state == Running || _state == Stopping) {
/* will cover everything */ /* will cover everything */
return dest_offset; return 0;
} }
timepos_t transition_time (BeatTime); timepos_t transition_time (BeatTime);
TempoMap::SharedPtr tmap (TempoMap::use()); TempoMap::SharedPtr tmap (TempoMap::use());
Temporal::BBT_Time transition_bbt; Temporal::BBT_Time transition_bbt;
pframes_t extra_offset = 0;
/* XXX need to use global grid here is quantization == zero */ /* XXX need to use global grid here is quantization == zero */
@ -484,7 +485,7 @@ Trigger::maybe_compute_next_transition (samplepos_t start_sample, Temporal::Beat
* should end up, and the number of samples it should generate. * should end up, and the number of samples it should generate.
*/ */
dest_offset += std::max (samplepos_t (0), transition_samples - start_sample); extra_offset = std::max (samplepos_t (0), transition_samples - start_sample);
if (!passthru) { if (!passthru) {
/* XXX need to silence start of buffers up to dest_offset */ /* XXX need to silence start of buffers up to dest_offset */
@ -517,7 +518,7 @@ Trigger::maybe_compute_next_transition (samplepos_t start_sample, Temporal::Beat
} }
return dest_offset; return extra_offset;
} }
/*--------------------*/ /*--------------------*/
@ -846,7 +847,10 @@ AudioTrigger::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sa
const bool stretching = (_apparent_tempo != 0.); const bool stretching = (_apparent_tempo != 0.);
/* see if we're going to start or stop or retrigger in this run() call */ /* see if we're going to start or stop or retrigger in this run() call */
dest_offset = maybe_compute_next_transition (start_sample, start, end, dest_offset, passthru); pframes_t extra_offset = maybe_compute_next_transition (start_sample, start, end, dest_offset, passthru);
nframes -= extra_offset;
dest_offset += extra_offset;
DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 after checking for transition, state = %2\n", name(), enum_2_string (_state))); DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 after checking for transition, state = %2\n", name(), enum_2_string (_state)));