summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/session.h1
-rw-r--r--libs/ardour/session_midi.cc8
-rw-r--r--libs/ardour/session_transport.cc14
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)
{