From ec367f49e187ae6103e583eca340fbcb25c76c3f Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 12 Apr 2021 18:57:25 -0600 Subject: [PATCH] add Session::request_transport_roll() Start separation of API for controlling rolling state from that used for speed --- libs/ardour/ardour/session.h | 1 + libs/ardour/session_transport.cc | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index f4e430b1a0..a625659ee0 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -465,6 +465,7 @@ public: void request_roll_at_and_return (samplepos_t start, samplepos_t return_to); void request_bounded_roll (samplepos_t start, samplepos_t end); + void request_roll (TransportRequestSource origin = TRS_UI); void request_stop (bool abort = false, bool clear_state = false, TransportRequestSource origin = TRS_UI); void request_locate (samplepos_t sample, LocateTransportDisposition ltd = RollIfAppropriate, TransportRequestSource origin = TRS_UI); diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index 27b71c9478..d9a375c2d2 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -898,6 +898,23 @@ Session::request_transport_speed_nonzero (double speed, bool as_default, Transpo request_transport_speed (speed, as_default); } +void +Session::request_roll (TransportRequestSource origin) +{ + if (synced_to_engine()) { + _engine.transport_stop (); + return; + } + + if (should_ignore_transport_request (origin, TR_StartStop)) { + return; + } + + SessionEvent* ev = new SessionEvent (SessionEvent::SetTransportSpeed, SessionEvent::Add, SessionEvent::Immediate, audible_sample(), _default_engine_speed * _default_transport_speed); + DEBUG_TRACE (DEBUG::Transport, string_compose ("Request transport roll, requested %1 from %2 * %3 transport @ %4\n", _default_engine_speed * _default_transport_speed, _default_engine_speed, _default_transport_speed, _transport_sample)); + queue_event (ev); +} + void Session::request_stop (bool abort, bool clear_state, TransportRequestSource origin) {