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(q31_t* outputSample, q31_t* endSample, int32_t sampleIncrememt);
32 void doFilterStereo(q31_t* startSample, q31_t* endSample);
52 [[gnu::always_inline]]
inline q31_t scaleInput(q31_t input, q31_t feedbacksSum) {
54 if (morph > 0 || processedResonance > 510000000) {
55 temp = multiply_32x32_rshift32_rounded(
56 (input - (multiply_32x32_rshift32_rounded(feedbacksSum, processedResonance) << 3)),
57 divideByTotalMoveabilityAndProcessedResonance)
59 q31_t extra = 2 * multiply_32x32_rshift32(input, morph);
60 temp = getTanHUnknown(temp + extra, 2);
63 temp = multiply_32x32_rshift32_rounded(
64 (input - (multiply_32x32_rshift32_rounded(feedbacksSum, processedResonance) << 3)),
65 divideByTotalMoveabilityAndProcessedResonance)
71 [[gnu::always_inline]]
inline q31_t do24dBLPFOnSample(q31_t input, LpLadderState& state);
72 [[gnu::always_inline]]
inline q31_t do12dBLPFOnSample(q31_t input, LpLadderState& state);
73 [[gnu::always_inline]]
inline q31_t doDriveLPFOnSample(q31_t input, LpLadderState& state);
83 q31_t processedResonance;
84 q31_t divideByTotalMoveabilityAndProcessedResonance;