Skip to content

Commit 175e9cb

Browse files
fix: validate butterworth filter inputs
1 parent 791deb4 commit 175e9cb

1 file changed

Lines changed: 51 additions & 0 deletions

File tree

audio_filters/butterworth_filter.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,43 @@
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+
1350
def 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

Comments
 (0)