try locating when master is way ahead or behind the slave (ardour)
git-svn-id: svn://localhost/ardour2/branches/3.0@6217 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
0afbd9c335
commit
1ab5662166
@ -493,7 +493,7 @@ Session::follow_slave (nframes_t nframes)
|
|||||||
|
|
||||||
_slave->speed_and_position (slave_speed, slave_transport_frame);
|
_slave->speed_and_position (slave_speed, slave_transport_frame);
|
||||||
|
|
||||||
DEBUG_TRACE (DEBUG::Slave, string_compose ("Slave @ %1 speed %2\n", slave_speed, slave_transport_frame));
|
DEBUG_TRACE (DEBUG::Slave, string_compose ("Slave @ %2 speed %1\n", slave_speed, slave_transport_frame));
|
||||||
|
|
||||||
if (!_slave->locked()) {
|
if (!_slave->locked()) {
|
||||||
goto noroll;
|
goto noroll;
|
||||||
@ -543,30 +543,36 @@ Session::follow_slave (nframes_t nframes)
|
|||||||
|
|
||||||
float delta;
|
float delta;
|
||||||
|
|
||||||
#ifdef USE_MOVING_AVERAGE_OF_SLAVE
|
#ifdef USE_MOVING_AVERAGE_OF_SLAVE
|
||||||
if (average_slave_delta == 0) {
|
if (average_slave_delta == 0) {
|
||||||
delta = this_delta;
|
|
||||||
delta *= dir;
|
|
||||||
} else {
|
|
||||||
delta = average_slave_delta;
|
|
||||||
delta *= average_dir;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
delta = this_delta;
|
delta = this_delta;
|
||||||
delta *= dir;
|
delta *= dir;
|
||||||
#endif
|
|
||||||
|
|
||||||
float adjusted_speed = slave_speed + (delta / float(_current_frame_rate));
|
|
||||||
|
|
||||||
if (_slave->give_slave_full_control_over_transport_speed()) {
|
|
||||||
request_transport_speed(slave_speed);
|
|
||||||
} else {
|
} else {
|
||||||
request_transport_speed(adjusted_speed);
|
delta = average_slave_delta;
|
||||||
DEBUG_TRACE (DEBUG::Slave, string_compose ("adjust using %1 towards %2 ratio %3 current %4 slave @ %5\n",
|
delta *= average_dir;
|
||||||
delta, adjusted_speed, adjusted_speed/slave_speed, _transport_speed,
|
|
||||||
slave_speed));
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
delta = this_delta;
|
||||||
|
delta *= dir;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (fabs(delta) > frames_per_cycle()) {
|
||||||
|
/* too far off, so locate and keep rolling */
|
||||||
|
DEBUG_TRACE (DEBUG::Slave, string_compose ("slave delta is too big, locate to %1\n", slave_transport_frame));
|
||||||
|
request_locate (slave_transport_frame, true);
|
||||||
|
} else {
|
||||||
|
float adjusted_speed = slave_speed + (delta / float(_current_frame_rate));
|
||||||
|
|
||||||
|
if (_slave->give_slave_full_control_over_transport_speed()) {
|
||||||
|
request_transport_speed(slave_speed);
|
||||||
|
} else {
|
||||||
|
request_transport_speed(adjusted_speed);
|
||||||
|
DEBUG_TRACE (DEBUG::Slave, string_compose ("adjust using %1 towards %2 ratio %3 current %4 slave @ %5\n",
|
||||||
|
delta, adjusted_speed, adjusted_speed/slave_speed, _transport_speed,
|
||||||
|
slave_speed));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (abs(average_slave_delta) > (long) _slave->resolution()) {
|
if (abs(average_slave_delta) > (long) _slave->resolution()) {
|
||||||
cerr << "average slave delta greater than slave resolution, going to silent motion\n";
|
cerr << "average slave delta greater than slave resolution, going to silent motion\n";
|
||||||
goto silent_motion;
|
goto silent_motion;
|
||||||
|
Loading…
Reference in New Issue
Block a user