ez-web-audio
Version:
Making the Web Audio API super EZ since 2024.
93 lines • 3.27 kB
TypeScript
import { Effect } from './index';
/**
* All available BiquadFilter types.
*/
export type FilterType = 'lowpass' | 'highpass' | 'bandpass' | 'lowshelf' | 'highshelf' | 'peaking' | 'notch' | 'allpass';
/**
* Options for creating a FilterEffect.
*/
export interface FilterEffectOptions {
/** Filter frequency in Hz (default: 350) */
frequency?: number;
/** Filter Q factor (default: 1) */
q?: number;
/** Filter gain in dB (default: 0) - only used for shelf and peaking filters */
gain?: number;
/** Filter detune in cents (default: 0) */
detune?: number;
}
/**
* 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.
*
* @example
* ```typescript
* 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
* ```
*/
export declare class FilterEffect implements Effect {
private readonly filterNode;
private readonly inputNode;
private readonly outputNode;
private readonly dryGain;
private readonly wetGain;
private _bypass;
private _mix;
constructor(audioContext: AudioContext, type: FilterType, options?: FilterEffectOptions);
/** The input AudioNode (receives signal from chain) */
get input(): AudioNode;
/** The output AudioNode (sends signal to next in chain) */
get output(): AudioNode;
/**
* When true, signal bypasses the filter entirely (100% dry).
*/
get bypass(): boolean;
set bypass(v: boolean);
/**
* Wet/dry mix: 0 = fully dry (no filter), 1 = fully wet (all through filter).
* Uses equal-power crossfade for natural mixing.
*/
get mix(): number;
set mix(v: number);
/** Filter frequency in Hz */
get frequency(): number;
set frequency(v: number);
/** Filter Q factor (resonance) */
get q(): number;
set q(v: number);
/** Filter gain in dB (for shelf and peaking filters) */
get gain(): number;
set gain(v: number);
/** Filter detune in cents */
get detune(): number;
set detune(v: number);
/** The current filter type */
get type(): FilterType;
set type(v: FilterType);
/**
* Apply wet/dry mix using equal-power crossfade.
* cos(angle) for dry, sin(angle) for wet where angle = mix * PI/2
*/
private applyMix;
}
/**
* Factory function to create a FilterEffect.
*
* @param audioContext - The AudioContext to use
* @param type - The filter type (lowpass, highpass, bandpass, etc.)
* @param options - Optional filter parameters
* @returns A new FilterEffect instance
*
* @example
* ```typescript
* const lowpass = createFilterEffect(audioContext, 'lowpass', { frequency: 800 })
* const highpass = createFilterEffect(audioContext, 'highpass', { frequency: 200, q: 2 })
* ```
*/
export declare function createFilterEffect(audioContext: AudioContext, type: FilterType, options?: FilterEffectOptions): FilterEffect;
//# sourceMappingURL=filter-effect.d.ts.map