13
0

better transport master behavior when working with sample-clock-synced transport masters

This commit is contained in:
Paul Davis 2019-11-15 15:58:29 -07:00
parent d64cf7a762
commit 1c7e446cb4

View File

@ -204,7 +204,23 @@ TransportMasterManager::pre_process_transport_masters (pframes_t nframes, sample
return 1.0;
}
if (_master_speed != 0.0) {
if (_current_master->sample_clock_synced()) {
/* No master DLL required. Speed identified by the master is
* our speed, quantized to {1.0, 0.0, -1.0}
*/
if (_master_speed > 0.0f) {
engine_speed = 1.0f;
} else if (_master_speed < 0.0f) {
engine_speed = -1.0f;
} else {
engine_speed = 0.0f;
}
DEBUG_TRACE (DEBUG::Slave, string_compose ("S-clock synced master speed %1 used as %2\n", _master_speed, engine_speed));
} else if (_master_speed != 0.0) {
samplepos_t delta = _master_position;
@ -264,18 +280,6 @@ TransportMasterManager::pre_process_transport_masters (pframes_t nframes, sample
engine_speed = 1.0;
}
if (_current_master->sample_clock_synced() && engine_speed != 0.0f) {
/* if the master is synced to our audio interface via word-clock or similar, then we assume that its speed is binary: 0.0 or 1.0
(since our sample clock cannot change with respect to it).
*/
if (engine_speed > 0.0) {
engine_speed = 1.0;
} else if (engine_speed < 0.0) {
engine_speed = -1.0;
}
}
/* speed is set, we're locked, and good to go */
DEBUG_TRACE (DEBUG::Slave, string_compose ("%1: computed speed-to-follow-master as %2\n", _current_master->name(), engine_speed));