From b2149de37b8a55fb69d1da65ea321d93e40e5e7c Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 18 Apr 2016 15:16:27 +0200 Subject: [PATCH] add notification if Engine Rate changes and mismatches session's SR --- libs/ardour/ardour/session.h | 3 +++ libs/ardour/session.cc | 4 ++++ libs/ardour/session_state.cc | 5 +++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 3e8ab07df3..b02c6619dc 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -726,6 +726,9 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop */ static PBD::Signal2 AskAboutSampleRateMismatch; + /** non interactive message */ + static PBD::Signal2 NotifyAboutSampleRateMismatch; + /** handlers should return !0 for use pending state, 0 for ignore it. */ static PBD::Signal0 AskAboutPendingState; diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index e4f3e38032..d1647d3ee1 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -131,6 +131,7 @@ PBD::Signal1 Session::AudioEngineSetupRequired; PBD::Signal1 Session::Dialog; PBD::Signal0 Session::AskAboutPendingState; PBD::Signal2 Session::AskAboutSampleRateMismatch; +PBD::Signal2 Session::NotifyAboutSampleRateMismatch; PBD::Signal0 Session::SendFeedback; PBD::Signal3 Session::MissingFile; @@ -2027,6 +2028,9 @@ Session::set_frame_rate (framecnt_t frames_per_second) if (_base_frame_rate == 0) { _base_frame_rate = frames_per_second; } + else if (_base_frame_rate != frames_per_second && frames_per_second != _nominal_frame_rate) { + NotifyAboutSampleRateMismatch (_base_frame_rate, frames_per_second); + } _nominal_frame_rate = frames_per_second; sync_time_vars(); diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index 6376f1ab0b..95eb36c07f 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -1316,8 +1316,9 @@ Session::set_state (const XMLNode& node, int version) _base_frame_rate = atoi (prop->value()); _nominal_frame_rate = _base_frame_rate; - if (_nominal_frame_rate != _current_frame_rate) { - boost::optional r = AskAboutSampleRateMismatch (_nominal_frame_rate, _current_frame_rate); + assert (AudioEngine::instance()->running ()); + if (_base_frame_rate != AudioEngine::instance()->sample_rate ()) { + boost::optional r = AskAboutSampleRateMismatch (_base_frame_rate, _current_frame_rate); if (r.get_value_or (0)) { goto out; }