@@ -55,7 +55,7 @@ class ButterworthFilter : public BiquadCascade<SampleType, CoeffType>
5555
5656 // ==============================================================================
5757 /* * Maximum supported filter order */
58- static constexpr int maxOrder = 32 ;
58+ static constexpr int maxOrder = 16 ;
5959
6060public:
6161 // ==============================================================================
@@ -70,7 +70,7 @@ class ButterworthFilter : public BiquadCascade<SampleType, CoeffType>
7070 ButterworthFilter (FilterModeType mode, int filterOrder, CoeffType freq)
7171 : ButterworthFilter()
7272 {
73- setParameters (mode, filterOrder, freq, static_cast <CoeffType> (0.0 ), static_cast <CoeffType> ( 0.0 ), 44100.0 );
73+ setParameters (mode, filterOrder, freq, static_cast <CoeffType> (0.0 ), 44100.0 );
7474 }
7575
7676 // ==============================================================================
@@ -91,13 +91,13 @@ class ButterworthFilter : public BiquadCascade<SampleType, CoeffType>
9191 {
9292 mode = resolveFilterMode (mode, getSupportedModes ());
9393
94- jassert (filterOrder >= 1 && filterOrder <= maxOrder);
94+ jassert (filterOrder >= 2 && filterOrder <= maxOrder);
9595 jassert (freq > static_cast <CoeffType> (0.0 ));
96- if (mode.test (FilterMode::bandpass) || mode.test (FilterMode::bandstop))
97- jassert (freq2 > freq && freq2 > static_cast <CoeffType> (0.0 ));
9896
99- // Ensure order is valid (1 or power of 2)
100- filterOrder = filterOrder == 1 ? filterOrder : jlimit (2 , maxOrder, nextPowerOfTwo (filterOrder));
97+ if ((mode.test (FilterMode::bandpass) || mode.test (FilterMode::bandstop)) && freq2 < freq)
98+ std::swap (freq, freq2);
99+
100+ filterOrder = jlimit (2 , maxOrder, nextEven (filterOrder));
101101
102102 if (filterMode != mode
103103 || order != filterOrder
@@ -138,7 +138,7 @@ class ButterworthFilter : public BiquadCascade<SampleType, CoeffType>
138138 */
139139 void setOrder (int filterOrder) noexcept
140140 {
141- filterOrder = filterOrder == 1 ? filterOrder : jlimit (2 , maxOrder, nextPowerOfTwo (filterOrder));
141+ filterOrder = jlimit (2 , maxOrder, nextEven (filterOrder));
142142
143143 if (order != filterOrder)
144144 {
0 commit comments