87 void process (
const ProcessContext& context)
noexcept
89 const auto& inputBlock = context.getInputBlock();
90 auto& outputBlock = context.getOutputBlock();
91 const auto numChannels = outputBlock.getNumChannels();
92 const auto numSamples = outputBlock.getNumSamples();
94 jassert (inputBlock.getNumChannels() == numChannels);
95 jassert (inputBlock.getNumChannels() == lastOutput.size());
96 jassert (inputBlock.getNumSamples() == numSamples);
98 if (context.isBypassed)
100 outputBlock.copyFrom (inputBlock);
106 delayValuesBlock.clear();
108 osc.process (contextDelay);
109 delayValuesBlock.multiplyBy (oscVolume);
113 for (
size_t i = 0; i < numSamples; ++i)
115 auto lfo = jmax (
static_cast<SampleType
> (1.0), maximumDelayModulation * delaySamples[i] + centreDelay);
116 delaySamples[i] =
static_cast<SampleType
> (lfo * sampleRate / 1000.0);
119 dryWet.pushDrySamples (inputBlock);
121 for (
size_t channel = 0; channel < numChannels; ++channel)
123 auto* inputSamples = inputBlock .getChannelPointer (channel);
124 auto* outputSamples = outputBlock.getChannelPointer (channel);
126 for (
size_t i = 0; i < numSamples; ++i)
128 auto input = inputSamples[i];
129 auto output = input - lastOutput[channel];
131 delay.pushSample ((
int) channel, output);
132 delay.setDelay (delaySamples[i]);
133 output = delay.popSample ((
int) channel);
135 outputSamples[i] = output;
136 lastOutput[channel] = output * feedbackVolume[channel].getNextValue();
140 dryWet.mixWetSamples (outputBlock);
157 SampleType rate = 1.0, depth = 0.25, feedback = 0.0, mix = 0.5,