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:
parent
35f045ee8b
commit
3114ef4de2
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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 ();
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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 */
|
||||
|
@ -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 ();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user