Default_Play_Speed: prep work (libardour)

* remove unused variables in session.h
* move default play speed (varispeed(sic)) into fsm
* request_transport_speed should -never- set the default_play_speed
This commit is contained in:
Ben Loftis 2021-06-18 12:21:15 -05:00 committed by Robin Gareus
parent 35f045ee8b
commit 3114ef4de2
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
8 changed files with 37 additions and 36 deletions

View File

@ -479,9 +479,11 @@ public:
void use_rf_shuttle_speed (); void use_rf_shuttle_speed ();
void allow_auto_play (bool yn); void allow_auto_play (bool yn);
void set_default_play_speed (double spd, TransportRequestSource origin = TRS_UI);
void reset_transport_speed (TransportRequestSource origin = TRS_UI); void reset_transport_speed (TransportRequestSource origin = TRS_UI);
void request_transport_speed (double speed, bool as_default = true, TransportRequestSource origin = TRS_UI);
void request_transport_speed_nonzero (double, bool as_default = true, TransportRequestSource origin = TRS_UI); void request_transport_speed (double speed, TransportRequestSource origin = TRS_UI);
void request_transport_speed_nonzero (double, TransportRequestSource origin = TRS_UI);
void request_overwrite_buffer (boost::shared_ptr<Track>, OverwriteReason); void request_overwrite_buffer (boost::shared_ptr<Track>, OverwriteReason);
void adjust_playback_buffering(); void adjust_playback_buffering();
void adjust_capture_buffering(); void adjust_capture_buffering();
@ -1390,10 +1392,6 @@ private:
// varispeed playback -- TODO: move out of session to backend. // varispeed playback -- TODO: move out of session to backend.
double _engine_speed; double _engine_speed;
double _default_transport_speed;
double _default_engine_speed;
double _last_transport_speed;
double _requested_transport_speed;
double _signalled_varispeed; double _signalled_varispeed;
bool auto_play_legal; bool auto_play_legal;

View File

@ -54,7 +54,6 @@ struct TransportFSM
bool force; bool force;
/* for SetSpeed */ /* for SetSpeed */
double speed; double speed;
bool as_default;
Event (EventType t) Event (EventType t)
: type (t) : type (t)
@ -95,10 +94,9 @@ struct TransportFSM
cast double-to-bool and complains. C++11 would allow "= cast double-to-bool and complains. C++11 would allow "=
delete" as an alternate fix, but this is fine. delete" as an alternate fix, but this is fine.
*/ */
Event (double sp, bool ad) Event (double sp)
: type (SetSpeed) : type (SetSpeed)
, speed (sp) , speed (sp)
, as_default (ad)
{ {
} }
@ -147,7 +145,9 @@ struct TransportFSM
std::string current_state () const; std::string current_state () const;
double transport_speed() const { return _transport_speed; } double transport_speed() const { return _transport_speed; }
double default_speed() const { return _default_speed; } double default_speed() const { return _default_speed; }
void set_default_speed(double spd) const { _default_speed = spd; }
private: private:
MotionState _motion_state; MotionState _motion_state;

View File

@ -191,8 +191,6 @@ Session::Session (AudioEngine &eng,
, _silent (false) , _silent (false)
, _remaining_latency_preroll (0) , _remaining_latency_preroll (0)
, _engine_speed (1.0) , _engine_speed (1.0)
, _last_transport_speed (1.0)
, _requested_transport_speed (std::numeric_limits<double>::max())
, _signalled_varispeed (0) , _signalled_varispeed (0)
, auto_play_legal (false) , auto_play_legal (false)
, _requested_return_sample (-1) , _requested_return_sample (-1)

View File

@ -43,7 +43,7 @@ using namespace ARDOUR;
using namespace PBD; using namespace PBD;
#define TFSM_ROLL() { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::StartTransport)); } #define TFSM_ROLL() { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::StartTransport)); }
#define TFSM_SPEED(speed,as_default) { _transport_fsm->enqueue (new TransportFSM::Event (speed,as_default)); } #define TFSM_SPEED(speed) { _transport_fsm->enqueue (new TransportFSM::Event (speed)); }
boost::shared_ptr<ExportHandler> boost::shared_ptr<ExportHandler>
Session::get_export_handler () Session::get_export_handler ()
@ -308,7 +308,7 @@ Session::process_export_fw (pframes_t nframes)
return; return;
} }
TFSM_SPEED (1.0, false); TFSM_SPEED (1.0);
TFSM_ROLL (); TFSM_ROLL ();
_butler->schedule_transport_work (); _butler->schedule_transport_work ();

View File

@ -63,7 +63,7 @@ using namespace std;
#define TFSM_EVENT(evtype) { _transport_fsm->enqueue (new TransportFSM::Event (evtype)); } #define TFSM_EVENT(evtype) { _transport_fsm->enqueue (new TransportFSM::Event (evtype)); }
#define TFSM_ROLL() { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::StartTransport)); } #define TFSM_ROLL() { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::StartTransport)); }
#define TFSM_STOP(abort,clear) { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::StopTransport,abort,clear)); } #define TFSM_STOP(abort,clear) { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::StopTransport,abort,clear)); }
#define TFSM_SPEED(speed,as_default) { _transport_fsm->enqueue (new TransportFSM::Event (speed,as_default)); } #define TFSM_SPEED(speed) { _transport_fsm->enqueue (new TransportFSM::Event (speed)); }
#define TFSM_LOCATE(target,ltd,loop,force) { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::Locate,target,ltd,loop,force)); } #define TFSM_LOCATE(target,ltd,loop,force) { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::Locate,target,ltd,loop,force)); }
@ -918,7 +918,7 @@ Session::process_event (SessionEvent* ev)
case SessionEvent::SetTransportSpeed: case SessionEvent::SetTransportSpeed:
TFSM_SPEED (ev->speed, ev->yes_or_no); TFSM_SPEED (ev->speed);
break; break;
case SessionEvent::StartRoll: case SessionEvent::StartRoll:

View File

@ -86,7 +86,7 @@ using namespace PBD;
#define TFSM_EVENT(evtype) { _transport_fsm->enqueue (new TransportFSM::Event (evtype)); } #define TFSM_EVENT(evtype) { _transport_fsm->enqueue (new TransportFSM::Event (evtype)); }
#define TFSM_STOP(abort,clear) { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::StopTransport,abort,clear)); } #define TFSM_STOP(abort,clear) { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::StopTransport,abort,clear)); }
#define TFSM_LOCATE(target,ltd,loop,force) { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::Locate,target,ltd,loop,force)); } #define TFSM_LOCATE(target,ltd,loop,force) { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::Locate,target,ltd,loop,force)); }
#define TFSM_SPEED(speed,as_default) { _transport_fsm->enqueue (new TransportFSM::Event (speed,as_default)); } #define TFSM_SPEED(speed) { _transport_fsm->enqueue (new TransportFSM::Event (speed)); }
/* ***************************************************************************** /* *****************************************************************************
* REALTIME ACTIONS (to be called on state transitions) * REALTIME ACTIONS (to be called on state transitions)
@ -309,6 +309,16 @@ Session::post_locate ()
} }
} }
/** Set the default speed that is used when we respond to a "play" action.
* @param speed New speed
*/
void
Session::set_default_play_speed (double spd, TransportRequestSource origin)
{
_transport_fsm->set_default_speed(spd);
TransportStateChange (); /* EMIT SIGNAL */
}
/** Set the transport speed. /** Set the transport speed.
* Called from the process thread. * Called from the process thread.
* @param speed New speed * @param speed New speed
@ -743,11 +753,11 @@ Session::request_sync_source (boost::shared_ptr<TransportMaster> tm)
void void
Session::reset_transport_speed (TransportRequestSource origin) Session::reset_transport_speed (TransportRequestSource origin)
{ {
request_transport_speed (1.0, true, origin); request_transport_speed (_transport_fsm->default_speed(), origin);
} }
void void
Session::request_transport_speed (double speed, bool as_default, TransportRequestSource origin) Session::request_transport_speed (double speed, TransportRequestSource origin)
{ {
if (synced_to_engine()) { if (synced_to_engine()) {
if (speed != 0) { if (speed != 0) {
@ -769,8 +779,7 @@ Session::request_transport_speed (double speed, bool as_default, TransportReques
} }
SessionEvent* ev = new SessionEvent (SessionEvent::SetTransportSpeed, SessionEvent::Add, SessionEvent::Immediate, 0, speed); SessionEvent* ev = new SessionEvent (SessionEvent::SetTransportSpeed, SessionEvent::Add, SessionEvent::Immediate, 0, speed);
ev->yes_or_no = as_default; // as_default DEBUG_TRACE (DEBUG::Transport, string_compose ("Request transport speed = %1 as default = %2\n", speed));
DEBUG_TRACE (DEBUG::Transport, string_compose ("Request transport speed = %1 as default = %2\n", speed, as_default));
queue_event (ev); queue_event (ev);
} }
@ -779,13 +788,13 @@ Session::request_transport_speed (double speed, bool as_default, TransportReques
* be used by callers who are varying transport speed but don't ever want to stop it. * be used by callers who are varying transport speed but don't ever want to stop it.
*/ */
void void
Session::request_transport_speed_nonzero (double speed, bool as_default, TransportRequestSource origin) Session::request_transport_speed_nonzero (double speed, TransportRequestSource origin)
{ {
if (speed == 0) { if (speed == 0) {
speed = DBL_EPSILON; speed = DBL_EPSILON;
} }
request_transport_speed (speed, as_default); request_transport_speed (speed);
} }
void void
@ -913,7 +922,7 @@ Session::request_count_in_record ()
} }
maybe_enable_record (); maybe_enable_record ();
_count_in_once = true; _count_in_once = true;
request_transport_speed (1.0, true); request_transport_speed(_transport_fsm->default_speed());
} }
void void

View File

@ -506,7 +506,7 @@ TransportFSM::maybe_reset_speed ()
if (Config->get_reset_default_speed_on_stop()) { if (Config->get_reset_default_speed_on_stop()) {
if (most_recently_requested_speed != 1.0) { if (most_recently_requested_speed != 1.0) {
state_changed = set_speed (Event (1.0, false)); state_changed = set_speed (Event (1.0));
} }
} else { } else {
@ -515,11 +515,11 @@ TransportFSM::maybe_reset_speed ()
* speed change from whatever we have been rolling at to * speed change from whatever we have been rolling at to
* whatever the current default is. We could have been * whatever the current default is. We could have been
* rewinding at -4.5 ... when we restart, we need to play at * rewinding at -4.5 ... when we restart, we need to play at
* the current _default_transport_speed * the current _default_speed
*/ */
if (most_recently_requested_speed != _default_speed) { if (most_recently_requested_speed != _default_speed) {
state_changed = set_speed (Event (_default_speed, false)); state_changed = set_speed (Event (_default_speed));
} }
} }
@ -802,10 +802,6 @@ TransportFSM::set_speed (Event const & ev)
most_recently_requested_speed = ev.speed; most_recently_requested_speed = ev.speed;
if (ev.as_default) {
_default_speed = ev.speed;
}
if (must_reverse) { if (must_reverse) {
/* direction change */ /* direction change */

View File

@ -200,13 +200,13 @@ BasicUI::button_varispeed (bool fwd)
if (fwd) { if (fwd) {
if (transport_speed <= 0) { if (transport_speed <= 0) {
session->request_transport_speed (1.0, false); session->request_transport_speed (1.0);
session->request_roll (TRS_UI); session->request_roll (TRS_UI);
return; return;
} }
} else { } else {
if (transport_speed >= 0) { if (transport_speed >= 0) {
session->request_transport_speed (-1.0, false); session->request_transport_speed (-1.0);
session->request_roll (TRS_UI); session->request_roll (TRS_UI);
return; return;
} }
@ -221,12 +221,12 @@ BasicUI::button_varispeed (bool fwd)
if (fwd) { if (fwd) {
if (transport_speed <= 0) { if (transport_speed <= 0) {
session->request_transport_speed (1.0, false); session->request_transport_speed (1.0);
session->request_roll (TRS_UI); session->request_roll (TRS_UI);
} }
} else { } else {
if (transport_speed >= 0) { if (transport_speed >= 0) {
session->request_transport_speed (-1.0, false); session->request_transport_speed (-1.0);
session->request_roll (TRS_UI); session->request_roll (TRS_UI);
} }
} }
@ -272,7 +272,7 @@ BasicUI::button_varispeed (bool fwd)
speed = semitone_ratio * transport_speed; speed = semitone_ratio * transport_speed;
speed = std::max (-maxspeed, std::min (maxspeed, speed)); speed = std::max (-maxspeed, std::min (maxspeed, speed));
session->request_transport_speed (speed, false); session->request_transport_speed (speed);
session->request_roll (TRS_UI); session->request_roll (TRS_UI);
} }
@ -374,7 +374,7 @@ BasicUI::transport_play (bool from_last_start)
} }
if (rolling) { if (rolling) {
session->request_transport_speed (1.0, false, TRS_UI); session->request_transport_speed (1.0, TRS_UI);
} else { } else {
session->request_roll (); session->request_roll ();
} }