diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-09-13 14:01:38 -0500 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-09-13 14:11:29 -0500 |
commit | e942c389a7aa3bc03adeb57dc0491ae6230fb213 (patch) | |
tree | f0cdd81566a64eec7919c9094107b5379b4665dd /libs/ardour/midi_diskstream.cc | |
parent | 4fa0e3ee90509196ff60af6f3193ddb532bb58ca (diff) |
do not call MidiRingBuffer::skip_to() when getting a MidiDiskstream's playback buffer, and do not use port offset to shift data in time either (it should be correct)
Diffstat (limited to 'libs/ardour/midi_diskstream.cc')
-rw-r--r-- | libs/ardour/midi_diskstream.cc | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc index 4d3dd4e5a7..13f1d7e549 100644 --- a/libs/ardour/midi_diskstream.cc +++ b/libs/ardour/midi_diskstream.cc @@ -1455,46 +1455,47 @@ MidiDiskstream::get_playback (MidiBuffer& dst, framecnt_t nframes) beyond the loop end. */ - _playback_buf->resolve_tracker (dst, split_cycle_offset); + _playback_buf->resolve_tracker (dst, 0); } - _playback_buf->skip_to (effective_start); - /* for split-cycles we need to offset the events */ if (loc->end() >= effective_start && loc->end() < effective_start + nframes) { + /* end of loop is within the range we are reading, so split the read in two, and lie about the location for the 2nd read */ + framecnt_t first, second; first = loc->end() - effective_start; second = nframes - first; - DEBUG_TRACE (DEBUG::MidiDiskstreamIO, string_compose ("loop read for eff %1 end %2: %3 and %4\n", - effective_start, loc->end(), first, second)); + DEBUG_TRACE (DEBUG::MidiDiskstreamIO, string_compose ("loop read for eff %1 end %2: %3 and %4, cycle offset %5\n", + effective_start, loc->end(), first, second)); if (first) { DEBUG_TRACE (DEBUG::MidiDiskstreamIO, string_compose ("loop read #1, from %1 for %2\n", effective_start, first)); - events_read = _playback_buf->read (dst, effective_start, first, split_cycle_offset); + events_read = _playback_buf->read (dst, effective_start, first); } if (second) { DEBUG_TRACE (DEBUG::MidiDiskstreamIO, string_compose ("loop read #2, from %1 for %2\n", loc->start(), second)); - events_read += _playback_buf->read (dst, loc->start(), second, split_cycle_offset); + events_read += _playback_buf->read (dst, loc->start(), second); } } else { DEBUG_TRACE (DEBUG::MidiDiskstreamIO, string_compose ("loop read #3, adjusted start as %1 for %2\n", effective_start, nframes)); - events_read = _playback_buf->read (dst, effective_start, effective_start + nframes, split_cycle_offset); + events_read = _playback_buf->read (dst, effective_start, effective_start + nframes); } } else { _playback_buf->skip_to (playback_sample); - events_read = _playback_buf->read (dst, playback_sample, playback_sample + nframes, split_cycle_offset); + DEBUG_TRACE (DEBUG::MidiDiskstreamIO, string_compose ("playback buffer read, from %1 to %2 (%3)", playback_sample, playback_sample + nframes, nframes)); + events_read = _playback_buf->read (dst, playback_sample, playback_sample + nframes); } DEBUG_TRACE (DEBUG::MidiDiskstreamIO, string_compose ( |