Resample when engine and session sample-rates mismatch

This commit is contained in:
Robin Gareus 2023-01-22 20:51:44 +01:00
parent 65317ef0e0
commit 79033d8ee5
3 changed files with 7 additions and 3 deletions

View File

@ -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;

View File

@ -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 ();

View File

@ -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<int> r = AskAboutSampleRateMismatch (_base_sample_rate, _current_sample_rate);