Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added safety checks for filter stability #12562

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions audio_filters/butterworth_filter.py
Original file line number Diff line number Diff line change
@@ -10,6 +10,23 @@
"""


# All calls to filter creators must have keyword arguments
def safe_checks(filter_creator):
def safe_filter_creator(**kwargs):
if not isinstance(kwargs["frequency"], int) or kwargs["frequency"] <= 0:
raise ValueError("Frequency must be a positive integer.")
if not isinstance(kwargs["samplerate"], int) or kwargs["samplerate"] <= 0:
raise ValueError("Samplerate must be a positive integer.")
if not (0 < kwargs["frequency"] < kwargs["samplerate"] / 2):
raise ValueError("Frequency must be less than half of the samplerate.")
if kwargs["q_factor"] <= 0:
raise ValueError("Q factor must be positive.")
return filter_creator(**kwargs)

return safe_filter_creator


@safe_checks
def make_lowpass(
frequency: int,
samplerate: int,
@@ -40,6 +57,7 @@ def make_lowpass(
return filt


@safe_checks
def make_highpass(
frequency: int,
samplerate: int,
@@ -70,6 +88,7 @@ def make_highpass(
return filt


@safe_checks
def make_bandpass(
frequency: int,
samplerate: int,
@@ -101,6 +120,7 @@ def make_bandpass(
return filt


@safe_checks
def make_allpass(
frequency: int,
samplerate: int,
@@ -128,6 +148,7 @@ def make_allpass(
return filt


@safe_checks
def make_peak(
frequency: int,
samplerate: int,
@@ -160,6 +181,7 @@ def make_peak(
return filt


@safe_checks
def make_lowshelf(
frequency: int,
samplerate: int,
@@ -197,6 +219,7 @@ def make_lowshelf(
return filt


@safe_checks
def make_highshelf(
frequency: int,
samplerate: int,