From 79033d8ee58e04338a34b2ce84dfb0c70c878ff2 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 22 Jan 2023 20:51:44 +0100 Subject: [PATCH] Resample when engine and session sample-rates mismatch --- libs/ardour/audioengine.cc | 3 ++- libs/ardour/session.cc | 6 ++++-- libs/ardour/session_state.cc | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index e98a6232ff..876759d6d5 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -195,10 +195,11 @@ AudioEngine::sample_rate_change (pframes_t nframes) if (_session) { _session->set_sample_rate (nframes); + } else { + Temporal::set_sample_rate (nframes); } SampleRateChanged (nframes); /* EMIT SIGNAL */ - Temporal::set_sample_rate (nframes); #ifdef SILENCE_AFTER_SECONDS _silence_countdown = nframes * SILENCE_AFTER_SECONDS; diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 4dd915685f..89c049662d 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -2121,10 +2121,11 @@ Session::set_sample_rate (samplecnt_t frames_per_second) if (_base_sample_rate == 0) { _base_sample_rate = frames_per_second; } - else if (_base_sample_rate != frames_per_second && frames_per_second != _nominal_sample_rate) { + else if (_base_sample_rate != frames_per_second && frames_per_second != _nominal_sample_rate && _engine.running ()) { NotifyAboutSampleRateMismatch (_base_sample_rate, frames_per_second); } - _nominal_sample_rate = frames_per_second; + _nominal_sample_rate = _base_sample_rate; + Temporal::set_sample_rate (_nominal_sample_rate); sync_time_vars(); @@ -6731,6 +6732,7 @@ void Session::initialize_latencies () { block_processing (); + Port::set_engine_ratio (_base_sample_rate, AudioEngine::instance()->sample_rate ()); update_latency (false); update_latency (true); unblock_processing (); diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index ce5a9aa57f..d3079b7757 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -1691,6 +1691,7 @@ Session::set_state (const XMLNode& node, int version) if (node.get_property (X_("sample-rate"), _base_sample_rate)) { _nominal_sample_rate = _base_sample_rate; + Temporal::set_sample_rate (_nominal_sample_rate); while (!AudioEngine::instance()->running () || _base_sample_rate != AudioEngine::instance()->sample_rate ()) { boost::optional r = AskAboutSampleRateMismatch (_base_sample_rate, _current_sample_rate);