diff options
author | Robin Gareus <robin@gareus.org> | 2015-03-12 16:09:55 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-03-12 16:18:06 +0100 |
commit | b622bc18fc21de974f08a663996077ac91c98ccb (patch) | |
tree | 79eddfc7e1431d776501727d79e373af21fb4952 /libs | |
parent | 37a9ef0501143f086370c1c35ed915c3dd9b7fa6 (diff) |
amend 7bb9d04, fix midi looping
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/midi_diskstream.cc | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc index cd7e530a42..9795d57b5c 100644 --- a/libs/ardour/midi_diskstream.cc +++ b/libs/ardour/midi_diskstream.cc @@ -1440,8 +1440,6 @@ MidiDiskstream::get_playback (MidiBuffer& dst, framecnt_t nframes) size_t events_read = 0; - _playback_buf->skip_to (playback_sample); - if (loc) { framepos_t effective_start; @@ -1461,6 +1459,8 @@ MidiDiskstream::get_playback (MidiBuffer& dst, framecnt_t nframes) _playback_buf->resolve_tracker (dst, 0); } + _playback_buf->skip_to (effective_start); + 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 @@ -1492,6 +1492,7 @@ MidiDiskstream::get_playback (MidiBuffer& dst, framecnt_t nframes) 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); } |