1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Fix for AudioProcessorPlayer when its source is null.

This commit is contained in:
jules 2014-01-01 16:36:41 +00:00
parent ca42bdaeb4
commit d505edc012
2 changed files with 18 additions and 24 deletions

View file

@ -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)

View file

@ -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 */