46template <
typename SampleType>
58 void setRate (SampleType newRateHz);
77 void setMix (SampleType newMix);
88 template <
typename ProcessContext>
89 void process (
const ProcessContext& context)
noexcept
91 const auto& inputBlock = context.getInputBlock();
92 auto& outputBlock = context.getOutputBlock();
93 const auto numChannels = outputBlock.getNumChannels();
94 const auto numSamples = outputBlock.getNumSamples();
96 jassert (inputBlock.getNumChannels() == numChannels);
98 jassert (inputBlock.getNumSamples() == numSamples);
100 if (context.isBypassed)
102 outputBlock.copyFrom (inputBlock);
108 delayValuesBlock.clear();
110 osc.process (contextDelay);
115 for (
size_t i = 0;
i < numSamples; ++
i)
118 delaySamples[
i] =
static_cast<SampleType
> (lfo *
sampleRate / 1000.0);
121 dryWet.pushDrySamples (inputBlock);
123 for (
size_t channel = 0; channel < numChannels; ++channel)
125 auto* inputSamples = inputBlock .getChannelPointer (channel);
126 auto* outputSamples = outputBlock.getChannelPointer (channel);
128 for (
size_t i = 0;
i < numSamples; ++
i)
130 auto input = inputSamples[
i];
133 delay.pushSample ((
int) channel, output);
134 delay.setDelay (delaySamples[
i]);
135 output =
delay.popSample ((
int) channel);
137 outputSamples[
i] = output;
142 dryWet.mixWetSamples (outputBlock);
153 std::vector<SmoothedValue<SampleType, ValueSmoothingTypes::Linear>>
feedbackVolume { 2 };
Type jmax(const Type a, const Type b)
Definition MathsFunctions.h:48
Definition juce_AudioSampleBuffer.h:34
Definition juce_SmoothedValue.h:227
Definition juce_AudioBlock.h:70
AudioBlock getSubBlock(size_t newOffset, size_t newLength) const noexcept
Definition juce_AudioBlock.h:371
std::vector< SmoothedValue< SampleType, ValueSmoothingTypes::Linear > > feedbackVolume
Definition juce_Chorus.h:153
Chorus()
Definition juce_Chorus.cpp:33
void setCentreDelay(SampleType newDelayMs)
Definition juce_Chorus.cpp:60
void prepare(const ProcessSpec &spec)
Definition juce_Chorus.cpp:87
void setMix(SampleType newMix)
Definition juce_Chorus.cpp:77
Oscillator< SampleType > osc
Definition juce_Chorus.h:150
SampleType depth
Definition juce_Chorus.h:159
AudioBuffer< SampleType > bufferDelayTimes
Definition juce_Chorus.h:156
static constexpr SampleType maxCentreDelayMs
Definition juce_Chorus.h:163
double sampleRate
Definition juce_Chorus.h:158
SampleType feedback
Definition juce_Chorus.h:159
void process(const ProcessContext &context) noexcept
Definition juce_Chorus.h:89
static constexpr SampleType oscVolumeMultiplier
Definition juce_Chorus.h:164
SampleType rate
Definition juce_Chorus.h:159
DryWetMixer< SampleType > dryWet
Definition juce_Chorus.h:154
SampleType centreDelay
Definition juce_Chorus.h:160
DelayLine< SampleType, DelayLineInterpolationTypes::Linear > delay
Definition juce_Chorus.h:151
void reset()
Definition juce_Chorus.cpp:111
std::vector< SampleType > lastOutput
Definition juce_Chorus.h:155
SampleType mix
Definition juce_Chorus.h:159
void setDepth(SampleType newDepth)
Definition juce_Chorus.cpp:51
static constexpr SampleType maxDepth
Definition juce_Chorus.h:162
static constexpr SampleType maximumDelayModulation
Definition juce_Chorus.h:165
void setFeedback(SampleType newFeedback)
Definition juce_Chorus.cpp:68
void setRate(SampleType newRateHz)
Definition juce_Chorus.cpp:42
SmoothedValue< SampleType, ValueSmoothingTypes::Linear > oscVolume
Definition juce_Chorus.h:152
Definition juce_DelayLine.h:95
Definition juce_DryWetMixer.h:54
Definition juce_Oscillator.h:38
register unsigned i
Definition inflate.c:1575
Definition juce_AudioBlock.h:29
Definition carla_juce.cpp:31
Definition juce_ProcessContext.h:88
Definition juce_ProcessContext.h:38