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:
parent
753d1ac392
commit
97de6efe5d
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue