summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-06-11 15:05:46 +0200
committerRobin Gareus <robin@gareus.org>2015-06-11 15:08:22 +0200
commit97de6efe5d6705f5ca8fb7af0e595e0f9fa092c1 (patch)
tree1ba2a83479f2922c9cbc3ae383dee406dbc93d90
parent753d1ac392d8d6e7f7a805c277649dafcbdaa1b7 (diff)
fix transport loop sub-state events
Loading a session with a loop-range, or setting a loop-range adds LoopDeclick events. Normal play back (no loop) never processes/clears the events. Ardour was constantly doing split cycles for nothing. This lead to stuck midi-notes: Split cycle calls increment_global_port_buffer_offset() but the midi_diskstream itself was not aware of any loop positions or offsets. Entering loop playback adds those events explicitly in Session::set_play_loop(). auto_loop_changed() only needs to add/replace session-events when actively looping.
-rw-r--r--libs/ardour/session.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 30c1d2acdd..71ad0bd705 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -1346,10 +1346,10 @@ Session::auto_loop_changed (Location* location)
framepos_t dcp;
framecnt_t dcl;
auto_loop_declick_range (location, dcp, dcl);
- replace_event (SessionEvent::AutoLoopDeclick, dcp, dcl);
if (transport_rolling() && play_loop) {
+ replace_event (SessionEvent::AutoLoopDeclick, dcp, dcl);
// if (_transport_frame > location->end()) {
@@ -1373,6 +1373,9 @@ Session::auto_loop_changed (Location* location)
}
}
+ } else {
+ clear_events (SessionEvent::AutoLoopDeclick);
+ clear_events (SessionEvent::AutoLoop);
}
last_loopend = location->end();