From 0d4ea1e61f12d9b7bf573abff427f5335d29be3d Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 25 May 2020 17:19:44 +0200 Subject: [PATCH] Fix reverse MIDI playback upper_bound() returns the first element that is **greater** than the given value. So during reverse playback we need the value before that. Likewise for forward playback, lower_bound() returns an iterator pointing to the element before the one that need to be played. --- libs/ardour/rt_midibuffer.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libs/ardour/rt_midibuffer.cc b/libs/ardour/rt_midibuffer.cc index 0a5013ff6f..04a31e34e9 100644 --- a/libs/ardour/rt_midibuffer.cc +++ b/libs/ardour/rt_midibuffer.cc @@ -302,8 +302,16 @@ RTMidiBuffer::read (MidiBuffer& dst, samplepos_t start, samplepos_t end, MidiSta */ if (reverse) { + if (evtime > start) { + --item; + continue; + } evtime = start - evtime; } else { + if (evtime < start) { + ++item; + continue; + } evtime -= start; }