diff --git a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm index fe2d28d31e..3759d5d9c5 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm @@ -1346,10 +1346,10 @@ public: if (pulledSucceeded[busIdx]) audioBuffer.set (busIdx, GetInput ((UInt32) busIdx)->GetBufferList(), mapper.get (true, busIdx)); else - audioBuffer.clearInputBus (busIdx); + audioBuffer.clearInputBus (busIdx, (int) nFrames); } - audioBuffer.clearUnusedChannels(); + audioBuffer.clearUnusedChannels ((int) nFrames); } // swap midi buffers diff --git a/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm index 61af64a9db..7d13c3b4b5 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm @@ -1617,7 +1617,7 @@ private: for (int busIdx = 0; busIdx < numProcessorBusesIn; ++busIdx) audioBuffer.set (busIdx, *inBusBuffers[busIdx]->get(), mapper.get (true, busIdx)); - audioBuffer.clearUnusedChannels(); + audioBuffer.clearUnusedChannels ((int) frameCount); } // process audio diff --git a/modules/juce_audio_processors/format_types/juce_AU_Shared.h b/modules/juce_audio_processors/format_types/juce_AU_Shared.h index 4b12cb17ba..06e739d863 100644 --- a/modules/juce_audio_processors/format_types/juce_AU_Shared.h +++ b/modules/juce_audio_processors/format_types/juce_AU_Shared.h @@ -215,28 +215,30 @@ struct AudioUnitHelpers } } - void clearInputBus (int index) + void clearInputBus (int index, int bufferLength) { if (isPositiveAndBelow (index, inputBusOffsets.size() - 1)) - clearChannels (inputBusOffsets[(size_t) index], inputBusOffsets[(size_t) (index + 1)]); + clearChannels ({ inputBusOffsets[(size_t) index], inputBusOffsets[(size_t) (index + 1)] }, bufferLength); } - void clearUnusedChannels() + void clearUnusedChannels (int bufferLength) { jassert (! inputBusOffsets .empty()); jassert (! outputBusOffsets.empty()); - clearChannels (inputBusOffsets.back(), outputBusOffsets.back()); + clearChannels ({ inputBusOffsets.back(), outputBusOffsets.back() }, bufferLength); } private: - void clearChannels (int begin, int end) + void clearChannels (Range range, int bufferLength) { - if (begin <= end && end <= (int) channels.size()) + jassert (bufferLength <= scratch.getNumSamples()); + + if (range.getEnd() <= (int) channels.size()) { - std::for_each (channels.begin() + begin, - channels.begin() + end, - [this] (float* ptr) { zeromem (ptr, sizeof (float) * (size_t) scratch.getNumSamples()); }); + std::for_each (channels.begin() + range.getStart(), + channels.begin() + range.getEnd(), + [bufferLength] (float* ptr) { zeromem (ptr, sizeof (float) * (size_t) bufferLength); }); } }