diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 9110b80532..0a1cc30abf 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -1997,53 +1997,74 @@ ARDOUR_UI::transport_ffwd_rewind (bool fwd) if (!_session) { return; } - // incrementally increase speed by semitones // (keypress auto-repeat is 100ms) const float maxspeed = Config->get_shuttle_max_speed(); float semitone_ratio = exp2f (1.0f/12.0f); - float transport_speed = _session->actual_speed (); + float transport_speed = _session->actual_speed(); + float speed; - if (transport_speed == 0.0 || fabs (transport_speed) <= 1.0/semitone_ratio) { - - /* close to zero, maybe flip direction */ + if (Config->get_rewind_ffwd_like_tape_decks()) { if (fwd) { if (transport_speed <= 0) { _session->request_transport_speed (1.0, false); _session->request_roll (TRS_UI); + return; } } else { if (transport_speed >= 0) { _session->request_transport_speed (-1.0, false); _session->request_roll (TRS_UI); + return; } } - /* either we've just started, or we're moving as slowly as we - * ever should - */ - return; - } - - if (fwd) { - if (transport_speed < 0.f) { - /* we need to move the speed back towards zero */ - semitone_ratio = 1.0/semitone_ratio; - } } else { - if (transport_speed > 0.f) { - /* we need to move the speed back towards zero */ - semitone_ratio = 1.0/semitone_ratio; + + if (transport_speed == 0.0 || fabs (transport_speed) <= 1.0/semitone_ratio) { + + /* close to zero, maybe flip direction */ + + if (fwd) { + if (transport_speed <= 0) { + _session->request_transport_speed (1.0, false); + _session->request_roll (TRS_UI); + } + } else { + if (transport_speed >= 0) { + _session->request_transport_speed (-1.0, false); + _session->request_roll (TRS_UI); + } + } + + /* either we've just started, or we're moving as slowly as we + * ever should + */ + + return; } + + if (fwd) { + if (transport_speed < 0.f) { + /* we need to move the speed back towards zero */ + semitone_ratio = 1.0/semitone_ratio; + } + } else { + if (transport_speed > 0.f) { + /* we need to move the speed back towards zero */ + semitone_ratio = 1.0/semitone_ratio; + } + } + } - float speed = semitone_ratio * transport_speed; - + speed = semitone_ratio * transport_speed; speed = std::max (-maxspeed, std::min (maxspeed, speed)); _session->request_transport_speed (speed, false); _session->request_roll (TRS_UI); + } void