78 SampleType getLatencyInSamples()
const override
85 jassert (inputBlock.getNumChannels() <=
static_cast<size_t> (ParentType::buffer.getNumChannels()));
86 jassert (inputBlock.getNumSamples() * ParentType::factor <=
static_cast<size_t> (ParentType::buffer.getNumSamples()));
88 for (
size_t channel = 0; channel < inputBlock.getNumChannels(); ++channel)
89 ParentType::buffer.copyFrom (
static_cast<int> (channel), 0,
90 inputBlock.getChannelPointer (channel),
static_cast<int> (inputBlock.getNumSamples()));
95 jassert (outputBlock.getNumChannels() <=
static_cast<size_t> (ParentType::buffer.getNumChannels()));
96 jassert (outputBlock.getNumSamples() * ParentType::factor <=
static_cast<size_t> (ParentType::buffer.getNumSamples()));
98 outputBlock.copyFrom (ParentType::getProcessedSamples (outputBlock.getNumSamples()));
126 stateUp.
setSize (
static_cast<int> (this->numChannels),
static_cast<int> (
N));
132 stateDown.
setSize (
static_cast<int> (this->numChannels),
static_cast<int> (
N));
133 stateDown2.
setSize (
static_cast<int> (this->numChannels),
static_cast<int> (
Ndiv4 + 1));
135 position.
resize (
static_cast<int> (this->numChannels));
139 SampleType getLatencyInSamples()
const override
144 void reset()
override
157 jassert (inputBlock.getNumChannels() <=
static_cast<size_t> (ParentType::buffer.getNumChannels()));
158 jassert (inputBlock.getNumSamples() * ParentType::factor <=
static_cast<size_t> (ParentType::buffer.getNumSamples()));
164 auto numSamples = inputBlock.getNumSamples();
167 for (
size_t channel = 0; channel < inputBlock.getNumChannels(); ++channel)
169 auto bufferSamples = ParentType::buffer.getWritePointer (
static_cast<int> (channel));
171 auto samples = inputBlock.getChannelPointer (channel);
173 for (
size_t i = 0; i < numSamples; ++i)
179 auto out =
static_cast<SampleType
> (0.0);
181 for (
size_t k = 0;
k <
Ndiv2;
k += 2)
189 for (
size_t k = 0;
k <
N - 2;
k += 2)
197 jassert (outputBlock.getNumChannels() <=
static_cast<size_t> (ParentType::buffer.getNumChannels()));
198 jassert (outputBlock.getNumSamples() * ParentType::factor <=
static_cast<size_t> (ParentType::buffer.getNumSamples()));
205 auto numSamples = outputBlock.getNumSamples();
208 for (
size_t channel = 0; channel < outputBlock.getNumChannels(); ++channel)
210 auto bufferSamples = ParentType::buffer.getWritePointer (
static_cast<int> (channel));
213 auto samples = outputBlock.getChannelPointer (channel);
214 auto pos = position.
getUnchecked (
static_cast<int> (channel));
216 for (
size_t i = 0; i < numSamples; ++i)
222 auto out =
static_cast<SampleType
> (0.0);
224 for (
size_t k = 0;
k <
Ndiv2;
k += 2)
234 for (
size_t k = 0;
k <
N - 2; ++
k)
238 pos = (pos == 0 ?
Ndiv4 : pos - 1);
241 position.
setUnchecked (
static_cast<int> (channel), pos);
282 for (
auto i = 0; i <
structureUp.directPath.size(); ++i)
283 coefficientsUp.
add (
structureUp.directPath.getObjectPointer (i)->coefficients[0]);
285 for (
auto i = 1; i <
structureUp.delayedPath.size(); ++i)
286 coefficientsUp.
add (
structureUp.delayedPath.getObjectPointer (i)->coefficients[0]);
289 coefficientsDown.
add (
structureDown.directPath.getObjectPointer (i)->coefficients[0]);
292 coefficientsDown.
add (
structureDown.delayedPath.getObjectPointer (i)->coefficients[0]);
294 v1Up.
setSize (
static_cast<int> (this->numChannels), coefficientsUp.
size());
295 v1Down.
setSize (
static_cast<int> (this->numChannels), coefficientsDown.
size());
296 delayDown.
resize (
static_cast<int> (this->numChannels));
300 SampleType getLatencyInSamples()
const override
305 void reset()
override
315 jassert (inputBlock.getNumChannels() <=
static_cast<size_t> (ParentType::buffer.getNumChannels()));
316 jassert (inputBlock.getNumSamples() * ParentType::factor <=
static_cast<size_t> (ParentType::buffer.getNumSamples()));
320 auto numStages = coefficientsUp.
size();
323 auto numSamples = inputBlock.getNumSamples();
326 for (
size_t channel = 0; channel < inputBlock.getNumChannels(); ++channel)
328 auto bufferSamples = ParentType::buffer.getWritePointer (
static_cast<int> (channel));
330 auto samples = inputBlock.getChannelPointer (channel);
332 for (
size_t i = 0; i < numSamples; ++i)
339 auto alpha = coeffs[n];
340 auto output = alpha * input +
lv1[n];
341 lv1[n] = input - alpha * output;
353 auto alpha = coeffs[n];
354 auto output = alpha * input +
lv1[n];
355 lv1[n] = input - alpha * output;
364 #if JUCE_DSP_ENABLE_SNAP_TO_ZERO
371 jassert (outputBlock.getNumChannels() <=
static_cast<size_t> (ParentType::buffer.getNumChannels()));
372 jassert (outputBlock.getNumSamples() * ParentType::factor <=
static_cast<size_t> (ParentType::buffer.getNumSamples()));
376 auto numStages = coefficientsDown.
size();
379 auto numSamples = outputBlock.getNumSamples();
382 for (
size_t channel = 0; channel < outputBlock.getNumChannels(); ++channel)
384 auto bufferSamples = ParentType::buffer.getWritePointer (
static_cast<int> (channel));
386 auto samples = outputBlock.getChannelPointer (channel);
387 auto delay = delayDown.
getUnchecked (
static_cast<int> (channel));
389 for (
size_t i = 0; i < numSamples; ++i)
396 auto alpha = coeffs[n];
397 auto output = alpha * input +
lv1[n];
398 lv1[n] = input - alpha * output;
409 auto alpha = coeffs[n];
410 auto output = alpha * input +
lv1[n];
411 lv1[n] = input - alpha * output;
420 delayDown.
setUnchecked (
static_cast<int> (channel), delay);
423 #if JUCE_DSP_ENABLE_SNAP_TO_ZERO
432 for (
auto channel = 0; channel < ParentType::buffer.getNumChannels(); ++channel)
435 auto numStages = coefficientsUp.
size();
437 for (
auto n = 0; n < numStages; ++n)
438 util::snapToZero (
lv1[n]);
443 for (
auto channel = 0; channel < ParentType::buffer.getNumChannels(); ++channel)
446 auto numStages = coefficientsDown.
size();
448 for (
auto n = 0; n < numStages; ++n)
449 util::snapToZero (
lv1[n]);
461 constexpr auto one =
static_cast<SampleType
> (1.0);
468 auto coeffs = i->getRawCoefficients();
470 if (i->getFilterOrder() == 1)
484 auto coeffs = i->getRawCoefficients();
486 if (i->getFilterOrder() == 1)
508 for (
int i = 0; i <= numerator.getOrder(); ++i)
511 for (
int i = 1; i <= denominator.getOrder(); ++i)
545 jassert (isPositiveAndBelow (
newFactor, 5) && numChannels > 0);
551 else if (
newType == FilterType::filterHalfBandPolyphaseIIR)
568 else if (
newType == FilterType::filterHalfBandFIREquiripple)