libardour: provide infrastructure for requesting default play speed

This commit is contained in:
Paul Davis 2021-07-18 19:40:09 -06:00
parent 8b365e238e
commit 3bdf009e11
4 changed files with 20 additions and 2 deletions

View File

@ -480,10 +480,11 @@ public:
void allow_auto_play (bool yn);
double default_play_speed ();
void set_default_play_speed (double spd, TransportRequestSource origin = TRS_UI);
void set_default_play_speed (double spd);
void reset_transport_speed (TransportRequestSource origin = TRS_UI);
void request_transport_speed (double speed, TransportRequestSource origin = TRS_UI);
void request_default_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();

View File

@ -44,6 +44,7 @@ class LIBARDOUR_API SessionEvent {
public:
enum Type {
SetTransportSpeed,
SetDefaultTransportSpeed,
Locate,
LocateRoll,
LocateRollLocate,

View File

@ -921,6 +921,10 @@ Session::process_event (SessionEvent* ev)
TFSM_SPEED (ev->speed);
break;
case SessionEvent::SetDefaultTransportSpeed:
set_default_play_speed (ev->speed);
break;
case SessionEvent::StartRoll:
TFSM_ROLL ();
break;

View File

@ -319,7 +319,7 @@ Session::default_play_speed ()
* @param speed New speed
*/
void
Session::set_default_play_speed (double spd, TransportRequestSource origin)
Session::set_default_play_speed (double spd)
{
_transport_fsm->set_default_speed(spd);
TFSM_SPEED(spd);
@ -792,6 +792,18 @@ Session::request_transport_speed (double speed, TransportRequestSource origin)
queue_event (ev);
}
void
Session::request_default_transport_speed (double speed, TransportRequestSource origin)
{
if (synced_to_engine()) {
return;
}
SessionEvent* ev = new SessionEvent (SessionEvent::SetDefaultTransportSpeed, SessionEvent::Add, SessionEvent::Immediate, 0, speed);
DEBUG_TRACE (DEBUG::Transport, string_compose ("Request default transport speed = %1 as default = %2\n", speed));
queue_event (ev);
}
/** Request a new transport speed, but if the speed parameter is exactly zero then use
* a very small +ve value to prevent the transport actually stopping. This method should
* be used by callers who are varying transport speed but don't ever want to stop it.