81 SampleType getLatencyInSamples()
override
88 jassert (inputBlock.getNumChannels() <=
static_cast<size_t> (ParentType::buffer.getNumChannels()));
89 jassert (inputBlock.getNumSamples() * ParentType::factor <=
static_cast<size_t> (ParentType::buffer.getNumSamples()));
91 for (
size_t channel = 0; channel < inputBlock.getNumChannels(); ++channel)
92 ParentType::buffer.copyFrom (
static_cast<int> (channel), 0,
93 inputBlock.getChannelPointer (channel),
static_cast<int> (inputBlock.getNumSamples()));
98 jassert (outputBlock.getNumChannels() <=
static_cast<size_t> (ParentType::buffer.getNumChannels()));
99 jassert (outputBlock.getNumSamples() * ParentType::factor <=
static_cast<size_t> (ParentType::buffer.getNumSamples()));
101 outputBlock.copyFrom (ParentType::getProcessedSamples (outputBlock.getNumSamples()));
129 stateUp.
setSize (
static_cast<int> (this->numChannels),
static_cast<int> (
N));
135 stateDown.
setSize (
static_cast<int> (this->numChannels),
static_cast<int> (
N));
136 stateDown2.
setSize (
static_cast<int> (this->numChannels),
static_cast<int> (
Ndiv4 + 1));
138 position.
resize (
static_cast<int> (this->numChannels));
142 SampleType getLatencyInSamples()
override
147 void reset()
override
160 jassert (inputBlock.getNumChannels() <=
static_cast<size_t> (ParentType::buffer.getNumChannels()));
161 jassert (inputBlock.getNumSamples() * ParentType::factor <=
static_cast<size_t> (ParentType::buffer.getNumSamples()));
167 auto numSamples = inputBlock.getNumSamples();
170 for (
size_t channel = 0; channel < inputBlock.getNumChannels(); ++channel)
172 auto bufferSamples = ParentType::buffer.getWritePointer (
static_cast<int> (channel));
174 auto samples = inputBlock.getChannelPointer (channel);
176 for (
size_t i = 0; i < numSamples; ++i)
182 auto out =
static_cast<SampleType
> (0.0);
184 for (
size_t k = 0;
k <
Ndiv2;
k += 2)
192 for (
size_t k = 0;
k <
N - 2;
k += 2)
200 jassert (outputBlock.getNumChannels() <=
static_cast<size_t> (ParentType::buffer.getNumChannels()));
201 jassert (outputBlock.getNumSamples() * ParentType::factor <=
static_cast<size_t> (ParentType::buffer.getNumSamples()));
208 auto numSamples = outputBlock.getNumSamples();
211 for (
size_t channel = 0; channel < outputBlock.getNumChannels(); ++channel)
213 auto bufferSamples = ParentType::buffer.getWritePointer (
static_cast<int> (channel));
216 auto samples = outputBlock.getChannelPointer (channel);
217 auto pos = position.
getUnchecked (
static_cast<int> (channel));
219 for (
size_t i = 0; i < numSamples; ++i)
225 auto out =
static_cast<SampleType
> (0.0);
227 for (
size_t k = 0;
k <
Ndiv2;
k += 2)
237 for (
size_t k = 0;
k <
N - 2; ++
k)
241 pos = (pos == 0 ?
Ndiv4 : pos - 1);
244 position.
setUnchecked (
static_cast<int> (channel), pos);
286 coefficientsUp.
add (
structureUp.directPath.getObjectPointer (i)->coefficients[0]);
289 coefficientsUp.
add (
structureUp.delayedPath.getObjectPointer (i)->coefficients[0]);
292 coefficientsDown.
add (
structureDown.directPath.getObjectPointer (i)->coefficients[0]);
295 coefficientsDown.
add (
structureDown.delayedPath.getObjectPointer (i)->coefficients[0]);
297 v1Up.
setSize (
static_cast<int> (this->numChannels), coefficientsUp.
size());
298 v1Down.
setSize (
static_cast<int> (this->numChannels), coefficientsDown.
size());
299 delayDown.
resize (
static_cast<int> (this->numChannels));
303 SampleType getLatencyInSamples()
override
308 void reset()
override
318 jassert (inputBlock.getNumChannels() <=
static_cast<size_t> (ParentType::buffer.getNumChannels()));
319 jassert (inputBlock.getNumSamples() * ParentType::factor <=
static_cast<size_t> (ParentType::buffer.getNumSamples()));
326 auto numSamples = inputBlock.getNumSamples();
329 for (
size_t channel = 0; channel < inputBlock.getNumChannels(); ++channel)
331 auto bufferSamples = ParentType::buffer.getWritePointer (
static_cast<int> (channel));
333 auto samples = inputBlock.getChannelPointer (channel);
335 for (
size_t i = 0; i < numSamples; ++i)
342 auto alpha = coeffs[n];
343 auto output = alpha * input +
lv1[n];
344 lv1[n] = input - alpha * output;
356 auto alpha = coeffs[n];
357 auto output = alpha * input +
lv1[n];
358 lv1[n] = input - alpha * output;
373 jassert (outputBlock.getNumChannels() <=
static_cast<size_t> (ParentType::buffer.getNumChannels()));
374 jassert (outputBlock.getNumSamples() * ParentType::factor <=
static_cast<size_t> (ParentType::buffer.getNumSamples()));
381 auto numSamples = outputBlock.getNumSamples();
384 for (
size_t channel = 0; channel < outputBlock.getNumChannels(); ++channel)
386 auto bufferSamples = ParentType::buffer.getWritePointer (
static_cast<int> (channel));
388 auto samples = outputBlock.getChannelPointer (channel);
391 for (
size_t i = 0; i < numSamples; ++i)
398 auto alpha = coeffs[n];
399 auto output = alpha * input +
lv1[n];
400 lv1[n] = input - alpha * output;
411 auto alpha = coeffs[n];
412 auto output = alpha * input +
lv1[n];
413 lv1[n] = input - alpha * output;
433 for (
auto channel = 0; channel < ParentType::buffer.getNumChannels(); ++channel)
439 util::snapToZero (
lv1[n]);
444 for (
auto channel = 0; channel < ParentType::buffer.getNumChannels(); ++channel)
450 util::snapToZero (
lv1[n]);
462 constexpr auto one =
static_cast<SampleType
> (1.0);
469 auto coeffs = i->getRawCoefficients();
471 if (i->getFilterOrder() == 1)
485 auto coeffs = i->getRawCoefficients();
487 if (i->getFilterOrder() == 1)
509 for (
auto i = 0; i <=
numerator.getOrder(); ++i)
545 jassert (isPositiveAndBelow (
newFactor, 5) && numChannels > 0);
551 else if (
newType == FilterType::filterHalfBandPolyphaseIIR)
568 else if (
newType == FilterType::filterHalfBandFIREquiripple)