|
|
@@ -258,42 +258,42 @@ IIRCoefficients IIRCoefficients::makePeakFilter (double sampleRate, |
|
|
|
}
|
|
|
|
|
|
|
|
//==============================================================================
|
|
|
|
IIRFilter::IIRFilter() noexcept
|
|
|
|
{
|
|
|
|
}
|
|
|
|
template <typename Mutex>
|
|
|
|
IIRFilterBase<Mutex>::IIRFilterBase() noexcept = default;
|
|
|
|
|
|
|
|
IIRFilter::IIRFilter (const IIRFilter& other) noexcept : active (other.active)
|
|
|
|
template <typename Mutex>
|
|
|
|
IIRFilterBase<Mutex>::IIRFilterBase (const IIRFilterBase& other) noexcept : active (other.active)
|
|
|
|
{
|
|
|
|
const SpinLock::ScopedLockType sl (other.processLock);
|
|
|
|
const typename Mutex::ScopedLockType sl (other.processLock);
|
|
|
|
coefficients = other.coefficients;
|
|
|
|
}
|
|
|
|
|
|
|
|
IIRFilter::~IIRFilter() noexcept
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
//==============================================================================
|
|
|
|
void IIRFilter::makeInactive() noexcept
|
|
|
|
template <typename Mutex>
|
|
|
|
void IIRFilterBase<Mutex>::makeInactive() noexcept
|
|
|
|
{
|
|
|
|
const SpinLock::ScopedLockType sl (processLock);
|
|
|
|
const typename Mutex::ScopedLockType sl (processLock);
|
|
|
|
active = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void IIRFilter::setCoefficients (const IIRCoefficients& newCoefficients) noexcept
|
|
|
|
template <typename Mutex>
|
|
|
|
void IIRFilterBase<Mutex>::setCoefficients (const IIRCoefficients& newCoefficients) noexcept
|
|
|
|
{
|
|
|
|
const SpinLock::ScopedLockType sl (processLock);
|
|
|
|
const typename Mutex::ScopedLockType sl (processLock);
|
|
|
|
coefficients = newCoefficients;
|
|
|
|
active = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
//==============================================================================
|
|
|
|
void IIRFilter::reset() noexcept
|
|
|
|
template <typename Mutex>
|
|
|
|
void IIRFilterBase<Mutex>::reset() noexcept
|
|
|
|
{
|
|
|
|
const SpinLock::ScopedLockType sl (processLock);
|
|
|
|
const typename Mutex::ScopedLockType sl (processLock);
|
|
|
|
v1 = v2 = 0.0;
|
|
|
|
}
|
|
|
|
|
|
|
|
float IIRFilter::processSingleSampleRaw (float in) noexcept
|
|
|
|
template <typename Mutex>
|
|
|
|
float IIRFilterBase<Mutex>::processSingleSampleRaw (float in) noexcept
|
|
|
|
{
|
|
|
|
auto out = coefficients.coefficients[0] * in + v1;
|
|
|
|
|
|
|
@@ -305,9 +305,10 @@ float IIRFilter::processSingleSampleRaw (float in) noexcept |
|
|
|
return out;
|
|
|
|
}
|
|
|
|
|
|
|
|
void IIRFilter::processSamples (float* const samples, const int numSamples) noexcept
|
|
|
|
template <typename Mutex>
|
|
|
|
void IIRFilterBase<Mutex>::processSamples (float* const samples, const int numSamples) noexcept
|
|
|
|
{
|
|
|
|
const SpinLock::ScopedLockType sl (processLock);
|
|
|
|
const typename Mutex::ScopedLockType sl (processLock);
|
|
|
|
|
|
|
|
if (active)
|
|
|
|
{
|
|
|
@@ -333,4 +334,7 @@ void IIRFilter::processSamples (float* const samples, const int numSamples) noex |
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template class IIRFilterBase<SpinLock>;
|
|
|
|
template class IIRFilterBase<DummyCriticalSection>;
|
|
|
|
|
|
|
|
} // namespace juce
|