Loudness accuracy: method & results

Meter Core v0.7.7's integrated-loudness readings (LUFS-I) were cross-checked against FFmpeg's EBU R128 loudness measurement, using a scripted, reproducible test set. This page is the receipt: every command, file hash and per-case number behind the claim.

Result: across 8 cases at 44.1, 48 and 96 kHz, the worst-case disagreement was 0.05 LU (mean 0.03 LU).

Reference & commands

Reference readings were taken with ffmpeg version 8.1.1. FFmpeg's loudnorm and ebur128 filters are implementations of EBU R128 loudness measurement (not an official reference implementation). Two independent FFmpeg paths were run per file and agreed within 0.07 LU on every case:

ffmpeg -hide_banner -nostats -i FILE -af loudnorm=print_format=json -f null -   # primary
ffmpeg -hide_banner -nostats -i FILE -filter_complex ebur128=peak=true -f null - # corroboration

In plain English: each audio file was measured twice by FFmpeg — a free, widely trusted audio tool used across the industry — using two of its separate loudness analyzers. Those readings became the benchmark; Meter Core then measured the same files, and the table below shows how closely the numbers agree. Anyone with FFmpeg installed can paste these commands and reproduce the benchmark themselves.

Test set

Two full mixes plus six synthetic signals designed so a wrong implementation cannot pass: calibrated 997 Hz stereo anchor tones whose integrated loudness is derived from ITU-R BS.1770's own calibration statement (near-exact by construction; FFmpeg read every anchor within 0.05 LU of its target), K-curve tones at 100 Hz and 10 kHz that verify the weighting-filter shape across the spectrum, and a loud/quiet/silence program that exercises both BS.1770 gates.

Meter Core capture protocol

Logic Pro, Meter Core v0.7.7 alone on an otherwise-empty stereo output, project sample rate matched to each file, meters reset per pass, one full uninterrupted playback per file, values taken from the plugin's CSV analysis export. Buffer-size independence was verified by re-running the −23 LUFS anchor at I/O buffers of 32 and 1024 samples: identical readings (−23.03 both).

Per-case results

CaseRateLengthSHA-256 (first 12)FFmpeg I (LUFS)Meter Core IΔ (LU)
Full mix — "GULLY" master (D&B)48 kHz191 s79e7fcaa20f2-11.44-11.39+0.05
Full mix — AutoFactory promo48 kHz67 s22243def6504-12.27-12.22+0.05
Anchor tone 997 Hz @ −23 LUFS target48 kHz30 s59312d87b425-23.05-23.06-0.01
Anchor tone 997 Hz @ −14 LUFS target44.1 kHz30 s3b3a5e8f4e12-14.05-14.05+0.00
Anchor tone 997 Hz @ −23 LUFS target96 kHz30 see4baa9a59c0-23.05-23.04+0.01
K-curve tone 100 Hz48 kHz30 s59751a6d8dd6-21.85-21.87-0.02
K-curve tone 10 kHz48 kHz30 s6dad4527da31-16.65-16.69-0.04
Gating program (loud/quiet/silence/loud)48 kHz60 sf0224bb68eda-13.18-13.22-0.04

Worst-case |Δ| = 0.05 LU · mean |Δ| = 0.03 LU.

Scope — what this does and doesn't cover

Full raw artifacts (per-case JSON, capture CSVs) are archived internally with the hashes above; if you'd like the complete data set to check the working, email hello@autofactory.ai.

← Meter Core — free download