Skip to content

Commit

Permalink
Parameters smoothing only done when it needs to be
Browse files Browse the repository at this point in the history
  • Loading branch information
seanlikeskites committed Jun 25, 2014
1 parent 002f242 commit 46e9610
Showing 1 changed file with 49 additions and 34 deletions.
83 changes: 49 additions & 34 deletions JuceModules/SAFE_juce_module/PluginUtils/SAFEAudioProcessor.cpp
Expand Up @@ -663,60 +663,75 @@ void SAFEAudioProcessor::processBlock (AudioSampleBuffer& buffer, MidiBuffer& /*
recordUnprocessedSamples (buffer);

// call the plugin dsp
int numChannels = buffer.getNumChannels();
int numSamples = buffer.getNumSamples();
bool parametersInterpolating = false;

if (numSamples < remainingControlBlockSamples)
for (int i = 0; i < parameters.size(); ++i)
{
AudioSampleBuffer controlBlock (buffer.getArrayOfWritePointers(), numChannels, numSamples);

pluginProcessing (controlBlock);

remainingControlBlockSamples -= numSamples;
parametersInterpolating |= parameters [i]->isInterpolating();
}
else

if (parametersInterpolating)
{
if (remainingControlBlockSamples)
int numChannels = buffer.getNumChannels();
int numSamples = buffer.getNumSamples();

if (numSamples < remainingControlBlockSamples)
{
AudioSampleBuffer controlBlock (buffer.getArrayOfWritePointers(), numChannels, remainingControlBlockSamples);
AudioSampleBuffer controlBlock (buffer.getArrayOfWritePointers(), numChannels, numSamples);

pluginProcessing (controlBlock);
}

int numControlBlocks = (int) ((numSamples - remainingControlBlockSamples) / controlBlockSize);
int sampleNumber = remainingControlBlockSamples;

for (int block = 0; block < numControlBlocks; ++block)
remainingControlBlockSamples -= numSamples;
}
else
{
for (int i = 0; i < parameters.size(); ++i)
if (remainingControlBlockSamples)
{
parameters [i]->smoothValues();
parameterUpdateCalculations (i);
AudioSampleBuffer controlBlock (buffer.getArrayOfWritePointers(), numChannels, remainingControlBlockSamples);

pluginProcessing (controlBlock);
}

int numControlBlocks = (int) ((numSamples - remainingControlBlockSamples) / controlBlockSize);
int sampleNumber = remainingControlBlockSamples;

AudioSampleBuffer controlBlock (buffer.getArrayOfWritePointers(), numChannels, sampleNumber, controlBlockSize);
for (int block = 0; block < numControlBlocks; ++block)
{
for (int i = 0; i < parameters.size(); ++i)
{
parameters [i]->smoothValues();
parameterUpdateCalculations (i);
}

pluginProcessing (controlBlock);
AudioSampleBuffer controlBlock (buffer.getArrayOfWritePointers(), numChannels, sampleNumber, controlBlockSize);

sampleNumber += controlBlockSize;
}
pluginProcessing (controlBlock);

int samplesLeft = numSamples - sampleNumber;
sampleNumber += controlBlockSize;
}

if (samplesLeft)
{
for (int i = 0; i < parameters.size(); ++i)
int samplesLeft = numSamples - sampleNumber;

if (samplesLeft)
{
parameters [i]->smoothValues();
parameterUpdateCalculations (i);
}
for (int i = 0; i < parameters.size(); ++i)
{
parameters [i]->smoothValues();
parameterUpdateCalculations (i);
}

AudioSampleBuffer controlBlock (buffer.getArrayOfWritePointers(), numChannels, sampleNumber, samplesLeft);
AudioSampleBuffer controlBlock (buffer.getArrayOfWritePointers(), numChannels, sampleNumber, samplesLeft);

pluginProcessing (controlBlock);
}
pluginProcessing (controlBlock);
}

remainingControlBlockSamples = controlBlockSize - samplesLeft;
remainingControlBlockSamples = controlBlockSize - samplesLeft;
}
}
else
{
pluginProcessing (buffer);
remainingControlBlockSamples = 0;
}

// In case we have more outputs than inputs, we'll clear any output
Expand Down

0 comments on commit 46e9610

Please sign in to comment.