return;
}
- /// TODO: Figure out what happens to phi and phase, if transport speed momentarily becomes
- /// 1.0 eg. during the adjustments of a slave. If that is a bug, then AudioDiskstream::process
- /// is very likely broken too
if (_transport_speed == 1.0) {
frames_moved = (long) nframes;
} else {
- frames_moved = (long) AudioDiskstream::
- calculate_varispeed_playback_distance(nframes, phase, phi, target_phi);
+ interpolation.set_target_speed (_target_transport_speed);
+ interpolation.set_speed (_transport_speed);
+ frames_moved = (long) interpolation.interpolate (0, nframes, 0, 0);
}
end_frame = _transport_frame + (nframes_t)frames_moved;
while (nframes) {
this_nframes = nframes; /* real (jack) time relative */
+ frames_moved = (long) floor (_transport_speed * nframes); /* transport relative */
/* running an event, position transport precisely to its time */
if (this_event && this_event->action_frame <= end_frame && this_event->action_frame >= _transport_frame) {
slave_speed = 0.0f;
}
- if (_slave->is_always_synced() || Config->get_timecode_source_is_synced()) {
+ if (_slave->is_always_synced() || config.get_timecode_source_is_synced()) {
/* if the TC source is synced, then we assume that its
speed is binary: 0.0 or 1.0
track_slave_state(slave_speed, slave_transport_frame, this_delta, starting);
- if (slave_state == Running && !_slave->is_always_synced() && !Config->get_timecode_source_is_synced()) {
+ if (slave_state == Running && !_slave->is_always_synced() && !config.get_timecode_source_is_synced()) {
if (_transport_speed != 0.0f) {
prepare_diskstreams ();
- /// TODO: Figure out what happens to phi and phase, if transport speed momentarily becomes
- /// 1.0 eg. during the adjustments of a slave. If that is a bug, then AudioDiskstream::process
- /// is very likely broken too
if (_transport_speed == 1.0) {
frames_moved = (long) nframes;
} else {
- frames_moved = (long) AudioDiskstream::
- calculate_varispeed_playback_distance(nframes, phase, phi, target_phi);
+ interpolation.set_target_speed (_target_transport_speed);
+ interpolation.set_speed (_transport_speed);
+ frames_moved = (long) interpolation.interpolate (0, nframes, 0, 0);
}
if (process_routes (nframes)) {