50    q31_t configure(q31_t frequency, q31_t resonance, FilterMode lpfMode, q31_t lpfMorph, q31_t filterGain) {
 
   53        return static_cast<T*
>(
this)->setConfig(frequency, resonance, lpfMode, lshiftAndSaturate<2>(lpfMorph),
 
   64        if (dryFade < 0.001) {
 
   65            static_cast<T*
>(
this)->doFilter(buffer);
 
   69        memcpy(blendBuffer.data(), buffer.data(), buffer.size_bytes());
 
   70        static_cast<T*
>(
this)->doFilter(buffer);
 
   72        std::span mono_blend_buffer{
reinterpret_cast<q31_t*
>(blendBuffer.data()), buffer.size()};
 
   74        for (
auto [dry, wet] : std::views::zip(mono_blend_buffer, buffer)) {
 
   75            wet = multiply_32x32_rshift32(wet, wetLevel);
 
   76            wet = multiply_accumulate_32x32_rshift32_rounded(wet, dry, ONE_Q31 - wetLevel) << 1;
 
 
   88        if (dryFade < 0.001) {
 
   89            static_cast<T*
>(
this)->doFilterStereo(buffer);
 
   92        memcpy(blendBuffer.data(), buffer.data(), buffer.size_bytes());
 
   93        static_cast<T*
>(
this)->doFilterStereo(buffer);
 
   95        for (
auto [dry, wet] : std::views::zip(blendBuffer, buffer)) {
 
   96            wet.l = multiply_32x32_rshift32(wet.l, wetLevel);
 
   97            wet.l = multiply_accumulate_32x32_rshift32_rounded(wet.l, dry.l, ONE_Q31 - wetLevel) << 1;
 
   98            wet.r = multiply_32x32_rshift32(wet.r, wetLevel);
 
   99            wet.r = multiply_accumulate_32x32_rshift32_rounded(wet.r, dry.r, ONE_Q31 - wetLevel) << 1;
 
 
  127        tannedFrequency = instantTan(lshiftAndSaturate<5>(frequency));
 
  131        divideBy1PlusTannedFrequency = (q31_t)(288230376151711744.0 / (
double)(ONE_Q16 + (tannedFrequency >> 1)));
 
  132        fc = multiply_32x32_rshift32_rounded(tannedFrequency, divideBy1PlusTannedFrequency) << 4;