30template <
typename SampleType>
37template <
typename SampleType>
43template <
typename SampleType>
53template <
typename SampleType>
56 jassert (
spec.sampleRate > 0);
57 jassert (
spec.numChannels > 0);
59 sampleRate =
spec.sampleRate;
62 s1.resize (
spec.numChannels);
63 s2.resize (
spec.numChannels);
64 s3.resize (
spec.numChannels);
65 s4.resize (
spec.numChannels);
70template <
typename SampleType>
73 for (
auto s : { &s1, &s2, &s3, &s4 })
74 std::fill (s->begin(), s->end(),
static_cast<SampleType
> (0));
77template <
typename SampleType>
80 for (
auto s : { &s1, &s2, &s3, &s4 })
81 for (
auto& element : *s)
82 util::snapToZero (element);
86template <
typename SampleType>
97 if (filterType == Type::allpass)
100 auto yH2 = ((filterType == Type::lowpass ?
yL :
yH) - (R2 + g) * s3[(
size_t) channel] - s4[(
size_t) channel]) * h;
108 return filterType == Type::lowpass ?
yL2 :
yH2;
111template <
typename SampleType>
122 auto yH2 = (
yL - (R2 + g) * s3[(
size_t) channel] - s4[(
size_t) channel]) * h;
134template <
typename SampleType>
138 R2 = (SampleType) std::sqrt (2.0);
139 h = (SampleType) (1.0 / (1.0 + R2 * g + g * g));
void prepare(const ProcessSpec &spec)
void setType(Type newType)
SampleType processSample(int channel, SampleType inputValue)
void setCutoffFrequency(SampleType newCutoffFrequencyHz)
void snapToZero() noexcept