Loading...
Searching...
No Matches
juce_FirstOrderTPTFilter.cpp
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2022 - Raw Material Software Limited
JUCE is an open source library subject to commercial or open-source
licensing.
By using JUCE, you agree to the terms of both the JUCE 7 End-User License
Agreement and JUCE Privacy Policy.
End User License Agreement: www.juce.com/juce-7-licence
Privacy Policy: www.juce.com/juce-privacy-policy
Or: You may also use this code under the terms of the GPL v3 (see
www.gnu.org/licenses).
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
namespace juce::dsp
{
//==============================================================================
template <typename SampleType>
FirstOrderTPTFilter<SampleType>::FirstOrderTPTFilter()
{
update();
}
//==============================================================================
template <typename SampleType>
void FirstOrderTPTFilter<SampleType>::setType (Type newValue)
{
filterType = newValue;
}
template <typename SampleType>
void FirstOrderTPTFilter<SampleType>::setCutoffFrequency (SampleType newValue)
{
jassert (isPositiveAndBelow (newValue, static_cast<SampleType> (sampleRate * 0.5)));
cutoffFrequency = newValue;
update();
}
//==============================================================================
template <typename SampleType>
void FirstOrderTPTFilter<SampleType>::prepare (const ProcessSpec& spec)
{
jassert (spec.sampleRate > 0);
jassert (spec.numChannels > 0);
sampleRate = spec.sampleRate;
s1.resize (spec.numChannels);
update();
reset();
}
template <typename SampleType>
void FirstOrderTPTFilter<SampleType>::reset()
{
reset (static_cast<SampleType> (0));
}
template <typename SampleType>
void FirstOrderTPTFilter<SampleType>::reset (SampleType newValue)
{
std::fill (s1.begin(), s1.end(), newValue);
}
//==============================================================================
template <typename SampleType>
SampleType FirstOrderTPTFilter<SampleType>::processSample (int channel, SampleType inputValue)
{
auto& s = s1[(size_t) channel];
auto v = G * (inputValue - s);
auto y = v + s;
s = y + v;
switch (filterType)
{
case Type::lowpass: return y;
case Type::highpass: return inputValue - y;
case Type::allpass: return 2 * y - inputValue;
default: break;
}
jassertfalse;
return y;
}
template <typename SampleType>
void FirstOrderTPTFilter<SampleType>::snapToZero() noexcept
{
for (auto& s : s1)
util::snapToZero (s);
}
//==============================================================================
template <typename SampleType>
void FirstOrderTPTFilter<SampleType>::update()
{
auto g = SampleType (std::tan (juce::MathConstants<double>::pi * cutoffFrequency / sampleRate));
G = g / (1 + g);
}
//==============================================================================
template class FirstOrderTPTFilter<float>;
template class FirstOrderTPTFilter<double>;
} // namespace juce::dsp
juce::dsp::FirstOrderTPTFilter::prepare
void prepare(const ProcessSpec &spec)
Definition juce_FirstOrderTPTFilter.cpp:54
juce::dsp::FirstOrderTPTFilter::snapToZero
void snapToZero() noexcept
Definition juce_FirstOrderTPTFilter.cpp:101
juce::dsp::FirstOrderTPTFilter::processSample
SampleType processSample(int channel, SampleType inputValue)
Definition juce_FirstOrderTPTFilter.cpp:80
juce::dsp::FirstOrderTPTFilter::FirstOrderTPTFilter
FirstOrderTPTFilter()
Definition juce_FirstOrderTPTFilter.cpp:31
juce::dsp::FirstOrderTPTFilter::setType
void setType(Type newType)
Definition juce_FirstOrderTPTFilter.cpp:38
juce::dsp::FirstOrderTPTFilter::setCutoffFrequency
void setCutoffFrequency(SampleType newFrequencyHz)
Definition juce_FirstOrderTPTFilter.cpp:44
juce::dsp::FirstOrderTPTFilter::reset
void reset()
Definition juce_FirstOrderTPTFilter.cpp:67
juce::MathConstants::pi
static constexpr FloatType pi
Definition juce_MathsFunctions.h:141
juce::dsp::ProcessSpec
Definition juce_ProcessContext.h:36
juce::dsp::ProcessSpec::numChannels
uint32 numChannels
Definition juce_ProcessContext.h:44
juce::dsp::ProcessSpec::sampleRate
double sampleRate
Definition juce_ProcessContext.h:38