From 6908eb748b115cf7edae351fc18b01dc4c6c5fd0 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 18 Aug 2017 18:17:29 -0400 Subject: [PATCH] reorder input & output stages of beatbox, to deal with different semantics compared to JACK ports. Still needs some kind of intermediate buffer so that we can sort output events in among the input ones --- libs/ardour/beatbox.cc | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/libs/ardour/beatbox.cc b/libs/ardour/beatbox.cc index 6d53efa9bc..29bd3b2d59 100644 --- a/libs/ardour/beatbox.cc +++ b/libs/ardour/beatbox.cc @@ -151,10 +151,6 @@ BeatBox::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_fram /* do this on the first pass only */ MidiBuffer& buf = bufs.get_midi (0); - second_pass: - - /* Output */ - if (clear_pending) { for (Events::iterator ee = _current_events.begin(); ee != _current_events.end(); ++ee) { @@ -165,19 +161,7 @@ BeatBox::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_fram clear_pending = false; } - for (Events::iterator ee = _current_events.begin(); ee != _current_events.end(); ++ee) { - Event* e = (*ee); - - if (e->size && (e->time >= process_start && e->time < process_end)) { - framepos_t sample_offset_in_buffer = superclock_to_samples (offset + e->time - process_start, _session.frame_rate()); - - buf.push_back (sample_offset_in_buffer, e->size, e->buf); - } - - if (e->time >= process_end) { - break; - } - } + second_pass: /* input */ @@ -252,6 +236,21 @@ BeatBox::run (BufferSet& bufs, framepos_t /*start_frame*/, framepos_t /*end_fram } } + /* Output */ + + for (Events::iterator ee = _current_events.begin(); ee != _current_events.end(); ++ee) { + Event* e = (*ee); + + if (e->size && (e->time >= process_start && e->time < process_end)) { + const framepos_t sample_offset_in_buffer = superclock_to_samples (offset + e->time - process_start, _session.frame_rate()); + buf.push_back (sample_offset_in_buffer, e->size, e->buf); + } + + if (e->time >= process_end) { + break; + } + } + superclock_cnt += superclocks; if (two_pass_required) {