Version 1.0.1
A pro-grade audio analyser for macOS. Load any file and see what's actually in it: every loudness number broadcasters and streamers care about, every spectral detail, every phase relationship between channels. Compare up to six masters at once with sample-accurate alignment and A−B residuals. Make non-destructive edits and ship.
Why Specula
Most engineers ship masters they can't fully see. Specula shows the file end-to-end, in numbers and in pictures, before it leaves your hands.
The blind-spot problem. A master can sound right on your monitors and still fail at delivery. Spotify rejects it because integrated LUFS overshoots by half a dB. Apple Music dims it. A streaming dialog mix lands four LU under Netflix's speech-gated target. A "stereo" file is secretly mono on the verses and out-of-phase in the bridge. Most of these failures are visible in numbers the file already contains; you just need a tool that reads them out instead of leaving you to guess.
The A/B problem. Was rev 4 actually better than rev 3, or just half a dB louder? When you can't level-match precisely, you can't trust the comparison, and you definitely can't see what changed. Specula loads up to six versions side-by-side, normalises them by integrated LUFS, optionally inverts polarity, and computes a sample-accurate residual. What's different between two takes becomes its own waveform you can solo, scrub, and export.
The verification problem. "Looks fine in the DAW" isn't a deliverable. Specula gives you one place to confirm the loudness numbers, the true-peak ceiling, the streaming-platform compliance, the phase relationships, and the spectral content of the master that actually leaves your studio, before it leaves.
Built for your workflow
Eight jobs · one engineSpecula isn't one meter. It's the pass you make before a file leaves your studio. Find your job; each is a path through the same engine.
Confirm a master is delivery-ready, with the per-platform gain each streaming service will apply.
→A/B up to six versions, level-matched and auto-aligned, then hear the A−X diff as its own waveform.
→A hard pass/fail per target for streaming and broadcast, with a PDF receipt.
→Dialog-gated loudness with neural speech detection you can hand-correct.
→Per-chapter QC: catch every ACX rejection condition before you upload.
→Trim, cut, fade, normalize to a LUFS target, level dialogue, no DAW. Keyboard-driven, always saved as a new file.
→Score a whole folder unattended with the specula CLI and chainable App Intents.
Verify multichannel order and BS.775 / Pro Logic II fold-downs, PRE or POST.
→Spoken-word work is where Specula goes deepest
Neural speech detection you can hand-correct, dialog-gated targets for every major platform, and per-chapter ACX scoring, the things generalist meters skip.
Everything it measures
The at-a-glance reference behind the workflows above: every measurement, on every file you load. Live during playback, and offline on any selection.
specula CLI
Full reference: every feature, every shortcut, every setting
The user guide goes deep on each subsystem: what each FFT window is for, how the speech-gated path works, how compare-mode auto-align actually aligns, and the complete keyboard map.
Headline features
dBTP ceiling as the only editable field, then shifts the whole file by one uniform gain and holds the ceiling with a two-pass true-peak limiter, saving a new file. And when a row's true peak breaches its ceiling, a one-click Limit TP button caps the inter-sample peaks without touching loudness, the same one-click fix as Normalize but for a true-peak overage. Only the ACX RMS target stays compliance-only with no Normalize button, since a gain can't satisfy its noise-floor requirement.dBTP ceiling with the standalone Limit TP operation, level spoken word with Level Dialogue (a region-aware gate that ducks the room tone and optionally lifts the voice to a target without the floor riding up), remove DC offset, swap channels, or split the file into N mono WAVs. Normalize and Limit TP respect a time selection, so you can fix one hot section without re-rendering the whole file. 16-level undo/redo. Always saves as a new file..dlg.json sidecar next to the audio file, debounced 500 ms, so re-opening the same file re-applies your edits. Reset to VAD nukes the sidecar and re-runs Silero with the current Settings → Speech tuning (Threshold, Minimum region duration, Merge gap). The corrected regions feed straight into the speech-gated loudness path so dialog-gated LUFS, ACX noise-floor, Netflix / Apple Podcasts compliance, and Chapter mode's per-chapter speech metrics all benefit from the cleanup.loudnessTargets.targets[] carries an inline verdict object (status, actualLUFS, penalty and non-compliance fields) so a downstream script can branch on pass / fail without recomputing.specula CLIanalyze, compare, edit, report, built on the same BS.1770 + speech-gated LUFS + stereo-correlation engine the app uses, so batch QC scripts get the exact same numbers. Pretty-printed JSON with sorted keys so diffs across runs stay deterministic. specula report --format json|html|pdf writes the same dark-themed report the app's preview window renders, without opening it. specula compare A B --out-diff residual.wav --match-loudness writes the level-matched A − B residual to a WAV so a script can branch on residual energy without re-loading the file. Ships inside the app bundle: Specula → Install Command-Line Tool… links it into /usr/local/bin.file:// URLs so clipboard-driven workflows just work.Loudness targets
Four delivery modes. Twenty-two platforms and standards. The gain each one will apply to your master, or a pass/fail against the spec.
Music mode shows the streaming penalty rather than a verdict. A master at −10 LUFS reads "Spotify −4 dB"; that's the exact gain Spotify will apply at playback to hit its −14 LUFS reference. Apple Music shows −6 dB, YouTube shows −4 dB. The dot is green within ±1.5 dB of zero, yellow within ±4 dB, orange beyond. A separate triangle lights when the true peak breaches the platform's ceiling.
The truth about quiet masters. Not every platform boosts. Apple Music's Sound Check, YouTube, and Tidal only turn loud tracks down; they leave quieter-than-reference tracks alone. So a master at −18 LUFS doesn't get pushed up to Apple Music's −16; it plays at −18. Specula reflects this: on those three platforms a quiet master reads "as-is" in green. Spotify (default mode), Amazon Music, Deezer, and SoundCloud do boost quiet tracks peak-limited, and there the +X dB number is real; Specula shows it unchanged. It's the difference between guessing what Apple Music will do and knowing.
VOD and Broadcast modes are hard pass/fail. A green dot means loudness sits inside the tolerance band AND true peak is at or below the ceiling. FAIL L calls out a loudness band miss; FAIL TP calls out a true-peak overshoot when loudness is fine; FAIL S↑ calls out a max-short-term overshoot (used by EBU R128 S1's tighter short-form spec); FAIL NF calls out an ACX noise-floor breach. Loudness fails take precedence so you always see the primary reason.
Dialog-gated targets (Netflix, Prime Video, Apple TV+, Disney+, Max; Apple Podcasts, Spotify Podcasts; ATSC A/85) evaluate against the speech-gated LUFS path. Their reference lines lead with dialog · in the panel so you can see at a glance which measurement source is in play. Files with no detected speech show "no speech" instead of a misleading verdict. Pick up to four targets per mode in Settings → Targets.
Match to target (non-destructive). Every target row has a small waveform-circle toggle. Press it and Specula matches playback to that target: gain offset = target − source LUFS, with a 5 ms lookahead true-peak limiter at the target's dBTP ceiling (the 4× oversampled inter-sample peak is what's enforced, not just the sample magnitude). Works for integrated and dialog-gated targets alike; press it on Netflix and hear the file the way Netflix will play it. The loaded buffer is never modified; releasing the toggle restores unity gain.
Audiobook authors: a common reason ACX rejects an audiobook is the room-tone noise floor sitting above the −60 dB RMS ceiling. Specula measures it directly. The Speech-Gated section shows a live Noise Floor readout (dB RMS over every non-speech sample), and the ACX preset evaluates it as part of the verdict. Above −60 dB the row reads red and the ACX target lights FAIL NF. You see the rejection condition before submitting the file, not three days later in an email. Chapter mode (⌘3) takes it one further: Specula segments the file at long silences, runs the full ACX measurement set per chapter (RMS, I, TP, NF, LRA, Max M/S, Dlg LUFS, Sp %), flags every chapter individually against the three ACX gates (RMS, true peak, noise floor) and against the book's own median, and puts the table in the PDF report. One audiobook, one pass, every chapter scored; read the Chapter mode guide.
The live panel updates as the file plays. For a broadcast delivery you'll usually want the offline analysis (⌘Return) so the verdict is computed over the entire master, not a rolling estimate. The full catalog with references, tolerances, and true-peak ceilings is in the user guide.
Standards
Specula implements the actual specifications, not approximations of them.
EBU R 128Requirements
All audio is processed locally. Specula never transmits your audio anywhere.
FAQ
specula CLI exposes four subcommands: analyze, compare, edit, report, built on the same measurement engine the app uses. The tool ships inside the app bundle: pick Specula → Install Command-Line Tool… and Specula links it into /usr/local/bin; verify with specula --version. JSON output is pretty-printed with sorted keys so diffs across runs stay deterministic. See the CLI section of the user guide for the full command reference.file:// URLs; paste a clipboard path straight in.specula report mix.wav --mode music --format pdf --out report.pdf. From Shortcuts: use the Get Report action with Format set to PDF. Both produce pixel-identical output to the app's PDF preview. HTML and JSON formats are available too via the same --format flag or the same Shortcut step.dBTP ceiling as the only editable field. Click Apply and the whole file is shifted by one uniform gain (chosen so the basis reading lands on the reference), then a two-pass true-peak limiter holds the ceiling and Save As writes a new file. The one exception is the ACX RMS target, which stays compliance-only with no Normalize button: ACX has a noise-floor requirement a gain can't satisfy, so normalizing its level alone could read as compliant when it isn't.specula CLI's edit subcommand does not expose routing render-to-file, its edit ops are gain, normalize, trim, phase, DC, and Limit TP. See the surround workflow.--gain -3 get rejected by the CLI; why?- as an option name. Use the --option=value form for any negative numeric: --gain=-3, --normalize-lufs=-14, --lufs-ceiling=-1. Positive numbers work in either form.Ship with confidence
Specula is a tool for the moment between "I think this master is done" and "I'm sending it out." It doesn't replace your DAW, your mastering chain, or your ears. It catches the things ears miss: the hidden phase issue, the half-dB overshoot, the speech-gated number that's three LU off Netflix's target, before they become a re-deliver.
Take the long way through the user guide if you're new to loudness gating, or skim the keyboard reference if you just want to drive it.