summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_diskstream.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/midi_diskstream.cc')
-rw-r--r--libs/ardour/midi_diskstream.cc26
1 files changed, 20 insertions, 6 deletions
diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc
index c1d391fa4a..e3d7014457 100644
--- a/libs/ardour/midi_diskstream.cc
+++ b/libs/ardour/midi_diskstream.cc
@@ -737,16 +737,16 @@ MidiDiskstream::read (framepos_t& start, framecnt_t dur, bool reversed)
start = loop_start + ((start - loop_start) % loop_length);
//cerr << "to " << start << endl;
}
- //cerr << "start is " << start << " loopstart: " << loop_start << " loopend: " << loop_end << endl;
+ // cerr << "start is " << start << " loopstart: " << loop_start << " loopend: " << loop_end << endl;
}
while (dur) {
/* take any loop into account. we can't read past the end of the loop. */
- if (loc && (loop_end - start < dur)) {
+ if (loc && (loop_end - start <= dur)) {
this_read = loop_end - start;
- //cerr << "reloop true: thisread: " << this_read << " dur: " << dur << endl;
+ // cerr << "reloop true: thisread: " << this_read << " dur: " << dur << endl;
reloop = true;
} else {
reloop = false;
@@ -1102,9 +1102,7 @@ MidiDiskstream::transport_stopped_wallclock (struct tm& /*when*/, time_t /*twhen
no_capture_stuff_to_do:
- if (_playlist) {
- midi_playlist()->clear_note_trackers ();
- }
+ reset_tracker ();
}
void
@@ -1134,6 +1132,10 @@ MidiDiskstream::transport_looped (framepos_t transport_frame)
last_recordable_frame = max_framepos;
was_recording = true;
}
+
+ if (!Config->get_seamless_loop()) {
+ reset_tracker ();
+ }
}
void
@@ -1477,3 +1479,15 @@ MidiDiskstream::get_gui_feed_buffer () const
b->copy (_gui_feed_buffer);
return b;
}
+
+void
+MidiDiskstream::reset_tracker ()
+{
+ _playback_buf->reset_tracker ();
+
+ boost::shared_ptr<MidiPlaylist> mp (midi_playlist());
+
+ if (mp) {
+ mp->clear_note_trackers ();
+ }
+}