From e4e78c8591301e5da1b006e2716627bc03741262 Mon Sep 17 00:00:00 2001 From: jules Date: Thu, 24 Dec 2015 12:06:07 +0000 Subject: [PATCH] Made the AAX wrapper support the isSuspended() flag --- .../AAX/juce_AAX_Wrapper.cpp | 49 ++++++++++++------- 1 file changed, 30 insertions(+), 19 deletions(-) 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 3aeddac900..409e186062 100644 --- a/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp @@ -860,33 +860,41 @@ struct AAXClasses const int numIns = pluginInstance->getTotalNumInputChannels(); const int numOuts = pluginInstance->getTotalNumOutputChannels(); - const int mainNumIns = numIns > 0 ? pluginInstance->busArrangement.inputBuses.getReference (0).channels.size() : 0; - const int sidechain = busUtils.getNumEnabledBuses (true) >= 2 ? sideChainBufferIdx : -1; - - if (numOuts >= numIns) + if (pluginInstance->isSuspended()) { - for (int i = 0; i < numIns; ++i) - memcpy (outputs[i], getAudioBufferForInput (inputs, sidechain, mainNumIns, i), (size_t) bufferSize * sizeof (float)); - - process (outputs, numOuts, bufferSize, bypass, midiNodeIn, midiNodesOut); + for (int i = 0; i < numOuts; ++i) + FloatVectorOperations::clear (outputs[i], bufferSize); } else { - if (channelList.size() <= numIns) - channelList.insertMultiple (-1, nullptr, 1 + numIns - channelList.size()); + const int mainNumIns = numIns > 0 ? pluginInstance->busArrangement.inputBuses.getReference (0).channels.size() : 0; + const int sidechain = busUtils.getNumEnabledBuses (true) >= 2 ? sideChainBufferIdx : -1; - float** channels = channelList.getRawDataPointer(); - - for (int i = 0; i < numOuts; ++i) + if (numOuts >= numIns) { - memcpy (outputs[i], getAudioBufferForInput (inputs, sidechain, mainNumIns, i), (size_t) bufferSize * sizeof (float)); - channels[i] = outputs[i]; + for (int i = 0; i < numIns; ++i) + memcpy (outputs[i], getAudioBufferForInput (inputs, sidechain, mainNumIns, i), (size_t) bufferSize * sizeof (float)); + + process (outputs, numOuts, bufferSize, bypass, midiNodeIn, midiNodesOut); } + else + { + if (channelList.size() <= numIns) + channelList.insertMultiple (-1, nullptr, 1 + numIns - channelList.size()); - for (int i = numOuts; i < numIns; ++i) - channels[i] = const_cast (getAudioBufferForInput (inputs, sidechain, mainNumIns, i)); + float** channels = channelList.getRawDataPointer(); - process (channels, numIns, bufferSize, bypass, midiNodeIn, midiNodesOut); + for (int i = 0; i < numOuts; ++i) + { + memcpy (outputs[i], getAudioBufferForInput (inputs, sidechain, mainNumIns, i), (size_t) bufferSize * sizeof (float)); + channels[i] = outputs[i]; + } + + for (int i = numOuts; i < numIns; ++i) + channels[i] = const_cast (getAudioBufferForInput (inputs, sidechain, mainNumIns, i)); + + process (channels, numIns, bufferSize, bypass, midiNodeIn, midiNodesOut); + } } } @@ -1160,7 +1168,10 @@ struct AAXClasses { const JUCEAlgorithmContext& i = **iter; - int sideChainBufferIdx = static_cast (i.pluginInstance->parameters.supportsSidechain() && i.sideChainBuffers != nullptr ? *i.sideChainBuffers : static_cast (-1)); + int sideChainBufferIdx = i.pluginInstance->parameters.supportsSidechain() && i.sideChainBuffers != nullptr + ? static_cast (*i.sideChainBuffers) + : -1; + i.pluginInstance->parameters.process (i.inputChannels, i.outputChannels, sideChainBufferIdx, *(i.bufferSize), *(i.bypass) != 0, getMidiNodeIn(i), getMidiNodeOut(i));