From 5b3aa7fc2ddeed50898f5c6b87db5fabf9031bcc Mon Sep 17 00:00:00 2001 From: reuk Date: Thu, 3 Mar 2022 17:18:45 +0000 Subject: [PATCH] AU Client: Ensure processBlock receives AudioBuffer of correct size fc378aaf9ac9d9168172114e4fad39cf1d485fcc introduced a regression where plugins with no audio channels (such as MIDI FX plugins) would receive an audio buffer with a length-in-samples of '0', rather than the actual block length. --- .../juce_audio_processors/format_types/juce_AU_Shared.h | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) 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 06e739d863..4d19ce32b7 100644 --- a/modules/juce_audio_processors/format_types/juce_AU_Shared.h +++ b/modules/juce_audio_processors/format_types/juce_AU_Shared.h @@ -157,13 +157,10 @@ struct AudioUnitHelpers AudioBuffer& getBuffer (UInt32 frames) noexcept { - #if JUCE_DEBUG - for (int i = 0; i < (int) channels.size(); ++i) - jassert (channels[(size_t) i] != nullptr); - #endif + jassert (std::none_of (channels.begin(), channels.end(), [] (auto* x) { return x == nullptr; })); - if (! channels.empty()) - mutableBuffer.setDataToReferTo (channels.data(), (int) channels.size(), static_cast (frames)); + const auto channelPtr = channels.empty() ? scratch.getArrayOfWritePointers() : channels.data(); + mutableBuffer.setDataToReferTo (channelPtr, (int) channels.size(), static_cast (frames)); return mutableBuffer; }