30template <
typename SampleType>
33 auto oscFunction = [] (SampleType
x) {
return std::sin (
x); };
36 dryWet.setMixingRule (DryWetMixingRule::linear);
39template <
typename SampleType>
42 jassert (isPositiveAndBelow (
newRateHz,
static_cast<SampleType
> (100.0)));
48template <
typename SampleType>
51 jassert (isPositiveAndNotGreaterThan (
newDepth, maxDepth));
57template <
typename SampleType>
60 jassert (isPositiveAndBelow (
newDelayMs, maxCentreDelayMs));
62 centreDelay = jlimit (
static_cast<SampleType
> (1.0), maxCentreDelayMs,
newDelayMs);
65template <
typename SampleType>
74template <
typename SampleType>
77 jassert (isPositiveAndNotGreaterThan (
newMix,
static_cast<SampleType
> (1.0)));
84template <
typename SampleType>
87 jassert (
spec.sampleRate > 0);
88 jassert (
spec.numChannels > 0);
90 sampleRate =
spec.sampleRate;
92 const auto maxPossibleDelay = std::ceil ((maximumDelayModulation * maxDepth * oscVolumeMultiplier + maxCentreDelayMs)
93 * sampleRate / 1000.0);
97 dryWet.prepare (
spec);
98 feedbackVolume.resize (
spec.numChannels);
99 lastOutput.resize (
spec.numChannels);
102 bufferDelayTimes.setSize (1, (
int)
spec.maximumBlockSize,
false,
false,
true);
108template <
typename SampleType>
111 std::fill (lastOutput.begin(), lastOutput.end(),
static_cast<SampleType
> (0));
117 oscVolume.reset (sampleRate, 0.05);
119 for (
auto&
vol : feedbackVolume)
120 vol.reset (sampleRate, 0.05);
123template <
typename SampleType>
126 osc.setFrequency (rate);
127 oscVolume.setTargetValue (depth * oscVolumeMultiplier);
128 dryWet.setWetMixProportion (mix);
130 for (
auto&
vol : feedbackVolume)
131 vol.setTargetValue (feedback);
void setFeedback(SampleType newFeedback)
void setDepth(SampleType newDepth)
void prepare(const ProcessSpec &spec)
void setMix(SampleType newMix)
void setRate(SampleType newRateHz)
void setCentreDelay(SampleType newDelayMs)