@audio/filter-biquad
v2.0.1
Published
Audio-facing biquad filters — highpass, lowpass, bandpass, notch, allpass (Hz/Q params, per-channel state)
Readme
@audio/filter-biquad

Audio-facing biquad filters — highpass, lowpass, bandpass, notch, allpass (Hz/Q params, per-channel state)
npm install @audio/filter-biquadimport { highpass, lowpass, bandpass, notch, allpass } from '@audio/filter-biquad'Hz/Q-parameterized wrappers over the shared @audio/biquad kernel — one call per filter shape, coefficients recomputed only when fc/Q/fs/order actually change, state cached on the params object.
lowpass(buffer, { fc: 2000, fs: 44100 }) // 2nd-order (default) — no registration needed
highpass(buffer, { fc: 80, fs: 44100 }) // rumble filter
bandpass(buffer, { fc: 1000, Q: 5, fs: 44100 }) // narrow band
notch(buffer, { fc: 50, Q: 30, fs: 44100 }) // remove 50 Hz mains hum
allpass.first(buffer, { a: 0.5 }) // 1st-order, coefficient a
allpass.second(buffer, { fc: 1000, Q: 1, fs: 44100 }) // 2nd-order, center fc, quality Qlowpass/highpass default to a 2nd-order RBJ biquad ($-12,\text{dB/oct}$). For 4th-order-and-up Butterworth cascades, register a designer once — kept out of the default import so the common 2nd-order case stays dependency-free:
import butterworth from 'digital-filter/iir/butterworth.js'
lowpass.useButterworth(butterworth) // once, before any order > 2 call
lowpass(buffer, { fc: 2000, order: 4, fs: 44100 }) // 4th-order Butterworth, -24 dB/oct| Function | Param | Default | |
|---|---|---|---|
| lowpass, highpass | fc | — | required, Hz |
| | order | 2 | 2 = RBJ biquad; 4+ = Butterworth (needs useButterworth) |
| | Q | 0.707 | quality factor (1/√2, maximally flat) |
| | fs | 44100 | sample rate, Hz |
| bandpass | fc | — | required, center Hz |
| | Q | 0.707 | narrower band = higher Q (differs from the raw @audio/biquad kernel's default of 1) |
| | fs | 44100 | sample rate, Hz |
| notch | fc | — | required, null frequency Hz |
| | Q | 30 | notch width — lower (e.g. 5) is wider |
| | fs | 44100 | sample rate, Hz |
| allpass.first | a | — | required, pole at z = −a |
| allpass.second | fc, Q, fs | — / 0.707 / 44100 | RBJ cookbook allpass |
Pass the same params object on every call to persist state across blocks:
let params = { fc: 1000, fs: 44100 }
for (let buf of stream) lowpass(buf, params)Use when: building an audio-facing biquad filter (Hz/Q, not raw SOS coefficients); bypass this and use @audio/biquad directly when you already have coefficients or need cascade/analysis primitives.
Part of @audio/filter — the filter family umbrella. This README is generated from the umbrella docs.
MIT © audiojs
