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 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 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 adjust_playback_buffering();
void adjust_capture_buffering();
@ -1390,10 +1392,6 @@ private:
// varispeed playback -- TODO: move out of session to backend.
double _engine_speed;
double _default_transport_speed;
double _default_engine_speed;
double _last_transport_speed;
double _requested_transport_speed;
double _signalled_varispeed;
bool auto_play_legal;

View File

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

View File

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

View File

@ -43,7 +43,7 @@ using namespace ARDOUR;
using namespace PBD;
#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>
Session::get_export_handler ()
@ -308,7 +308,7 @@ Session::process_export_fw (pframes_t nframes)
return;
}
TFSM_SPEED (1.0, false);
TFSM_SPEED (1.0);
TFSM_ROLL ();
_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_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_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)); }
@ -918,7 +918,7 @@ Session::process_event (SessionEvent* ev)
case SessionEvent::SetTransportSpeed:
TFSM_SPEED (ev->speed, ev->yes_or_no);
TFSM_SPEED (ev->speed);
break;
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_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_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)
@ -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.
* Called from the process thread.
* @param speed New speed
@ -743,11 +753,11 @@ Session::request_sync_source (boost::shared_ptr<TransportMaster> tm)
void
Session::reset_transport_speed (TransportRequestSource origin)
{
request_transport_speed (1.0, true, origin);
request_transport_speed (_transport_fsm->default_speed(), origin);
}
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 (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);
ev->yes_or_no = as_default; // as_default
DEBUG_TRACE (DEBUG::Transport, string_compose ("Request transport speed = %1 as default = %2\n", speed, as_default));
DEBUG_TRACE (DEBUG::Transport, string_compose ("Request transport speed = %1 as default = %2\n", speed));
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.
*/
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) {
speed = DBL_EPSILON;
}
request_transport_speed (speed, as_default);
request_transport_speed (speed);
}
void
@ -913,7 +922,7 @@ Session::request_count_in_record ()
}
maybe_enable_record ();
_count_in_once = true;
request_transport_speed (1.0, true);
request_transport_speed(_transport_fsm->default_speed());
}
void

View File

@ -506,7 +506,7 @@ TransportFSM::maybe_reset_speed ()
if (Config->get_reset_default_speed_on_stop()) {
if (most_recently_requested_speed != 1.0) {
state_changed = set_speed (Event (1.0, false));
state_changed = set_speed (Event (1.0));
}
} else {
@ -515,11 +515,11 @@ TransportFSM::maybe_reset_speed ()
* speed change from whatever we have been rolling at to
* whatever the current default is. We could have been
* 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) {
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;
if (ev.as_default) {
_default_speed = ev.speed;
}
if (must_reverse) {
/* direction change */

View File

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