A meter that can prove its own numbers.
crête measures TT Dynamic Range, EBU R128 integrated loudness, true peak, PLR, PSR and LRA on lossless audio — and every figure it prints is gated weekly against an external reference implementation. The name is French for crest: the origin of the audio term crest factor.
01 — What it is for
The loudness war is a measurable crime. This is the evidence kit.
Thirty years of masters pushed to the ceiling left a catalogue of records with no dynamics left in them — brickwalled, distorted, exhausting after twenty minutes. A dynamic range figure is the cheapest way to see it, which is why a DR number is only worth having if it is correct.
Most meters hand you a number and no way to check it. crête's whole design premise is the opposite: every metric names the specification that governs it, every algorithmic choice that the specification does not cover is stated as a choice rather than smuggled in, and the whole corpus is re-measured against an external commercial reference every week.
Lossy audio sold as hi-res
crête detects MQA and reports it unconditionally — there is no flag to enable it and none to suppress it. If you are measuring dynamic range, you are entitled to know the source is not lossless.
Playback-time compressors in the signal path
AC-3 and E-AC-3 carry Dolby DRC metadata and most decoders apply it by default. That is right for a player and wrong for a meter. crête pins drc_scale=0; leaving it on moved peak by 6.2 dB on one measured 5.1 bed.
Numbers with no oracle behind them
The reference tool, MAAT DROffline, is closed — you cannot audit it. So crête never trusts one oracle: a second independent implementation, analytic synthetics, and crête-vs-crête control suites all have to agree before a number is believed.
02 — What it measures
Every metric, and the standard that governs it
Reported per track and per channel. The tags are printed in the output itself and carried in
the JSON standards map, so a measurement records its own provenance.
| Metric | Governing standard | Definition as implemented |
|---|---|---|
| DR (PMF) | TT Dynamic Range PMF | Mean of the per-channel DR values, rounded once. Per channel: 2nd-highest block peak over the quadratic mean of that channel’s loudest 20 % of 3 s blocks. |
| Integrated loudness | ITU-R BS.1770-4 / EBU R128 ITU | K-weighting via hardcoded biquads, absolute gate −70 LUFS, relative gate −10 LU below the ungated mean. |
| True peak | ITU-R BS.1770-4 | 4× polyphase FIR, 12 taps per phase, per channel; the joint figure takes the scored channels, matching the joint sample peak. Clamped to ≥ the sample peak, which the standard requires by definition. |
| Max M / Max S | EBU Tech 3341 | 400 ms momentary at 75 % overlap; 3 s short-term at 67 % overlap, on one shared 0.1 s hop grid. |
| LRA | EBU Tech 3342 | Relative gate at −20 LU. Passes all six official compliance vectors within ±1 LU. |
| PLR | Loudness-ratio convention AES | min(max true peak, 0) − LUFSi, clamped to match reference behaviour on over-full-scale material. |
| Min PSR | AES eBrief 373 | 3 s window sample peak minus its BS.1770-4 short-term loudness, minimum over the track, −50 LUFS floor. |
| Crest factor | — | Peak over RMS, per channel and joint. |
Where a standard stops, crête says so rather than implying coverage. TT DR defines nothing past stereo, so the multichannel rule is documented as a chosen rule and shipped alongside two companion figures instead of one number presented as authoritative.
03 — Reading a DR score
Five bands, and what they sound like
Classical, jazz, vinyl-era. Full dynamic expression.
Well-mastered releases and high-quality remasters.
Typical commercial release. Adequate for most genres.
Heavily limited. Loudness-war casualty. Listening fatigue likely.
Severely clipped. Near-constant loudness, no dynamics. Distorted.
Standard output — crete -f std
------------------------------------------------ Analyzed Folder: /Music/Random Access Memories ------------------------------------------------ DR Peak RMS Filename ------------------------------------------------ DR11 -1.77 dB -17.31 dB 01. Horizon Ouverture.wav DR10 -0.01 dB -12.91 dB 02. Horizon (Japan CD).wav DR9 over -10.56 dB 03. GLBTM (Outtakes).wav ------------------------------------------------ Number of Files: 9 Official DR Value: DR9 ================================================
Compatible with the dr.loudness-war.info submission format. Four further formats: foobar, ext (26-column parity table), detail, and json.
04 — The application
A GUI that is the same measurement, not a lighter one
crete-gui is Dear ImGui over SDL2 and OpenGL, laid out as horizontal bands:
source bar, DSD strip, verdict band, a DR meter-bar table and a grouped detail panel.
Drag-and-drop, native file and folder dialogs, sortable results, light and dark shells.
Since 0.16.1 both front-ends expand an input path through one collector, so
a folder cannot mean different things depending on which one opened it: cue sheets slice
per TRACK, an SACD .iso lists its TOC behind an area selector, and
a multi-stream Blu-ray raises a stream picker before the run rather than a warning after
it. Tracks list in album order — sorting changes the view, never the order or the
selection.
An album's files are decoded and analysed across a thread pool fitted to the host's free memory as well as its cores — since 0.19.0 the same plan the CLI makes, with a note in the log when memory is what limits it — order-preserving and verified bit-identical to a sequential run: around 5–6× faster on a typical album, with no number moved. Log writing is opt-in; by default results stay in the window.
Appears only for DSD sources; exposes chain, filter and output rate. Picking Direct auto-restricts the other two to the one valid combination.
Per-channel meter bars with the lowest scored channel in accent and the LFE greyed as unscored.
The measurement standard behind each metric, and the full decimation support matrix, in the app. About also pins the two axes the GUI does not expose.
Where a stream declares one, the detail panel names it — and an immersive carrier says which bed the numbers describe.




05 — Build
Three CLI tiers, one GUI. The default has nothing to install.
A single translation unit, no external libraries, no build step beyond make.
Optional tiers layer on top and never enter the default path. The FFmpeg tiers are also
packaged, as crete and crete-gui: for openSUSE, Fedora, Debian,
Ubuntu and Arch, for macOS through a Homebrew tap, and for Windows through Scoop.
git clone https://codeberg.org/abksh/Crete
cd Crete
make # zero-dep CLI
./crete /path/to/album/ | Target | Binary | Adds |
|---|---|---|
make | crete | Core analysis, text output formats. No dependencies. |
make cli-json | crete | -f json; header auto-fetched once. |
make cli-json-ffmpeg | crete-ffmpeg | ALAC, MP3, AAC, Opus, TrueHD, DTS-HD MA, AC-3, DVD title sets, and the codec profile. |
make gui | crete-gui | SDL2 + Dear ImGui drag-and-drop app. |
make gui-ffmpeg | crete-gui-ffmpeg | Both of the above. |
06 — Reach
What it reads, on how many channels, and where it runs
crête is validated against MAAT DROffline and was cross-checked against foobar2000's DR Meter, so on a stereo PCM album the three should agree — that is the whole point of the weekly run, and where they still differ, the Testing page names the metric and the size of the gap.
The difference is in reach. A reference that reads two channels cannot gate a 5.1 figure, and a meter that is one binary with no dependencies can be run on an architecture nobody has shipped a build for. Below is where crête goes further, and the suite that holds each claim up.
WAV, RF64/BW64, Wave64, AIFF, AIFF-C
sowt, FLAC, DSF, DFF and SACD .iso — DST-compressed areas included — all decoded by crête’s own code in every build, with no libFLAC and no libsndfile. The FORMAT suite transcodes six albums every way and requires Δ 0.000 across all of them; CUE slicing is held to the same figure against the equivalent per-track album.Per-channel DR, peak, true peak, RMS and loudness with BS.1770-4 weighting, the LFE measured in full but not scored, and the multichannel rule stated as a chosen rule rather than implied. SURROUND runs 1620 comparisons, QUADIO 240 with zero flags, DTSX 350. The MAAT reference rows crête holds carry at most two channels, which is why those suites are gated against stems — there is no external oracle for a 5.1 figure. Since 0.21.0 a declared channel mask sets the labels, LFE and weights for layouts the count cannot express, such as Auro-3D 8.0 and 9.1; the corpus holds no such file, so that path is gated by a synthetic self-check, not by the weekly.
Both Linux agents build natively and their JSON is compared field by field: 273 fields at 0.000e+00 on the lossless carriers. It needs
-ffp-contract=off — without it the compiler fuses multiply-add on the architecture that has an FMA instruction and not on the one that does not, and the K-weighting biquads diverge at ULP level. macOS is one ULP away on log10, and the site says so rather than claiming three platforms agree.Not built, not scheduled, and no number behind it yet. It is worth doing for the same reason aarch64 was: bit-identity is only a claim until a machine that rounds differently has to agree, and a third instruction set is the cheapest remaining test of it. It joins the weekly cross-architecture gate or it does not count.
The default build is a single C++17 translation unit with no external libraries and no build step beyond
make; STATIC=1 links it fully. MIT plus BSD-2-Clause for the DSD engine, so the whole measurement path can be read, audited and rebuilt — which is the one thing a closed reference cannot offer, however good its numbers are.Since 0.17.0 crête verifies FLAC frame CRC-8 and CRC-16, checks every declared length against what actually decoded, and rejects a sample peak above 0 dBFS on integer PCM as arithmetically impossible. The file is still measured — crête is a meter, not a repair tool — but every affected number is flagged, listed in JSON under a
warnings array that is always present, and reflected in exit code 2. Before this, a FLAC with one bad sector took an album from DR13 to DR9 at a sample peak of +48.16 dBFS and exited 0.AC-3 and E-AC-3 carry Dolby DRC metadata and most decoders apply it by default — right for a player, wrong for a meter. crête pins
drc_scale=0. Leaving it on moved peak by 6.2 dB on one JOC 5.1 bed. Atmos and DTS:X are decoded as their channel bed and the output says so, because there is no renderer in the chain and a bed measurement is not an Atmos measurement.07 — Known limitations
What crête does not do, stated before you find out
Nothing below is hidden in a footnote elsewhere. Every one of these is an open item with a measurement behind it, and the Testing page carries the numbers.
All limitations in detail.5 boundary by 0.020 dB and is an accuracy question, not a rate one..dsf extracted from the same disc, is written but is not running in CI.The whole point
Every number has an oracle. Anything else is a vibe with a decimal point.
Reference-validated, deterministic, bit-reproducible across architectures. Where no reference exists, crête declines to invent one — it states the rule, reports the companion figures, and tells you what it could not check.
See how it is gated →