From a9360eb6d6a4eb0c1b59c7f3a3f7be664c2c0bb8 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 12 May 2020 12:45:19 -0600 Subject: find a different way to NOT unset play loop when locating to start of loop --- libs/ardour/session_transport.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'libs/ardour') diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index 091d6ddd3b..28af0782dc 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -1475,7 +1475,15 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished) if (ptw & (PostTransportClearSubstate|PostTransportStop)) { unset_play_range (); if (!Config->get_loop_is_mode()) { - unset_play_loop (); + if (get_play_loop()) { + /* do not unset loop playback if we've just + located back to the start of the loop (i.e. to + prepare to play the loop. + */ + if (_transport_sample != _locations->auto_loop_location()->start()) { + unset_play_loop (); + } + } } } @@ -1589,11 +1597,7 @@ Session::set_play_loop (bool yn, bool change_transport_state) merge_event (new SessionEvent (SessionEvent::AutoLoop, SessionEvent::Replace, loc->end(), loc->start(), 0.0f)); if (!Config->get_loop_is_mode()) { - /* args: positition, roll=true, flush=true, for_loop_end=false, force buffer, refill looping */ - /* set this so that when/if we stop for locate, - we do not call unset_play_loop(). This is a - crude mechanism. Got a better idea? - */ + /* args: positition, disposition, flush=true, for_loop_end=false, force=true */ TFSM_LOCATE (loc->start(), MustRoll, true, false, true); } else if (!transport_rolling()) { /* loop-is-mode: not rolling, just locate to loop start */ -- cgit v1.2.3