copy over changes to BasicUI::button_varispeed() to ARDOUR_UI::button_varispeed()
This commit is contained in:
parent
273049a5a1
commit
9f4189c031
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user