Browse Source

AAX: Fixed a bug when changing the sidechain source could take a full buffer until reflected in the audio processing

tags/2021-05-28
hogliux 8 years ago
parent
commit
03195b094e
1 changed files with 33 additions and 12 deletions
  1. +33
    -12
      modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp

+ 33
- 12
modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp View File

@@ -1031,15 +1031,29 @@ namespace AAXClasses
AAX_Result NotificationReceived (AAX_CTypeID type, const void* data, uint32_t size) override 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<const AAX_IString*> (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<const AAX_IString*> (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); return AAX_CEffectParameters::NotificationReceived (type, data, size);
@@ -1532,7 +1546,7 @@ namespace AAXClasses
canDisableSidechain = audioProcessor.checkBusesLayoutSupported (disabledSidechainLayout); canDisableSidechain = audioProcessor.checkBusesLayoutSupported (disabledSidechainLayout);
if (canDisableSidechain)
if (canDisableSidechain && ! lastSideChainState)
{ {
sidechainDesired.set (0); sidechainDesired.set (0);
newLayout = disabledSidechainLayout; newLayout = disabledSidechainLayout;
@@ -1632,7 +1646,7 @@ namespace AAXClasses
} }
//============================================================================== //==============================================================================
void handleAsyncUpdate() override
void updateSidechainState()
{ {
if (processingSidechainChange.get() == 0) if (processingSidechainChange.get() == 0)
return; return;
@@ -1642,6 +1656,8 @@ namespace AAXClasses
if (hasSidechain && canDisableSidechain && (sidechainDesired.get() != 0) != sidechainActual) if (hasSidechain && canDisableSidechain && (sidechainDesired.get() != 0) != sidechainActual)
{ {
lastSideChainState = (sidechainDesired.get() != 0);
if (isPrepared) if (isPrepared)
{ {
isPrepared = false; isPrepared = false;
@@ -1649,8 +1665,8 @@ namespace AAXClasses
} }
if (auto* bus = audioProcessor.getBus (true, 1)) 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()); audioProcessor.prepareToPlay (audioProcessor.getSampleRate(), audioProcessor.getBlockSize());
isPrepared = true; isPrepared = true;
@@ -1659,6 +1675,11 @@ namespace AAXClasses
processingSidechainChange.set (0); processingSidechainChange.set (0);
} }
void handleAsyncUpdate() override
{
updateSidechainState();
}
//============================================================================== //==============================================================================
inline int getParamIndexFromID (AAX_CParamID paramID) const noexcept inline int getParamIndexFromID (AAX_CParamID paramID) const noexcept
{ {
@@ -1715,7 +1736,7 @@ namespace AAXClasses
int32_t juceChunkIndex = 0; int32_t juceChunkIndex = 0;
AAX_CSampleRate sampleRate = 0; AAX_CSampleRate sampleRate = 0;
int lastBufferSize = 1024, maxBufferSize = 1024; int lastBufferSize = 1024, maxBufferSize = 1024;
bool hasSidechain = false, canDisableSidechain = false;
bool hasSidechain = false, canDisableSidechain = false, lastSideChainState = false;
Atomic<int> processingSidechainChange, sidechainDesired; Atomic<int> processingSidechainChange, sidechainDesired;


Loading…
Cancel
Save