Specula app icon

Workflow · Audiobook / ACX

Audiobooks, scored chapter by chapter.

ACX judges audiobooks chapter by chapter, so Specula does too. Chapter mode splits the file, runs a full loudness pass on every chapter, and scores RMS, true peak, and the room-tone noise floor against the ACX spec. Each chapter is also checked against the book's own median loudness, which catches the one pickup that drifted, the kind of miss a whole-file number averages away.

macOS ACX spec Chapter mode Speech-gated LUFS −60 dB noise floor Level Dialogue

7-day trial · one-time purchase · macOS 14+

Specula in Chapter mode: chapter markers on the waveform and a per-chapter table with RMS, true peak and noise floor, one chapter flagged red.
The chapter table. Per-chapter RMS, true peak, and noise floor, with outliers flagged against the book median.

Why ACX rejects audiobooks

ACX checks three things and rejects on any of them. Two are easy to hit; the third is the one that catches people.

Loudness and true peak you can usually eyeball in a DAW. The room-tone noise floor is different: it's inaudible on headphones, invisible on a standard loudness meter, and a common reason an audiobook bounces back. Specula reads all three off the file directly, per chapter.

ACX RMSRMS between −23 and −18 dB, measured per chapter, not just for the file as a whole. ACX checks plain RMS, not K-weighted LUFS, so Specula evaluates RMS here too.
ACX TPTrue peak at or below −3 dBTP, detected on the 4× oversampled inter-sample peak. With the TP threshold parked at −3 dBTP, every breaching block, a stray mouth click, a page-turn thump, shows on the waveform at the spot it happened.
ACX NFRoom-tone noise floor at or below −60 dB RMS, measured over every non-speech sample.

Score the book

Clean the speech map, split the chapters, score everything, export.

book.wav the master Detect split at silences 01 02 03 04 05 06 scored per chapter RMS −23 to −18 · TP ≤ −3 dBTP floor ≤ −60 dB · drift ±2 LU chapter 04 flagged Level chapters brings it back book.wav the master Detect split at silences 01 02 03 04 05 06 scored per chapter RMS −23 to −18 · TP ≤ −3 dBTP floor ≤ −60 dB · drift ±2 LU chapter 04 flagged Level chapters brings it back
The chapter pass. Detect cuts the book at silences; every chapter is scored against the ACX gates and the book median, and the flagged one is one Level chapters move from passing.
1 · Load & clean speech
Drop the file; Silero's neural VAD marks every speech block on load. If a breath, a page turn, or a music bed got mislabelled, fix it in Dialogue mode (⌘4): drag a region, mark I / O, split with S, so the noise floor and speech metrics measure the right samples. Edits auto-save to a .dlg.json sidecar and re-apply next time you open the file.
2 · Split into chapters
Chapter mode (⌘3) → Detect splits the file at silences (default 2 s under −55 dB) into a chapter ribbon. Drag any boundary to correct it, click one and Remove to merge two chapters, rename slots, or import a hand-made layout as a JSON sidecar.
3 · Score every chapter
Analyse Loudness runs a full pass per chapter: RMS, integrated LUFS, true peak, sample peak, noise floor, LRA, max momentary / short-term, speech-gated LUFS, speech %. Each chapter is flagged against the three ACX gates (RMS, true peak, noise floor) and against the book's own median (default ±2 LU on the integrated LUFS).
4 · Hand off the receipt
Export the report: ⌥⌘E for PDF, ⇧⌘E for JSON. The per-chapter table carries the same red-cell signalling the app shows: the exact failing chapters and conditions, ready to send to a narrator or producer as-is.

Per chapter, and against the median

A file-level pass isn't enough for a book. An audiobook can sit at a perfect −20 dB RMS overall while one chapter recorded on a different day drifts to −16, or a single quiet pickup dips under the noise-floor line. ACX checks per chapter, so Specula does too: every chapter gets its own ACX verdict on RMS, true peak, and noise floor.

The outlier flag catches consistency problems the absolute gates miss. Each chapter is compared to the book's own median loudness; anything beyond the tolerance (default ±2 LU) is flagged even if it's technically inside the ACX band. That's how you spot the chapter that will sound jarringly louder to a listener mid-book.

The corrected dialogue regions from step 1 feed straight into this: per-chapter speech-gated LUFS and the noise-floor reading both measure against the speech and silence you confirmed.

Fix what's flagged, in the same app

Each red cell points at its fix, and the two that bounce the most audiobooks have a fix in Edit mode.

Noise floor over −60 dB RMS is a common ACX rejection, and it's the one a uniform gain can't fix, because raising the voice raises the room tone with it. Level Dialogue (Edit mode) attacks it from the other side: using the speech regions you confirmed in step 1, it pushes the tone between phrases down first, then brings the voice to your RMS target, so the floor lands lower while the narration comes up. The trick covers a floor that just misses, a room tone a dB or two over the line; hiss baked into the capture needs a re-record.

A chapter that drifts off the book's loudness is the consistency flag, and Level chapters (Chapter mode → Level…) is the one-move fix: pick the metric (RMS, the ACX one, by default) and the target (the book's own median, or a fixed value such as −20 dB RMS, mid the ACX −23..−18 band, for consistency and compliance at once), and Specula applies a per-chapter gain and re-measures. A true peak over −3 dBTP takes one Limit TP pass, which trims the overshoots without disturbing the chapter levels you just set. Every fix is one undoable edit that writes a new file. See the editing workflow →

In the app

The Level Chapters popover offering an RMS or LUFS metric, a book-median or fixed target, and a true-peak ceiling.
Even out the book. Level every chapter to the book median or a fixed target in one pass.
The same audiobook after Level chapters, with the per-chapter values now inside the ACX window.
After leveling. The same book with every chapter pulled inside the ACX window.
The Level Dialogue popover ducking room tone and lifting dialogue to a target.
Fix the noise floor. Room tone is a common ACX rejection; Level Dialogue ducks it before the gain instead of an external denoiser.
A Specula PDF report showing the per-chapter ACX table with failing cells in red.
A per-chapter receipt. The report carries the ACX table with failing cells in red, ready to hand to a publisher.

Batch a whole series

Skip the app window when you're checking dozens of files.

Everything above also runs headless: the specula CLI drives the app's measurement engine from a script. Score one chapter to a PDF:

$

specula report ch01.wav --mode podcast --format pdf --out ch01.pdf

Or wire the Get Report App Intent into a Folder Action so every new chapter scores itself on save, and a downstream Shortcut step branches on Integrated LUFS or Speech-Gated LUFS directly. Walk the folder, flag the chapters that miss, AirDrop the failures to the narrator. Full command reference in the CLI section of the user guide.

Before you upload

Per chapter, you know which files clear the spec and which won't, and the two flags that bounce the most books each have a one-move fix: Level Dialogue for a marginal room-tone floor, Level chapters for the one that drifts off the book's loudness. Read the numbers, fix the flags, hand off the receipt.