interface AudioData {
    sampleRate: number;
    channelData: Float32Array[];
    duration: number;
    numberOfChannels: number;
    length: number;
}
interface BiquadCoeffs {
    b0: number;
    b1: number;
    b2: number;
    a0: number;
    a1: number;
    a2: number;
}

interface LUFSOptions {
    channelMode?: 'mono' | 'stereo';
    gated?: boolean;
    calculateShortTerm?: boolean;
    calculateMomentary?: boolean;
    /**
     * Collect frame series in offline analysis.
     * - true / 'both': collect both short-term and momentary series
     * - 'shortTerm': collect only short-term series
     * - 'momentary': collect only momentary series
     */
    collectSeries?: boolean | 'shortTerm' | 'momentary' | 'both';
    calculateLoudnessRange?: boolean;
    calculateTruePeak?: boolean;
    /**
     * 'bs1770' uses the Annex 2 polyphase FIR true-peak estimator.
     * 'interSamplePeak' keeps the legacy interpolation-based estimate.
     */
    truePeakMethod?: 'bs1770' | 'interSamplePeak';
    /**
     * For 'bs1770', supported values are 2 or 4.
     * For 'interSamplePeak', 2/4/8 are supported.
     */
    truePeakOversamplingFactor?: 2 | 4 | 8;
    truePeakInterpolation?: 'linear' | 'cubic' | 'sinc';
}
interface LUFSResult {
    integrated: number;
    shortTerm?: number;
    momentary?: number;
    loudnessRange?: number;
    truePeak?: number[];
    statistics?: {
        percentile10: number;
        percentile95: number;
    };
    series?: {
        times: Float32Array;
        shortTerm?: Float32Array;
        momentary?: Float32Array;
    };
}
declare function getKWeightingCoeffs(sampleRate: number): BiquadCoeffs[];
declare function getLUFS(audio: AudioData, options?: LUFSOptions): LUFSResult;
declare class RealtimeLUFSProcessor {
    private sampleRate;
    private channelMode;
    private blockSize;
    private hopSize;
    private blockBuffer;
    private maxBlocks;
    private currentSamples;
    private filterStage1Scratch;
    private filterStage2Scratch;
    private sampleCount;
    private biquadStates;
    private totalSamplesProcessed;
    private gated;
    constructor(sampleRate: number, channelMode?: 'mono' | 'stereo', maxDurationMs?: number, gated?: boolean);
    private ensureFilterScratchCapacity;
    process(chunk: Float32Array[]): {
        integrated: number;
        momentary: number;
        shortTerm: number;
    };
    private calculateCurrentLUFS;
    reset(): void;
    getBufferSize(): number;
}
interface RealtimeLUFSOptions {
    channelMode?: 'mono' | 'stereo';
    gated?: boolean;
    maxDurationMs?: number;
}
declare function getLUFSRealtime(sampleRate: number, options?: RealtimeLUFSOptions): RealtimeLUFSProcessor;

export { type LUFSOptions, type LUFSResult, type RealtimeLUFSOptions, getKWeightingCoeffs, getLUFS, getLUFSRealtime };
