measure
Runs the full analysis in one pass and returns a summary object.
ts
measure(
audio: AudioInput,
sampleRate: number,
options?: {
blockSeconds?: number; // 0.4 for loudness, default 0.5 for analysis blocks
hopSeconds?: number; // 0.1
},
): MeasurementResult shape
ts
interface Measurement {
sr: number; // input sample rate
durationSec: number;
channels: number; // channels after mono→stereo normalization
integratedLufs: number; // -Infinity for silence
truePeakDb: number; // -Infinity for silence
loudnessRange: number; // NaN when no valid short-term blocks
rmsDb: number;
peakDb: number;
crestFactorDb: number;
stereoWidthDb: number; // mean side/mid level per block; -Infinity for mono
bandBalance: {
sub: number; // 0-60 Hz %
low: number; // 60-250 Hz %
mid: number; // 250-4 kHz %
high: number; // 4 kHz+ %
};
}What each field is
integratedLufs— seeintegratedLufs.truePeakDb— peak of the signal oversampled by 4× (≥192 kHz), per BS.1770-4 Annex 2.loudnessRange— BS.1770-4 LRA: spread of the 3 s short-term loudness after discarding the loudest/silent blocks (EBU Tech 3342).rmsDb/peakDb/crestFactorDb— classic amplitude stats (crest = peak − rms).stereoWidthDb— per 500 ms block,10*log10(sidePower/midPower);-Infinitywhen mid ≈ 0.bandBalance— energy share of four bands via a 4th-order Butterworth LPF/HPF cascade.
Errors
Throws for the same invalid inputs as integratedLufs (non-positive sample rate, empty audio), and returns -Infinity / NaN placeholders for silent or degenerate signals rather than throwing mid-measurement.
Example
js
import { measure } from "dsp-audio-metrics";
const r = measure(monoOrChannels, 44100);
console.log(r.integratedLufs.toFixed(2), "LUFS", r.truePeakDb.toFixed(2), "dBTP");