diff --git a/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp b/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp index 328a3f5f94..8908ef68bf 100644 --- a/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp @@ -1031,15 +1031,29 @@ namespace AAXClasses AAX_Result NotificationReceived (AAX_CTypeID type, const void* data, uint32_t size) override { - if (type == AAX_eNotificationEvent_EnteringOfflineMode) pluginInstance->setNonRealtime (true); - if (type == AAX_eNotificationEvent_ExitingOfflineMode) pluginInstance->setNonRealtime (false); - - if (type == AAX_eNotificationEvent_TrackNameChanged && data != nullptr) + switch (type) { - AudioProcessor::TrackProperties props; - props.name = static_cast (data)->Get(); + case AAX_eNotificationEvent_EnteringOfflineMode: pluginInstance->setNonRealtime (true); break; + case AAX_eNotificationEvent_ExitingOfflineMode: pluginInstance->setNonRealtime (false); break; + + case AAX_eNotificationEvent_TrackNameChanged: + if (data != nullptr) + { + AudioProcessor::TrackProperties props; + props.name = static_cast (data)->Get(); + + pluginInstance->updateTrackProperties (props); + } + break; - pluginInstance->updateTrackProperties (props); + case AAX_eNotificationEvent_SideChainBeingConnected: + case AAX_eNotificationEvent_SideChainBeingDisconnected: + { + processingSidechainChange.set (1); + sidechainDesired.set (type == AAX_eNotificationEvent_SideChainBeingConnected ? 1 : 0); + updateSidechainState(); + break; + } } return AAX_CEffectParameters::NotificationReceived (type, data, size); @@ -1532,7 +1546,7 @@ namespace AAXClasses canDisableSidechain = audioProcessor.checkBusesLayoutSupported (disabledSidechainLayout); - if (canDisableSidechain) + if (canDisableSidechain && ! lastSideChainState) { sidechainDesired.set (0); newLayout = disabledSidechainLayout; @@ -1632,7 +1646,7 @@ namespace AAXClasses } //============================================================================== - void handleAsyncUpdate() override + void updateSidechainState() { if (processingSidechainChange.get() == 0) return; @@ -1642,6 +1656,8 @@ namespace AAXClasses if (hasSidechain && canDisableSidechain && (sidechainDesired.get() != 0) != sidechainActual) { + lastSideChainState = (sidechainDesired.get() != 0); + if (isPrepared) { isPrepared = false; @@ -1649,8 +1665,8 @@ namespace AAXClasses } if (auto* bus = audioProcessor.getBus (true, 1)) - bus->setCurrentLayout (sidechainDesired.get() != 0 ? AudioChannelSet::mono() - : AudioChannelSet::disabled()); + bus->setCurrentLayout (lastSideChainState ? AudioChannelSet::mono() + : AudioChannelSet::disabled()); audioProcessor.prepareToPlay (audioProcessor.getSampleRate(), audioProcessor.getBlockSize()); isPrepared = true; @@ -1659,6 +1675,11 @@ namespace AAXClasses processingSidechainChange.set (0); } + void handleAsyncUpdate() override + { + updateSidechainState(); + } + //============================================================================== inline int getParamIndexFromID (AAX_CParamID paramID) const noexcept { @@ -1715,7 +1736,7 @@ namespace AAXClasses int32_t juceChunkIndex = 0; AAX_CSampleRate sampleRate = 0; int lastBufferSize = 1024, maxBufferSize = 1024; - bool hasSidechain = false, canDisableSidechain = false; + bool hasSidechain = false, canDisableSidechain = false, lastSideChainState = false; Atomic processingSidechainChange, sidechainDesired;