1010"""
1111
1212
13+ def _validate_filter_inputs (
14+ frequency : int ,
15+ samplerate : int ,
16+ q_factor : float ,
17+ ) -> None :
18+ """
19+ Validate common biquad filter inputs.
20+
21+ >>> _validate_filter_inputs(0, 48000, 1)
22+ Traceback (most recent call last):
23+ ...
24+ ValueError: frequency must be greater than 0 and less than half the samplerate
25+ >>> _validate_filter_inputs(24000, 48000, 1)
26+ Traceback (most recent call last):
27+ ...
28+ ValueError: frequency must be greater than 0 and less than half the samplerate
29+ >>> _validate_filter_inputs(1000, 0, 1)
30+ Traceback (most recent call last):
31+ ...
32+ ValueError: samplerate must be greater than 0
33+ >>> _validate_filter_inputs(1000, 48000, 0)
34+ Traceback (most recent call last):
35+ ...
36+ ValueError: q_factor must be greater than 0
37+ """
38+ if samplerate <= 0 :
39+ raise ValueError ("samplerate must be greater than 0" )
40+
41+ if frequency <= 0 or frequency >= samplerate / 2 :
42+ raise ValueError (
43+ "frequency must be greater than 0 and less than half the samplerate"
44+ )
45+
46+ if q_factor <= 0 :
47+ raise ValueError ("q_factor must be greater than 0" )
48+
49+
1350def make_lowpass (
1451 frequency : int ,
1552 samplerate : int ,
@@ -23,6 +60,8 @@ def make_lowpass(
2360 [1.0922959556412573, -1.9828897227476208, 0.9077040443587427, 0.004277569313094809,
2461 0.008555138626189618, 0.004277569313094809]
2562 """
63+ _validate_filter_inputs (frequency , samplerate , q_factor )
64+
2665 w0 = tau * frequency / samplerate
2766 _sin = sin (w0 )
2867 _cos = cos (w0 )
@@ -53,6 +92,8 @@ def make_highpass(
5392 [1.0922959556412573, -1.9828897227476208, 0.9077040443587427, 0.9957224306869052,
5493 -1.9914448613738105, 0.9957224306869052]
5594 """
95+ _validate_filter_inputs (frequency , samplerate , q_factor )
96+
5697 w0 = tau * frequency / samplerate
5798 _sin = sin (w0 )
5899 _cos = cos (w0 )
@@ -83,6 +124,8 @@ def make_bandpass(
83124 [1.0922959556412573, -1.9828897227476208, 0.9077040443587427, 0.06526309611002579,
84125 0, -0.06526309611002579]
85126 """
127+ _validate_filter_inputs (frequency , samplerate , q_factor )
128+
86129 w0 = tau * frequency / samplerate
87130 _sin = sin (w0 )
88131 _cos = cos (w0 )
@@ -114,6 +157,8 @@ def make_allpass(
114157 [1.0922959556412573, -1.9828897227476208, 0.9077040443587427, 0.9077040443587427,
115158 -1.9828897227476208, 1.0922959556412573]
116159 """
160+ _validate_filter_inputs (frequency , samplerate , q_factor )
161+
117162 w0 = tau * frequency / samplerate
118163 _sin = sin (w0 )
119164 _cos = cos (w0 )
@@ -142,6 +187,8 @@ def make_peak(
142187 [1.0653405327119334, -1.9828897227476208, 0.9346594672880666, 1.1303715025601122,
143188 -1.9828897227476208, 0.8696284974398878]
144189 """
190+ _validate_filter_inputs (frequency , samplerate , q_factor )
191+
145192 w0 = tau * frequency / samplerate
146193 _sin = sin (w0 )
147194 _cos = cos (w0 )
@@ -174,6 +221,8 @@ def make_lowshelf(
174221 [3.0409336710888786, -5.608870992220748, 2.602157875636628, 3.139954022810743,
175222 -5.591841778072785, 2.5201667380627257]
176223 """
224+ _validate_filter_inputs (frequency , samplerate , q_factor )
225+
177226 w0 = tau * frequency / samplerate
178227 _sin = sin (w0 )
179228 _cos = cos (w0 )
@@ -211,6 +260,8 @@ def make_highshelf(
211260 [2.2229172136088806, -3.9587208137297303, 1.7841414181566304, 4.295432981120543,
212261 -7.922740859457287, 3.6756456963725253]
213262 """
263+ _validate_filter_inputs (frequency , samplerate , q_factor )
264+
214265 w0 = tau * frequency / samplerate
215266 _sin = sin (w0 )
216267 _cos = cos (w0 )
0 commit comments