Filters¶
Signalsmith biquad filters, DaisySP SVF/ladder/moog/tone/modal/comb, virtual analog (Faust), and multi-order IIR filters (DspFilters).
Usage examples¶
Biquad filters (signalsmith)¶
from nanodsp.effects import filters
from nanodsp.buffer import AudioBuffer
buf = AudioBuffer.from_file("input.wav")
# Basic filters
lp = filters.lowpass(buf, cutoff_hz=1000.0)
hp = filters.highpass(buf, cutoff_hz=80.0)
bp = filters.bandpass(buf, center_hz=1000.0)
nt = filters.notch(buf, center_hz=50.0) # remove 50 Hz hum
# EQ: boost 3 kHz by 6 dB with 1-octave bandwidth
eq = filters.peak_db(buf, center_hz=3000.0, db=6.0, octaves=1.0)
# Shelving filters
bright = filters.high_shelf_db(buf, cutoff_hz=8000.0, db=3.0)
warm = filters.low_shelf_db(buf, cutoff_hz=200.0, db=2.0)
# Allpass (phase shift without magnitude change)
ap = filters.allpass(buf, freq_hz=1000.0)
# Choose a filter design method
lp_vicanek = filters.lowpass(buf, cutoff_hz=5000.0, design="vicanek")
lp_cookbook = filters.lowpass(buf, cutoff_hz=5000.0, design="cookbook")
DaisySP filters¶
# State variable filter with resonance
lp = filters.svf_lowpass(buf, freq_hz=1000.0, resonance=0.5)
hp = filters.svf_highpass(buf, freq_hz=200.0, resonance=0.3)
bp = filters.svf_bandpass(buf, freq_hz=1000.0, resonance=0.7)
nt = filters.svf_notch(buf, freq_hz=1000.0)
pk = filters.svf_peak(buf, freq_hz=1000.0, resonance=0.8)
# 4-pole ladder filter (Moog-inspired, multiple modes)
lp24 = filters.ladder_filter(buf, freq_hz=800.0, resonance=0.6, mode="lp24")
bp12 = filters.ladder_filter(buf, freq_hz=1200.0, mode="bp12")
hp24 = filters.ladder_filter(buf, freq_hz=200.0, mode="hp24")
# Moog ladder (simplified: cutoff + resonance only)
moog = filters.moog_ladder(buf, freq_hz=1000.0, resonance=0.7)
# Simple 1-pole filters
gentle_lp = filters.tone_lowpass(buf, freq_hz=2000.0)
gentle_hp = filters.tone_highpass(buf, freq_hz=100.0)
# Resonant bandpass for modal synthesis
modal = filters.modal_bandpass(buf, freq_hz=440.0, q=50.0)
# Comb filter
comb = filters.comb_filter(buf, freq_hz=500.0, rev_time=0.5)
Virtual analog filters (Faust)¶
# Moog transistor ladder -- warm, classic
va_moog = filters.va_moog_ladder(buf, cutoff_hz=1000.0, q=2.0)
# Diode ladder -- acidic, TB-303 style
va_diode = filters.va_diode_ladder(buf, cutoff_hz=800.0, q=3.0)
# Korg MS-20 filters
va_korg_lp = filters.va_korg35_lpf(buf, cutoff_hz=1500.0, q=2.0)
va_korg_hp = filters.va_korg35_hpf(buf, cutoff_hz=200.0, q=1.5)
# Oberheim SEM multi-mode
va_ob_lp = filters.va_oberheim(buf, cutoff_hz=2000.0, q=1.0, mode="lpf")
va_ob_hp = filters.va_oberheim(buf, cutoff_hz=500.0, mode="hpf")
va_ob_bp = filters.va_oberheim(buf, cutoff_hz=1000.0, mode="bpf")
va_ob_bs = filters.va_oberheim(buf, cutoff_hz=1000.0, mode="bsf")
Multi-order IIR filters (DspFilters)¶
# Butterworth lowpass, 8th order
steep_lp = filters.iir_filter(
buf, family="butterworth", filter_type="lowpass", order=8, freq=1000.0
)
# Chebyshev Type I highpass, 6th order with 1 dB ripple
cheby = filters.iir_filter(
buf, family="chebyshev1", filter_type="highpass", order=6,
freq=200.0, ripple_db=1.0
)
# Elliptic bandpass, 4th order
ellip = filters.iir_filter(
buf, family="elliptic", filter_type="bandpass", order=4,
freq=1000.0, width=500.0, ripple_db=1.0, rolloff=40.0
)
# Bessel lowpass (best phase linearity)
bessel = filters.iir_filter(
buf, family="bessel", filter_type="lowpass", order=8, freq=5000.0
)
# Get SOS coefficients without applying
import numpy as np
sos = filters.iir_design(
"butterworth", "lowpass", order=4, sample_rate=44100, freq=1000.0
)
API reference¶
filters
¶
Filter functions -- signalsmith biquads, DaisySP, virtual analog, IIR.
lowpass
¶
lowpass(
buf: AudioBuffer,
cutoff_hz: float,
octaves: float | None = None,
design: str | int = "bilinear",
) -> AudioBuffer
Apply a biquad lowpass filter.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
cutoff_hz
|
Cutoff frequency in Hz.
TYPE:
|
octaves
|
Bandwidth in octaves. If None, uses default Q.
TYPE:
|
design
|
Biquad design method (e.g. "bilinear", "one_sided").
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
highpass
¶
highpass(
buf: AudioBuffer,
cutoff_hz: float,
octaves: float | None = None,
design: str | int = "bilinear",
) -> AudioBuffer
Apply a biquad highpass filter.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
cutoff_hz
|
Cutoff frequency in Hz.
TYPE:
|
octaves
|
Bandwidth in octaves. If None, uses default Q.
TYPE:
|
design
|
Biquad design method (e.g. "bilinear", "one_sided").
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
bandpass
¶
bandpass(
buf: AudioBuffer,
center_hz: float,
octaves: float | None = None,
design: str | int = "one_sided",
) -> AudioBuffer
Apply a biquad bandpass filter.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
center_hz
|
Center frequency in Hz.
TYPE:
|
octaves
|
Bandwidth in octaves. If None, uses default Q.
TYPE:
|
design
|
Biquad design method (e.g. "bilinear", "one_sided").
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
notch
¶
notch(
buf: AudioBuffer,
center_hz: float,
octaves: float | None = None,
design: str | int = "one_sided",
) -> AudioBuffer
Apply a biquad notch (band-reject) filter.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
center_hz
|
Center frequency in Hz.
TYPE:
|
octaves
|
Bandwidth in octaves. If None, uses default Q.
TYPE:
|
design
|
Biquad design method (e.g. "bilinear", "one_sided").
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
peak
¶
peak(
buf: AudioBuffer,
center_hz: float,
gain: float,
octaves: float = 1.0,
design: str | int = "one_sided",
) -> AudioBuffer
Apply a biquad peak (bell) filter with linear gain.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
center_hz
|
Center frequency in Hz.
TYPE:
|
gain
|
Linear gain at center frequency.
TYPE:
|
octaves
|
Bandwidth in octaves.
TYPE:
|
design
|
Biquad design method.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
peak_db
¶
peak_db(
buf: AudioBuffer,
center_hz: float,
db: float,
octaves: float = 1.0,
design: str | int = "one_sided",
) -> AudioBuffer
Apply a biquad peak (bell) filter with gain in dB.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
center_hz
|
Center frequency in Hz.
TYPE:
|
db
|
Gain at center frequency in dB.
TYPE:
|
octaves
|
Bandwidth in octaves.
TYPE:
|
design
|
Biquad design method.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
high_shelf
¶
high_shelf(
buf: AudioBuffer,
cutoff_hz: float,
gain: float,
octaves: float | None = None,
design: str | int = "one_sided",
) -> AudioBuffer
Apply a biquad high shelf filter with linear gain.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
cutoff_hz
|
Shelf corner frequency in Hz.
TYPE:
|
gain
|
Linear gain above the shelf frequency.
TYPE:
|
octaves
|
Transition bandwidth in octaves. If None, uses default.
TYPE:
|
design
|
Biquad design method.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
high_shelf_db
¶
high_shelf_db(
buf: AudioBuffer,
cutoff_hz: float,
db: float,
octaves: float | None = None,
design: str | int = "one_sided",
) -> AudioBuffer
Apply a biquad high shelf filter with gain in dB.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
cutoff_hz
|
Shelf corner frequency in Hz.
TYPE:
|
db
|
Gain above the shelf frequency in dB.
TYPE:
|
octaves
|
Transition bandwidth in octaves. If None, uses default.
TYPE:
|
design
|
Biquad design method.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
low_shelf
¶
low_shelf(
buf: AudioBuffer,
cutoff_hz: float,
gain: float,
octaves: float = 2.0,
design: str | int = "one_sided",
) -> AudioBuffer
Apply a biquad low shelf filter with linear gain.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
cutoff_hz
|
Shelf corner frequency in Hz.
TYPE:
|
gain
|
Linear gain below the shelf frequency.
TYPE:
|
octaves
|
Transition bandwidth in octaves.
TYPE:
|
design
|
Biquad design method.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
low_shelf_db
¶
low_shelf_db(
buf: AudioBuffer,
cutoff_hz: float,
db: float,
octaves: float = 2.0,
design: str | int = "one_sided",
) -> AudioBuffer
Apply a biquad low shelf filter with gain in dB.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
cutoff_hz
|
Shelf corner frequency in Hz.
TYPE:
|
db
|
Gain below the shelf frequency in dB.
TYPE:
|
octaves
|
Transition bandwidth in octaves.
TYPE:
|
design
|
Biquad design method.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
allpass
¶
allpass(
buf: AudioBuffer,
freq_hz: float,
octaves: float = 1.0,
design: str | int = "one_sided",
) -> AudioBuffer
Apply a biquad allpass filter.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
freq_hz
|
Center frequency in Hz.
TYPE:
|
octaves
|
Bandwidth in octaves.
TYPE:
|
design
|
Biquad design method.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio (same magnitude, altered phase). |
biquad_process
¶
Process buffer through a pre-configured Biquad, resetting between channels.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
biquad
|
Pre-configured Biquad instance.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
svf_lowpass
¶
svf_lowpass(
buf: AudioBuffer,
freq_hz: float = 1000.0,
resonance: float = 0.0,
drive: float = 0.0,
) -> AudioBuffer
State-variable filter lowpass.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
freq_hz
|
Cutoff frequency in Hz.
TYPE:
|
resonance
|
Resonance amount (0.0 to 1.0).
TYPE:
|
drive
|
Input drive amount.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
svf_highpass
¶
svf_highpass(
buf: AudioBuffer,
freq_hz: float = 1000.0,
resonance: float = 0.0,
drive: float = 0.0,
) -> AudioBuffer
State-variable filter highpass.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
freq_hz
|
Cutoff frequency in Hz.
TYPE:
|
resonance
|
Resonance amount (0.0 to 1.0).
TYPE:
|
drive
|
Input drive amount.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
svf_bandpass
¶
svf_bandpass(
buf: AudioBuffer,
freq_hz: float = 1000.0,
resonance: float = 0.0,
drive: float = 0.0,
) -> AudioBuffer
State-variable filter bandpass.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
freq_hz
|
Center frequency in Hz.
TYPE:
|
resonance
|
Resonance amount (0.0 to 1.0).
TYPE:
|
drive
|
Input drive amount.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
svf_notch
¶
svf_notch(
buf: AudioBuffer,
freq_hz: float = 1000.0,
resonance: float = 0.0,
drive: float = 0.0,
) -> AudioBuffer
State-variable filter notch.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
freq_hz
|
Center frequency in Hz.
TYPE:
|
resonance
|
Resonance amount (0.0 to 1.0).
TYPE:
|
drive
|
Input drive amount.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
svf_peak
¶
svf_peak(
buf: AudioBuffer,
freq_hz: float = 1000.0,
resonance: float = 0.0,
drive: float = 0.0,
) -> AudioBuffer
State-variable filter peak.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
freq_hz
|
Center frequency in Hz.
TYPE:
|
resonance
|
Resonance amount (0.0 to 1.0).
TYPE:
|
drive
|
Input drive amount.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
ladder_filter
¶
ladder_filter(
buf: AudioBuffer,
freq_hz: float = 1000.0,
resonance: float = 0.0,
mode: Literal[
"lp24", "lp12", "bp24", "bp12", "hp24", "hp12"
] = "lp24",
drive: float = 1.0,
) -> AudioBuffer
Ladder filter with selectable mode.
| PARAMETER | DESCRIPTION |
|---|---|
mode
|
One of
TYPE:
|
drive
|
Input drive (multiplier). 1.0 = unity gain (no drive), >1.0 adds saturation.
TYPE:
|
moog_ladder
¶
Moog-style ladder lowpass filter.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
freq_hz
|
Cutoff frequency in Hz.
TYPE:
|
resonance
|
Resonance amount (0.0 to 1.0).
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
tone_lowpass
¶
One-pole lowpass filter (Tone).
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
freq_hz
|
Cutoff frequency in Hz.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
tone_highpass
¶
One-pole highpass filter (ATone).
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
freq_hz
|
Cutoff frequency in Hz.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
modal_bandpass
¶
Modal resonator bandpass filter.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
freq_hz
|
Resonant frequency in Hz.
TYPE:
|
q
|
Quality factor.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
comb_filter
¶
comb_filter(
buf: AudioBuffer,
freq_hz: float = 500.0,
rev_time: float = 0.5,
max_size: int = 4096,
) -> AudioBuffer
Comb filter.
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
freq_hz
|
Comb frequency in Hz.
TYPE:
|
rev_time
|
Reverb time (feedback decay time in seconds).
TYPE:
|
max_size
|
Maximum delay line size in samples.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
va_moog_ladder
¶
Moog Ladder 24 dB/oct lowpass filter (virtual analog).
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
cutoff_hz
|
Cutoff frequency in Hz, > 0 and < Nyquist.
TYPE:
|
q
|
Resonance / Q factor, > 0. Higher values increase resonance at cutoff. Typical: 0.5--10.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
va_moog_half_ladder
¶
Moog Half-Ladder 12 dB/oct lowpass filter (virtual analog).
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
cutoff_hz
|
Cutoff frequency in Hz, > 0 and < Nyquist.
TYPE:
|
q
|
Resonance / Q factor, > 0. Higher values increase resonance at cutoff. Typical: 0.5--10.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
va_diode_ladder
¶
Diode Ladder 24 dB/oct lowpass filter (virtual analog).
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
cutoff_hz
|
Cutoff frequency in Hz, > 0 and < Nyquist.
TYPE:
|
q
|
Resonance / Q factor, > 0. Higher values increase resonance at cutoff. Typical: 0.5--10.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
va_korg35_lpf
¶
Korg 35 24 dB/oct lowpass filter (virtual analog).
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
cutoff_hz
|
Cutoff frequency in Hz, > 0 and < Nyquist.
TYPE:
|
q
|
Resonance / Q factor, > 0. Higher values increase resonance at cutoff. Typical: 0.5--10.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
va_korg35_hpf
¶
Korg 35 24 dB/oct highpass filter (virtual analog).
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
cutoff_hz
|
Cutoff frequency in Hz, > 0 and < Nyquist.
TYPE:
|
q
|
Resonance / Q factor, > 0. Higher values increase resonance at cutoff. Typical: 0.5--10.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
va_oberheim
¶
va_oberheim(
buf: AudioBuffer,
cutoff_hz: float = 1000.0,
q: float = 1.0,
mode: Literal["lpf", "hpf", "bpf", "bsf"] = "lpf",
) -> AudioBuffer
Oberheim multi-mode state-variable filter (virtual analog).
| PARAMETER | DESCRIPTION |
|---|---|
buf
|
Input audio.
TYPE:
|
cutoff_hz
|
Cutoff frequency in Hz, > 0 and < Nyquist.
TYPE:
|
q
|
Resonance / Q factor, > 0. Typical: 0.5--10.
TYPE:
|
mode
|
One of
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
AudioBuffer
|
Filtered audio. |
iir_design
¶
iir_design(
family: str,
filter_type: str,
order: int,
sample_rate: float,
freq: float,
width: float = 0.0,
ripple_db: float = 0.0,
rolloff: float = 0.0,
) -> np.ndarray
Design an IIR filter and return SOS coefficients.
Returns an array of shape [n_sections, 6] where each row is
[b0, b1, b2, a0, a1, a2] with a0 = 1.0.
| PARAMETER | DESCRIPTION |
|---|---|
family
|
Filter family: butterworth/butter, chebyshev1/cheby1, chebyshev2/cheby2, elliptic/ellip, bessel.
TYPE:
|
filter_type
|
Filter type: lowpass/lp, highpass/hp, bandpass/bp, bandstop/bs/notch.
TYPE:
|
order
|
Filter order (1-16).
TYPE:
|
sample_rate
|
Sample rate in Hz.
TYPE:
|
freq
|
Cutoff (LP/HP) or center (BP/BS) frequency in Hz.
TYPE:
|
width
|
Bandwidth in Hz (required for bandpass/bandstop).
TYPE:
|
ripple_db
|
Passband ripple for Chebyshev I / Elliptic (dB). Stopband attenuation for Chebyshev II (dB).
TYPE:
|
rolloff
|
Transition width for Elliptic filters (range approx -16 to 4).
TYPE:
|
iir_filter
¶
iir_filter(
buf: AudioBuffer,
family: str = "butterworth",
filter_type: str = "lowpass",
order: int = 4,
freq: float = 1000.0,
width: float = 0.0,
ripple_db: float = 0.0,
rolloff: float = 0.0,
) -> AudioBuffer
Apply a multi-order IIR filter.
Supports Butterworth, Chebyshev I/II, Elliptic, and Bessel filter families with orders up to 16, in lowpass, highpass, bandpass, and bandstop configurations.
| PARAMETER | DESCRIPTION |
|---|---|
family
|
butterworth/butter, chebyshev1/cheby1, chebyshev2/cheby2, elliptic/ellip, bessel.
TYPE:
|
filter_type
|
lowpass/lp, highpass/hp, bandpass/bp, bandstop/bs/notch.
TYPE:
|
order
|
Filter order (1-16).
TYPE:
|
freq
|
Cutoff or center frequency in Hz.
TYPE:
|
width
|
Bandwidth in Hz (required for bandpass/bandstop).
TYPE:
|
ripple_db
|
Passband ripple (Chebyshev I, Elliptic) or stopband attenuation (Chebyshev II) in dB.
TYPE:
|
rolloff
|
Transition width for Elliptic filters.
TYPE:
|