diff options
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/session.h | 1 | ||||
-rw-r--r-- | libs/ardour/session_midi.cc | 8 | ||||
-rw-r--r-- | libs/ardour/session_transport.cc | 14 |
3 files changed, 19 insertions, 4 deletions
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index ba39ee47f9..44ab172720 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -303,6 +303,7 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi void use_rf_shuttle_speed (); void allow_auto_play (bool yn); void request_transport_speed (double speed); + void request_transport_speed_nonzero (double); void request_overwrite_buffer (Track *); void adjust_playback_buffering(); void adjust_capture_buffering(); diff --git a/libs/ardour/session_midi.cc b/libs/ardour/session_midi.cc index 8dfcec3b5b..ae6d383092 100644 --- a/libs/ardour/session_midi.cc +++ b/libs/ardour/session_midi.cc @@ -235,7 +235,7 @@ Session::mmc_step (MIDI::MachineControl &/*mmc*/, int steps) << endl; #endif - request_transport_speed (step_speed); + request_transport_speed_nonzero (step_speed); last_mmc_step = now; if (!step_queued) { @@ -317,9 +317,9 @@ Session::mmc_shuttle (MIDI::MachineControl &/*mmc*/, float speed, bool forw) } if (forw) { - request_transport_speed (speed); + request_transport_speed_nonzero (speed); } else { - request_transport_speed (-speed); + request_transport_speed_nonzero (-speed); } } @@ -535,7 +535,7 @@ Session::mmc_step_timeout () /* slow it down */ - request_transport_speed (_transport_speed * 0.75); + request_transport_speed_nonzero (_transport_speed * 0.75); return true; } diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index de94db6f07..0aab6a7e27 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -107,6 +107,20 @@ Session::request_transport_speed (double 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. + */ +void +Session::request_transport_speed_nonzero (double speed) +{ + if (speed == 0) { + speed = DBL_EPSILON; + } + + request_transport_speed (speed); +} + void Session::request_track_speed (Track* tr, double speed) { |