Skip to content

Commit 4f87d2d

Browse files
Updating output buffers
1 parent 2a87bd3 commit 4f87d2d

28 files changed

+107
-102
lines changed

modules/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ target_compile_definitions(juce_plugin_modules
7474
JucePlugin_VersionString="${CMAKE_PROJECT_VERSION}"
7575
JucePlugin_Name="${CMAKE_PROJECT_NAME}"
7676
JUCE_MODAL_LOOPS_PERMITTED=1
77-
CHOWDSP_BUFFER_MAX_NUM_CHANNELS=2
77+
CHOWDSP_BUFFER_MAX_NUM_CHANNELS=16
7878
INTERFACE
7979
$<TARGET_PROPERTY:juce_plugin_modules,COMPILE_DEFINITIONS>
8080
)

src/processors/BaseProcessor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ BaseProcessor::BaseProcessor (const String& name,
3333
onOffParam = vts.getRawParameterValue ("on_off");
3434

3535
outputBuffers.resize (jmax (1, numOutputs));
36-
outputBuffers.fill (nullptr);
36+
outputBuffers.fill ({});
3737
outputConnections.resize ((size_t) numOutputs);
3838

3939
inputBuffers.resize (numInputs);

src/processors/BaseProcessor.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ class BaseProcessor : private JuceProcWrapper
176176
chowdsp::BufferView<float>& getInputBufferView (int idx = 0) { return inputBuffers.getReference (idx); }
177177
AudioBuffer<float> getInputBuffer (int idx = 0) const { return inputBuffers.getReference (idx).toAudioBuffer(); }
178178
AudioBuffer<float> getInputBufferNonConst (int idx = 0) { return inputBuffers.getReference (idx).toAudioBuffer(); } // Most derived classes should never use this!
179-
AudioBuffer<float>* getOutputBuffer (int idx = 0) { return outputBuffers[idx]; }
179+
chowdsp::BufferView<float> getOutputBuffer (int idx = 0) { return outputBuffers[idx]; }
180180
const ConnectionInfo& getOutputConnection (int portIdx, int connectionIdx) const { return outputConnections[(size_t) portIdx].getReference (connectionIdx); }
181181

182182
int getNumOutputConnections (int portIdx) const { return outputConnections[(size_t) portIdx].size(); }
@@ -256,7 +256,7 @@ class BaseProcessor : private JuceProcWrapper
256256
AudioProcessorValueTreeState vts;
257257
ProcessorUIOptions uiOptions;
258258

259-
Array<AudioBuffer<float>*> outputBuffers;
259+
Array<chowdsp::BufferView<float>> outputBuffers;
260260
Array<int> inputsConnected;
261261

262262
chowdsp::SharedLNFAllocator lnfAllocator;

src/processors/chain/ProcessorChain.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,15 +168,16 @@ void ProcessorChain::runProcessor (BaseProcessor* proc, AudioBuffer<float>& buff
168168

169169
for (int i = 0; i < numOutputs; ++i)
170170
{
171-
auto* outBuffer = proc->getOutputBuffer (i);
172-
if (outBuffer == nullptr)
173-
outBuffer = &buffer;
171+
auto outBufferView = proc->getOutputBuffer (i);
172+
if (outBufferView.getNumSamples() == 0)
173+
outBufferView = buffer;
174+
auto outBuffer = outBufferView.toAudioBuffer();
174175

175176
const int numOutProcs = proc->getNumOutputConnections (i);
176177
for (int j = numOutProcs - 1; j >= 0; --j)
177178
{
178179
const auto& connectionInfo = proc->getOutputConnection (i, j);
179-
processBuffer (connectionInfo.endProc, connectionInfo.endPort, *outBuffer);
180+
processBuffer (connectionInfo.endProc, connectionInfo.endPort, outBuffer);
180181

181182
nextNumProcs -= 1;
182183
}
@@ -244,10 +245,14 @@ void ProcessorChain::processAudio (AudioBuffer<float>& buffer, const MidiBuffer&
244245
else
245246
{
246247
// do output processing (downsampling, output gain)
247-
if (auto* outBuffer = outputProcessor.getOutputBuffer())
248-
ioProcessor.processAudioOutput (*outBuffer, buffer);
248+
if (auto outBuffer = outputProcessor.getOutputBuffer(); outBuffer.getNumSamples() > 0)
249+
{
250+
ioProcessor.processAudioOutput (outBuffer.toAudioBuffer(), buffer);
251+
}
249252
else
253+
{
250254
jassertfalse; // output buffer is null after output was processed?
255+
}
251256
}
252257

253258
arena.clear();

src/processors/modulation/Chorus.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -285,8 +285,8 @@ void Chorus::processAudio (AudioBuffer<float>& buffer)
285285
audioOutBuffer.clear();
286286
}
287287

288-
outputBuffers.getReference (AudioOutput) = &audioOutBuffer;
289-
outputBuffers.getReference (ModulationOutput) = &modOutBuffer;
288+
outputBuffers.getReference (AudioOutput) = audioOutBuffer;
289+
outputBuffers.getReference (ModulationOutput) = modOutBuffer;
290290

291291
bypassNeedsReset = true;
292292
}
@@ -333,6 +333,6 @@ void Chorus::processAudioBypassed (AudioBuffer<float>& buffer)
333333
audioOutBuffer.clear();
334334
}
335335

336-
outputBuffers.getReference (AudioOutput) = &audioOutBuffer;
337-
outputBuffers.getReference (ModulationOutput) = &modOutBuffer;
336+
outputBuffers.getReference (AudioOutput) = audioOutBuffer;
337+
outputBuffers.getReference (ModulationOutput) = modOutBuffer;
338338
}

src/processors/modulation/Flanger.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -258,8 +258,8 @@ void Flanger::processAudio (AudioBuffer<float>& buffer)
258258
audioOutBuffer.clear();
259259
}
260260

261-
outputBuffers.getReference (AudioOutput) = &audioOutBuffer;
262-
outputBuffers.getReference (ModulationOutput) = &modOutBuffer;
261+
outputBuffers.getReference (AudioOutput) = audioOutBuffer;
262+
outputBuffers.getReference (ModulationOutput) = modOutBuffer;
263263

264264
bypassNeedsReset = true;
265265
}
@@ -306,6 +306,6 @@ void Flanger::processAudioBypassed (AudioBuffer<float>& buffer)
306306
audioOutBuffer.clear();
307307
}
308308

309-
outputBuffers.getReference (AudioOutput) = &audioOutBuffer;
310-
outputBuffers.getReference (ModulationOutput) = &modOutBuffer;
309+
outputBuffers.getReference (AudioOutput) = audioOutBuffer;
310+
outputBuffers.getReference (ModulationOutput) = modOutBuffer;
311311
}

src/processors/modulation/FrequencyShifter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ void FrequencyShifter::processAudio (AudioBuffer<float>& buffer)
144144
juce::FloatVectorOperations::addWithMultiply (wetData.data(), dryData.data(), dryGain.getSmoothedBuffer(), numSamples);
145145
}
146146

147-
outputBuffers.getReference (0) = &outputBuffer;
147+
outputBuffers.getReference (0) = outputBuffer;
148148
}
149149

150150
void FrequencyShifter::processAudioBypassed (AudioBuffer<float>& buffer)
@@ -171,7 +171,7 @@ void FrequencyShifter::processAudioBypassed (AudioBuffer<float>& buffer)
171171
wetGain.process (numSamples);
172172
chowdsp::BufferMath::copyBufferData (buffer, outputBuffer);
173173

174-
outputBuffers.getReference (0) = &outputBuffer;
174+
outputBuffers.getReference (0) = outputBuffer;
175175
}
176176

177177
static auto processFreqShifterModulator (chowdsp::SineWave<float>& modulator,

src/processors/modulation/MIDIModulator.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ void MidiModulator::processAudio (AudioBuffer<float>& buffer)
8484
modOutBuffer.setSize (1, numSamples, false, false, true);
8585
modOutBuffer.copyFrom (0, 0, midiModSmooth.getSmoothedBuffer(), numSamples, 1.0f);
8686

87-
outputBuffers.getReference (0) = &modOutBuffer;
87+
outputBuffers.getReference (0) = modOutBuffer;
8888
}
8989

9090
void MidiModulator::processAudioBypassed (AudioBuffer<float>& buffer)
@@ -94,7 +94,7 @@ void MidiModulator::processAudioBypassed (AudioBuffer<float>& buffer)
9494
modOutBuffer.setSize (1, numSamples, false, false, true);
9595
modOutBuffer.clear();
9696

97-
outputBuffers.getReference (0) = &modOutBuffer;
97+
outputBuffers.getReference (0) = modOutBuffer;
9898
}
9999

100100
//===================================================================

src/processors/modulation/Panner.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,8 @@ void Panner::processAudio (AudioBuffer<float>& buffer)
159159
processStereoInput (inputBuffer);
160160
}
161161

162-
outputBuffers.getReference (AudioOutput) = &stereoBuffer;
163-
outputBuffers.getReference (ModulationOutput) = &modulationBuffer;
162+
outputBuffers.getReference (AudioOutput) = stereoBuffer;
163+
outputBuffers.getReference (ModulationOutput) = modulationBuffer;
164164
}
165165

166166
void Panner::processSingleChannelPan (chowdsp::Panner<float>& panner, const AudioBuffer<float>& inBuffer, AudioBuffer<float>& outBuffer, float basePanValue, int inBufferChannel, float modMultiply)
@@ -248,8 +248,8 @@ void Panner::processAudioBypassed (AudioBuffer<float>& buffer)
248248
stereoBuffer.clear();
249249
}
250250

251-
outputBuffers.getReference (AudioOutput) = &stereoBuffer;
252-
outputBuffers.getReference (ModulationOutput) = &modulationBuffer;
251+
outputBuffers.getReference (AudioOutput) = stereoBuffer;
252+
outputBuffers.getReference (ModulationOutput) = modulationBuffer;
253253
}
254254

255255
bool Panner::getCustomComponents (OwnedArray<Component>& customComps, chowdsp::HostContextProvider& hcp)

src/processors/modulation/ParamModulator.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ void ParamModulator::processAudio (AudioBuffer<float>& buffer)
6262
modOutBuffer.setSize (1, numSamples, false, false, true);
6363
modOutBuffer.copyFrom (0, 0, modSmooth.getSmoothedBuffer(), numSamples, 1.0f);
6464

65-
outputBuffers.getReference (0) = &modOutBuffer;
65+
outputBuffers.getReference (0) = modOutBuffer;
6666
}
6767

6868
void ParamModulator::processAudioBypassed (AudioBuffer<float>& buffer)
@@ -72,7 +72,7 @@ void ParamModulator::processAudioBypassed (AudioBuffer<float>& buffer)
7272
modOutBuffer.setSize (1, numSamples, false, false, true);
7373
modOutBuffer.clear();
7474

75-
outputBuffers.getReference (0) = &modOutBuffer;
75+
outputBuffers.getReference (0) = modOutBuffer;
7676
}
7777

7878
bool ParamModulator::getCustomComponents (OwnedArray<Component>& customComps, chowdsp::HostContextProvider& hcp)

0 commit comments

Comments
 (0)