EZ Web Audio / FilterEffect
Class: FilterEffect
Defined in: packages/core/src/effects/filter-effect.ts:52
FilterEffect - A wrapper around BiquadFilterNode that implements the Effect interface.
Supports all 8 BiquadFilter types with wet/dry mixing via equal-power crossfade. The bypass and mix controls allow smooth blending between filtered and dry signal.
Extends BaseEffect for shared wet/dry mixing, bypass, and rampTo() functionality.
Example
const filter = createFilterEffect(audioContext, 'lowpass', { frequency: 800, q: 2 })
filter.frequency = 1000 // Adjust cutoff
filter.mix = 0.5 // 50% wet/dry
filter.bypass = true // Bypass filter entirely
filter.rampTo('frequency', 2000, 1) // Smooth ramp over 1 secondExtends
Constructors
Constructor
new FilterEffect(
audioContext,type,options):FilterEffect
Defined in: packages/core/src/effects/filter-effect.ts:62
Parameters
audioContext
AudioContext
type
options
FilterEffectOptions = {}
Returns
FilterEffect
Overrides
Accessors
bypass
Get Signature
get bypass():
boolean
Defined in: packages/core/src/effects/base-effect.ts:95
When true, signal bypasses the effect entirely (100% dry).
Returns
boolean
Set Signature
set bypass(
v):void
Defined in: packages/core/src/effects/base-effect.ts:99
When true, effect is bypassed (passthrough)
Parameters
v
boolean
Returns
void
When true, effect is bypassed (passthrough)
Inherited from
detune
Get Signature
get detune():
number
Defined in: packages/core/src/effects/filter-effect.ts:136
Filter detune in cents
Returns
number
Set Signature
set detune(
v):void
Defined in: packages/core/src/effects/filter-effect.ts:140
Parameters
v
number
Returns
void
frequency
Get Signature
get frequency():
number
Defined in: packages/core/src/effects/filter-effect.ts:91
Filter frequency in Hz. Clamped to [0, sampleRate / 2] (Nyquist) — BiquadFilterNode.frequency is spec'd over that range; anything outside it is meaningless (and some implementations clamp/misbehave silently).
Returns
number
Set Signature
set frequency(
v):void
Defined in: packages/core/src/effects/filter-effect.ts:95
Parameters
v
number
Returns
void
gain
Get Signature
get gain():
number
Defined in: packages/core/src/effects/filter-effect.ts:121
Filter gain in dB. Only affects lowshelf, highshelf, and peaking filter types — the other 5 types (lowpass, highpass, bandpass, notch, allpass) ignore gain entirely per the Web Audio spec. Setting gain on one of those types is a silent no-op audibly; a dev warning is emitted to catch the mistake early.
Returns
number
Set Signature
set gain(
v):void
Defined in: packages/core/src/effects/filter-effect.ts:125
Parameters
v
number
Returns
void
input
Get Signature
get input():
AudioNode
Defined in: packages/core/src/effects/base-effect.ts:83
The input AudioNode (receives signal from chain)
Returns
AudioNode
The input AudioNode that receives signal from the chain
Inherited from
mix
Get Signature
get mix():
number
Defined in: packages/core/src/effects/base-effect.ts:108
Wet/dry mix: 0 = fully dry (no effect), 1 = fully wet (all through effect). Uses equal-power crossfade for natural mixing.
Returns
number
Set Signature
set mix(
v):void
Defined in: packages/core/src/effects/base-effect.ts:112
Wet/dry mix: 0 = fully dry (no effect), 1 = fully wet (full effect)
Parameters
v
number
Returns
void
Wet/dry mix: 0 = fully dry (no effect), 1 = fully wet (full effect)
Inherited from
output
Get Signature
get output():
AudioNode
Defined in: packages/core/src/effects/base-effect.ts:88
The output AudioNode (sends signal to next in chain)
Returns
AudioNode
The output AudioNode that sends signal to the next in chain
Inherited from
q
Get Signature
get q():
number
Defined in: packages/core/src/effects/filter-effect.ts:105
Filter Q factor (resonance). Floored just above 0 — a Q of exactly 0 (or negative) is undefined/unstable for resonant filter types (bandpass/notch/peaking).
Returns
number
Set Signature
set q(
v):void
Defined in: packages/core/src/effects/filter-effect.ts:109
Parameters
v
number
Returns
void
type
Get Signature
get type():
FilterType
Defined in: packages/core/src/effects/filter-effect.ts:156
The current filter type.
Hard-cut, not a crossfade: changing type reconfigures the BiquadFilterNode's internal coefficients instantly — there is no ramp/interpolation between the old and new filter response. If audio is actively flowing through this effect when the type changes, expect an audible discontinuity (click/thump), the same class of pop that curve-swap effects (e.g. DistortionEffect) have. Wrap the change in a mix fade-to-0 / fade-back-to-target if that's audible in context.
Returns
Set Signature
set type(
v):void
Defined in: packages/core/src/effects/filter-effect.ts:160
Parameters
v
Returns
void
Methods
_clearListeners()
protected_clearListeners():void
Defined in: packages/core/src/events/typed-event-emitter.ts:192
Remove every listener registered through this emitter (via addEventListener(), on(), or once()), regardless of how many or what event type they're bound to.
Native EventTarget has no removeAllListeners(). This works around that by aborting a shared AbortSignal threaded through every addEventListener() call this class makes, then swapping in a fresh AbortController so the instance can keep accepting new listeners afterward (e.g. if it's reused before being garbage collected).
Subclasses call this from their dispose() alongside neutering dispatchEvent — the neuter stops future emits, this stops stale listener closures from being retained/invoked at all.
Returns
void
Inherited from
addEventListener()
Call Signature
addEventListener<
K>(type,listener,options?):void
Defined in: packages/core/src/events/typed-event-emitter.ts:44
Add a typed event listener for known event types. Overloaded to provide type safety for known event types while remaining compatible with the native EventTarget API.
Type Parameters
K
K extends "dispose"
Parameters
type
K
The event type (key of TMap)
listener
(event) => void
Typed event handler
options?
Standard addEventListener options
boolean | AddEventListenerOptions
Returns
void
Inherited from
Call Signature
addEventListener(
type,listener,options?):void
Defined in: packages/core/src/events/typed-event-emitter.ts:49
Add a typed event listener for known event types. Overloaded to provide type safety for known event types while remaining compatible with the native EventTarget API.
Parameters
type
string
The event type (key of TMap)
listener
Typed event handler
EventListenerOrEventListenerObject | null
options?
Standard addEventListener options
boolean | AddEventListenerOptions
Returns
void
Inherited from
dispose()
dispose():
void
Defined in: packages/core/src/effects/filter-effect.ts:164
Disconnect all internal audio nodes and emit a 'dispose' event.
Subclass disposal contract: Subclasses that create additional audio nodes (e.g., BiquadFilterNode, DynamicsCompressorNode, WaveShaperNode) MUST override dispose() to disconnect those nodes before calling super.dispose().
Returns
void
Example
public override dispose(): void {
try { this.myNode.disconnect() } catch { /* already disconnected */ }
super.dispose()
}Idempotent — safe to call multiple times.
Overrides
emit()
protectedemit<K>(type,detail):void
Defined in: packages/core/src/events/typed-event-emitter.ts:95
Emit a typed event with the given detail.
Creates a CustomEvent with the provided detail and dispatches it on this target. Subclasses call this internally to fire lifecycle events.
Type Parameters
K
K extends "dispose"
Parameters
type
K
The event type to emit (key of TMap)
detail
BaseEffectEventMap[K]["detail"]
The event detail object (typed by TMap)
Returns
void
Inherited from
getAudioContext()
getAudioContext():
AudioContext
Defined in: packages/core/src/effects/base-effect.ts:121
Get the AudioContext used by this effect. Useful for external tools (e.g., LFO) that need the context.
Returns
AudioContext
Inherited from
getAudioParam()
protectedgetAudioParam(name):AudioParam|null
Defined in: packages/core/src/effects/filter-effect.ts:172
Map a parameter name to its underlying AudioParam. Subclasses implement this to expose their effect-specific parameters.
Parameters
name
string
The parameter name
Returns
AudioParam | null
The AudioParam, or null if not recognized
Overrides
getParam()
getParam(
name):AudioParam|null
Defined in: packages/core/src/effects/base-effect.ts:134
Get a named AudioParam from this effect for external modulation.
Delegates to the subclass's getAudioParam() implementation. Returns null if the parameter name is not recognized.
Parameters
name
string
The parameter name (e.g., 'frequency', 'time', 'feedback')
Returns
AudioParam | null
The AudioParam, or null if not recognized
Inherited from
getUnrampableParams()
protectedgetUnrampableParams(): readonlystring[]
Defined in: packages/core/src/effects/base-effect.ts:243
Names of documented effect properties that are NOT backed by a single AudioParam (e.g. WaveShaper curve swaps, multi-node comb/allpass networks) and therefore cannot be smoothly ramped via rampTo(). rampTo() warns instead of silently no-op-ing when called with one of these names, so callers don't mistake "no-op" for "it worked."
Default: none. Subclasses override where applicable.
Returns
readonly string[]
Inherited from
BaseEffect.getUnrampableParams
off()
off<
K>(type,listener):this
Defined in: packages/core/src/events/typed-event-emitter.ts:167
Unsubscribe from an event.
Note: Due to native EventTarget limitations, you must provide the same listener function reference that was used when subscribing.
Type Parameters
K
K extends "dispose"
Parameters
type
K
The event type to unsubscribe from
listener
(event) => void
The event handler function to remove
Returns
this
this for chaining
Example
const handler = (e) => console.log(e.detail)
emitter.on('play', handler)
// later...
emitter.off('play', handler)Inherited from
on()
on<
K>(type,listener):this
Defined in: packages/core/src/events/typed-event-emitter.ts:116
Subscribe to one or more events. Supports chaining.
Type Parameters
K
K extends "dispose"
Parameters
type
The event type(s) to subscribe to (key or array of keys of TMap)
K | K[]
listener
(event) => void
The event handler function
Returns
this
this for chaining
Example
emitter.on('play', handlePlay).on('stop', handleStop)
emitter.on(['play', 'stop'], handleBoth)Inherited from
once()
once<
K>(type,listener):this
Defined in: packages/core/src/events/typed-event-emitter.ts:141
Subscribe to an event once. Handler is removed after first invocation.
Type Parameters
K
K extends "dispose"
Parameters
type
K
The event type to subscribe to
listener
(event) => void
The event handler function
Returns
this
this for chaining
Example
emitter.once('end', () => console.log('Finished'))Inherited from
onParamRamped()
protectedonParamRamped(param,value):number
Defined in: packages/core/src/effects/filter-effect.ts:188
ramp-setter-desync fix: rampTo('frequency'/'q', ...) re-applies the same clamps the property setters use so the getter and AudioParam can never diverge; gain/detune have no range restriction so they pass through (matching their setters).
Parameters
param
string
value
number
Returns
number
Overrides
rampTo()
rampTo(
param,value,duration):void
Defined in: packages/core/src/effects/base-effect.ts:164
Smoothly ramp a parameter to a target value over a duration.
Uses AudioParam.setTargetAtTime for glitch-free transitions. If the parameter name is not recognized, this is a no-op (a console.warn is emitted if the name is a real, documented effect property that just isn't backed by a single AudioParam — see getUnrampableParams).
Single write path: every ramped write is funneled through onParamRamped, the same hook subclasses use to keep their shadow getters honest. This guarantees effect.someParam reflects the ramp target immediately after calling rampTo(), and that the exact same validation/clamping a synchronous property-set would apply is also applied to ramped writes — the AudioParam and the getter can never diverge from each other.
Parameters
param
string
Parameter name (e.g., 'frequency', 'time', 'feedback')
value
number
Target value
duration
number
Ramp duration in seconds
Returns
void
Example
delay.rampTo('time', 0.5, 2) // Ramp delay time to 0.5s over 2 seconds
filter.rampTo('frequency', 800, 1) // Ramp cutoff to 800Hz over 1 secondInherited from
removeEventListener()
Call Signature
removeEventListener<
K>(type,listener,options?):void
Defined in: packages/core/src/events/typed-event-emitter.ts:70
Remove a typed event listener for known event types. Overloaded to provide type safety for known event types while remaining compatible with the native EventTarget API.
Type Parameters
K
K extends "dispose"
Parameters
type
K
The event type (key of TMap)
listener
(event) => void
Typed event handler to remove
options?
Standard removeEventListener options
boolean | EventListenerOptions
Returns
void
Inherited from
BaseEffect.removeEventListener
Call Signature
removeEventListener(
type,listener,options?):void
Defined in: packages/core/src/events/typed-event-emitter.ts:75
Remove a typed event listener for known event types. Overloaded to provide type safety for known event types while remaining compatible with the native EventTarget API.
Parameters
type
string
The event type (key of TMap)
listener
Typed event handler to remove
EventListenerOrEventListenerObject | null
options?
Standard removeEventListener options
boolean | EventListenerOptions
Returns
void