UNPKG

audio-inspect

Version:

Lightweight yet powerful audio analysis library

94 lines (91 loc) 2.83 kB
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 };