47 q31_t configure(q31_t frequency, q31_t resonance, FilterMode lpfMode, q31_t lpfMorph, q31_t filterGain) {
50 return static_cast<T*
>(
this)->setConfig(frequency, resonance, lpfMode, lshiftAndSaturate<2>(lpfMorph),
60 [[gnu::hot]]
void filterMono(q31_t* startSample, q31_t* endSample, int32_t sampleIncrememt = 1) {
61 if (dryFade < 0.001) {
62 static_cast<T*
>(
this)->doFilter(startSample, endSample, sampleIncrememt);
65 memcpy(blendBuffer, startSample, (endSample - startSample) *
sizeof(q31_t));
66 static_cast<T*
>(
this)->doFilter(startSample, endSample, sampleIncrememt);
68 q31_t* currentSample = startSample;
69 q31_t* currentDrySample = blendBuffer;
71 q31_t wet = multiply_32x32_rshift32(*currentSample, wetLevel);
72 *currentSample = multiply_accumulate_32x32_rshift32_rounded(wet, *currentDrySample, ONE_Q31 - wetLevel)
75 currentDrySample += 1;
77 }
while (currentSample < endSample);
86 [[gnu::hot]]
void filterStereo(q31_t* startSample, q31_t* endSample) {
87 if (dryFade < 0.001) {
88 static_cast<T*
>(
this)->doFilterStereo(startSample, endSample);
91 memcpy(blendBuffer, startSample, (endSample - startSample) *
sizeof(q31_t));
92 static_cast<T*
>(
this)->doFilterStereo(startSample, endSample);
94 q31_t* currentSample = startSample;
95 q31_t* currentDrySample = blendBuffer;
97 q31_t wet = multiply_32x32_rshift32(*currentSample, wetLevel);
98 *currentSample = multiply_accumulate_32x32_rshift32_rounded(wet, *currentDrySample, ONE_Q31 - wetLevel)
101 currentDrySample += 1;
103 }
while (currentSample < endSample);
130 tannedFrequency = instantTan(lshiftAndSaturate<5>(frequency));
134 divideBy1PlusTannedFrequency = (q31_t)(288230376151711744.0 / (
double)(ONE_Q16 + (tannedFrequency >> 1)));
135 fc = multiply_32x32_rshift32_rounded(tannedFrequency, divideBy1PlusTannedFrequency) << 4;