audio-inspect
Version:
Lightweight yet powerful audio analysis library
94 lines (91 loc) • 2.83 kB
TypeScript
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 };