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.
This commit is contained in:
Robin Gareus 2015-06-11 15:05:46 +02:00
parent 753d1ac392
commit 97de6efe5d
1 changed files with 4 additions and 1 deletions

View File

@ -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();