26class LpLadderFilter :
public Filter<LpLadderFilter> {
28 LpLadderFilter() =
default;
30 q31_t setConfig(q31_t hpfFrequency, q31_t hpfResonance, FilterMode lpfMode, q31_t lpfMorph, q31_t filterGain);
31 void doFilter(std::span<q31_t> buffer);
32 void doFilterStereo(std::span<StereoSample> buffer);
54 [[gnu::always_inline]] q31_t scaleInput(q31_t input, q31_t feedbacksSum) {
56 if (morph > 0 || processedResonance > 510000000) {
57 temp = multiply_32x32_rshift32_rounded(
58 (input - (multiply_32x32_rshift32_rounded(feedbacksSum, processedResonance) << 3)),
59 divideByTotalMoveabilityAndProcessedResonance)
61 q31_t extra = 2 * multiply_32x32_rshift32(input, morph);
62 temp = getTanHUnknown(temp + extra, 2);
65 temp = multiply_32x32_rshift32_rounded(
66 (input - (multiply_32x32_rshift32_rounded(feedbacksSum, processedResonance) << 3)),
67 divideByTotalMoveabilityAndProcessedResonance)
74 [[gnu::always_inline]]
inline q31_t do24dBLPFOnSample(q31_t input, LpLadderState& state);
75 [[gnu::always_inline]]
inline q31_t do12dBLPFOnSample(q31_t input, LpLadderState& state);
76 [[gnu::always_inline]]
inline q31_t doDriveLPFOnSample(q31_t input, LpLadderState& state);
86 q31_t processedResonance;
87 q31_t divideByTotalMoveabilityAndProcessedResonance;