Skip to content

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
  },
): Measurement

Result 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 — see integratedLufs.
  • 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); -Infinity when 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");