From d505edc012fdc8586f3027630b50599966916dff Mon Sep 17 00:00:00 2001 From: jules Date: Wed, 1 Jan 2014 16:36:41 +0000 Subject: [PATCH] Fix for AudioProcessorPlayer when its source is null. --- .../players/juce_AudioProcessorPlayer.cpp | 27 +++++++++---------- .../players/juce_AudioProcessorPlayer.h | 15 ++++------- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp b/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp index b3cc31d1ec..18e14104d8 100644 --- a/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp +++ b/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp @@ -45,9 +45,7 @@ void AudioProcessorPlayer::setProcessor (AudioProcessor* const processorToPlay) { if (processorToPlay != nullptr && sampleRate > 0 && blockSize > 0) { - processorToPlay->setPlayConfigDetails (numInputChans, numOutputChans, - sampleRate, blockSize); - + processorToPlay->setPlayConfigDetails (numInputChans, numOutputChans, sampleRate, blockSize); processorToPlay->prepareToPlay (sampleRate, blockSize); } @@ -120,22 +118,23 @@ void AudioProcessorPlayer::audioDeviceIOCallback (const float** const inputChann AudioSampleBuffer buffer (channels, totalNumChans, numSamples); - const ScopedLock sl (lock); - - if (processor != nullptr) { - const ScopedLock sl2 (processor->getCallbackLock()); + const ScopedLock sl (lock); - if (processor->isSuspended()) + if (processor != nullptr) { - for (int i = 0; i < numOutputChannels; ++i) - zeromem (outputChannelData[i], sizeof (float) * (size_t) numSamples); - } - else - { - processor->processBlock (buffer, incomingMidi); + const ScopedLock sl2 (processor->getCallbackLock()); + + if (! processor->isSuspended()) + { + processor->processBlock (buffer, incomingMidi); + return; + } } } + + for (int i = 0; i < numOutputChannels; ++i) + FloatVectorOperations::clear (outputChannelData[i], numSamples); } void AudioProcessorPlayer::audioDeviceAboutToStart (AudioIODevice* const device) diff --git a/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h b/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h index df0600a828..418ceffb71 100644 --- a/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h +++ b/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h @@ -52,27 +52,22 @@ public: /** Sets the processor that should be played. The processor that is passed in will not be deleted or owned by this object. - To stop anything playing, pass in 0 to this method. + To stop anything playing, pass a nullptr to this method. */ void setProcessor (AudioProcessor* processorToPlay); - /** Returns the current audio processor that is being played. - */ - AudioProcessor* getCurrentProcessor() const { return processor; } + /** Returns the current audio processor that is being played. */ + AudioProcessor* getCurrentProcessor() const noexcept { return processor; } /** Returns a midi message collector that you can pass midi messages to if you want them to be injected into the midi stream that is being sent to the processor. */ - MidiMessageCollector& getMidiMessageCollector() { return messageCollector; } + MidiMessageCollector& getMidiMessageCollector() noexcept { return messageCollector; } //============================================================================== /** @internal */ - void audioDeviceIOCallback (const float** inputChannelData, - int totalNumInputChannels, - float** outputChannelData, - int totalNumOutputChannels, - int numSamples) override; + void audioDeviceIOCallback (const float**, int, float**, int, int) override; /** @internal */ void audioDeviceAboutToStart (AudioIODevice*) override; /** @internal */