Browse Source

tags/2021-05-28
jules 17 years ago
parent
commit
35063f7b78
3 changed files with 29 additions and 54 deletions
  1. +7
    -7
      src/juce_appframework/audio/processors/juce_AudioProcessorGraph.cpp
  2. +22
    -45
      src/juce_appframework/audio/processors/juce_AudioProcessorPlayer.cpp
  3. +0
    -2
      src/juce_appframework/audio/processors/juce_AudioProcessorPlayer.h

+ 7
- 7
src/juce_appframework/audio/processors/juce_AudioProcessorGraph.cpp View File

@@ -954,7 +954,7 @@ private:
} }
else else
{ {
jassert (bufferNum > 0 && bufferNum < nodeIds.size());
jassert (bufferNum >= 0 && bufferNum < nodeIds.size());
nodeIds.set (bufferNum, nodeId); nodeIds.set (bufferNum, nodeId);
channels.set (bufferNum, outputIndex); channels.set (bufferNum, outputIndex);
@@ -1039,7 +1039,7 @@ void AudioProcessorGraph::buildRenderingSequence()
VoidArray oldRenderingOps (renderingOps); VoidArray oldRenderingOps (renderingOps);
{ {
// swap over to the new set of rendering sequence..
// swap over to the new rendering sequence..
const ScopedLock sl (renderLock); const ScopedLock sl (renderLock);
renderingBuffers.setSize (numRenderingBuffersNeeded, getBlockSize()); renderingBuffers.setSize (numRenderingBuffersNeeded, getBlockSize());
@@ -1067,7 +1067,7 @@ void AudioProcessorGraph::handleAsyncUpdate()
void AudioProcessorGraph::prepareToPlay (double /*sampleRate*/, int estimatedSamplesPerBlock) void AudioProcessorGraph::prepareToPlay (double /*sampleRate*/, int estimatedSamplesPerBlock)
{ {
currentAudioInputBuffer = 0; currentAudioInputBuffer = 0;
currentAudioOutputBuffer.setSize (getNumOutputChannels(), estimatedSamplesPerBlock);
currentAudioOutputBuffer.setSize (jmax (1, getNumOutputChannels()), estimatedSamplesPerBlock);
currentMidiInputBuffer = 0; currentMidiInputBuffer = 0;
currentMidiOutputBuffer.clear(); currentMidiOutputBuffer.clear();
@@ -1096,7 +1096,7 @@ void AudioProcessorGraph::processBlock (AudioSampleBuffer& buffer, MidiBuffer& m
const ScopedLock sl (renderLock); const ScopedLock sl (renderLock);
currentAudioInputBuffer = &buffer; currentAudioInputBuffer = &buffer;
currentAudioOutputBuffer.setSize (buffer.getNumChannels(), numSamples);
currentAudioOutputBuffer.setSize (jmax (1, buffer.getNumChannels()), numSamples);
currentAudioOutputBuffer.clear(); currentAudioOutputBuffer.clear();
currentMidiInputBuffer = &midiMessages; currentMidiInputBuffer = &midiMessages;
currentMidiOutputBuffer.clear(); currentMidiOutputBuffer.clear();
@@ -1234,7 +1234,7 @@ void AudioProcessorGraph::AudioGraphIOProcessor::processBlock (AudioSampleBuffer
for (int i = jmin (graph->currentAudioInputBuffer->getNumChannels(), for (int i = jmin (graph->currentAudioInputBuffer->getNumChannels(),
buffer.getNumChannels()); --i >= 0;) buffer.getNumChannels()); --i >= 0;)
{ {
buffer.addFrom (i, 0, *graph->currentAudioInputBuffer, i, 0, buffer.getNumSamples());
buffer.copyFrom (i, 0, *graph->currentAudioInputBuffer, i, 0, buffer.getNumSamples());
} }
break; break;
@@ -1346,8 +1346,8 @@ void AudioProcessorGraph::AudioGraphIOProcessor::setParentGraph (AudioProcessorG
if (graph != 0) if (graph != 0)
{ {
setPlayConfigDetails (type == audioOutputNode ? graph->getNumInputChannels() : 0,
type == audioInputNode ? graph->getNumOutputChannels() : 0,
setPlayConfigDetails (type == audioOutputNode ? graph->getNumOutputChannels() : 0,
type == audioInputNode ? graph->getNumInputChannels() : 0,
getSampleRate(), getSampleRate(),
getBlockSize()); getBlockSize());


+ 22
- 45
src/juce_appframework/audio/processors/juce_AudioProcessorPlayer.cpp View File

@@ -80,9 +80,9 @@ void AudioProcessorPlayer::setProcessor (AudioProcessor* const processorToPlay)
//============================================================================== //==============================================================================
void AudioProcessorPlayer::audioDeviceIOCallback (const float** inputChannelData, void AudioProcessorPlayer::audioDeviceIOCallback (const float** inputChannelData,
int totalNumInputChannels,
int numInputChannels,
float** outputChannelData, float** outputChannelData,
int totalNumOutputChannels,
int numOutputChannels,
int numSamples) int numSamples)
{ {
// these should have been prepared by audioDeviceAboutToStart()... // these should have been prepared by audioDeviceAboutToStart()...
@@ -90,71 +90,48 @@ void AudioProcessorPlayer::audioDeviceIOCallback (const float** inputChannelData
incomingMidi.clear(); incomingMidi.clear();
messageCollector.removeNextBlockOfMessages (incomingMidi, numSamples); messageCollector.removeNextBlockOfMessages (incomingMidi, numSamples);
int i, totalNumChans = 0;
int i, numActiveChans = 0, numInputs = 0, numOutputs = 0;
// messy stuff needed to compact the channels down into an array
// of non-zero pointers..
for (i = 0; i < totalNumInputChannels; ++i)
{
if (inputChannelData[i] != 0)
{
inputChans [numInputs++] = inputChannelData[i];
if (numInputs >= numElementsInArray (inputChans))
break;
}
}
for (i = 0; i < totalNumOutputChannels; ++i)
{
if (outputChannelData[i] != 0)
{
outputChans [numOutputs++] = outputChannelData[i];
if (numOutputs >= numElementsInArray (outputChans))
break;
}
}
if (numInputs > numOutputs)
if (numInputChannels > numOutputChannels)
{ {
// if there aren't enough output channels for the number of // if there aren't enough output channels for the number of
// inputs, we need to create some temporary extra ones (can't // inputs, we need to create some temporary extra ones (can't
// use the input data in case it gets written to) // use the input data in case it gets written to)
tempBuffer.setSize (numInputs - numOutputs, numSamples,
tempBuffer.setSize (numInputChannels - numOutputChannels, numSamples,
false, false, true); false, false, true);
for (i = 0; i < numOutputs; ++i)
for (i = 0; i < numOutputChannels; ++i)
{ {
channels[numActiveChans] = outputChans[i];
memcpy (channels[numActiveChans], inputChans[i], sizeof (float) * numSamples);
++numActiveChans;
channels[totalNumChans] = outputChannelData[i];
memcpy (channels[totalNumChans], inputChannelData[i], sizeof (float) * numSamples);
++totalNumChans;
} }
for (i = numOutputs; i < numInputs; ++i)
for (i = numOutputChannels; i < numInputChannels; ++i)
{ {
channels[numActiveChans] = tempBuffer.getSampleData (i - numOutputs, 0);
memcpy (channels[numActiveChans], inputChans[i], sizeof (float) * numSamples);
++numActiveChans;
channels[totalNumChans] = tempBuffer.getSampleData (i - numOutputChannels, 0);
memcpy (channels[totalNumChans], inputChannelData[i], sizeof (float) * numSamples);
++totalNumChans;
} }
} }
else else
{ {
for (i = 0; i < numInputs; ++i)
for (i = 0; i < numInputChannels; ++i)
{ {
channels[numActiveChans] = outputChans[i];
memcpy (channels[numActiveChans], inputChans[i], sizeof (float) * numSamples);
++numActiveChans;
channels[totalNumChans] = outputChannelData[i];
memcpy (channels[totalNumChans], inputChannelData[i], sizeof (float) * numSamples);
++totalNumChans;
} }
for (i = numInputs; i < numOutputs; ++i)
for (i = numInputChannels; i < numOutputChannels; ++i)
{ {
channels[numActiveChans] = outputChans[i];
zeromem (channels[numActiveChans], sizeof (float) * numSamples);
++numActiveChans;
channels[totalNumChans] = outputChannelData[i];
zeromem (channels[totalNumChans], sizeof (float) * numSamples);
++totalNumChans;
} }
} }
AudioSampleBuffer buffer (channels, numActiveChans, numSamples);
AudioSampleBuffer buffer (channels, totalNumChans, numSamples);
const ScopedLock sl (lock); const ScopedLock sl (lock);


+ 0
- 2
src/juce_appframework/audio/processors/juce_AudioProcessorPlayer.h View File

@@ -106,8 +106,6 @@ private:
int numInputChans, numOutputChans; int numInputChans, numOutputChans;
float* channels [128]; float* channels [128];
float* outputChans [128];
const float* inputChans [128];
AudioSampleBuffer tempBuffer; AudioSampleBuffer tempBuffer;
MidiBuffer incomingMidi; MidiBuffer incomingMidi;


Loading…
Cancel
Save