diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index 255993c6a8..8dbceab80b 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -1668,31 +1668,29 @@ Session::set_state (const XMLNode& node, int version) while (!AudioEngine::instance()->running () || _base_sample_rate != AudioEngine::instance()->sample_rate ()) { boost::optional r = AskAboutSampleRateMismatch (_base_sample_rate, _current_sample_rate); - switch (r.value_or (0)) { - case 0: - if (AudioEngine::instance()->running ()) { - /* continue with rate mismatch */ - break; - } - /* fallthrough */ - case -1: - if (AudioEngine::instance()->running ()) { - set_block_size (_engine.samples_per_cycle()); - set_sample_rate (_engine.sample_rate()); - /* retry */ - continue; - } - /* fallthrough */ - default: - if (AudioEngine::instance()->running ()) { - error << _("Session: Load aborted due to sample-rate mismatch") << endmsg; - } else { - error << _("Session: Load aborted since engine if offline") << endmsg; - } - ret = -2; - goto out; + int rv = r.value_or (0); + if (rv == 0 && AudioEngine::instance()->running ()) { + /* continue with rate mismatch */ + break; + } else if (rv == -1 && AudioEngine::instance()->running ()) { + /* retry */ + set_block_size (_engine.samples_per_cycle()); + /* retry */ + continue; + } else { + if (AudioEngine::instance()->running ()) { + error << _("Session: Load aborted due to sample-rate mismatch") << endmsg; + } else { + error << _("Session: Load aborted since engine if offline") << endmsg; + } + ret = -2; + goto out; } } + + if (_base_sample_rate != _engine.sample_rate ()) { + set_sample_rate (_engine.sample_rate()); + } } /* need the tempo map setup ASAP */