13
0

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:
Paul Davis 2009-11-30 17:05:36 +00:00
parent 0afbd9c335
commit 1ab5662166

View File

@ -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,28 +543,34 @@ 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()) {