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