Specula 1.2 is out, and the headline is custom loudness targets: the delivery spec a client sends you, entered once, treated exactly like a built-in target.
Your spec as a target
Delivery specs rarely land on a platform preset. A house spec reads “integrated -18 LUFS, tolerance 1 LU, true peak under -1 dBTP”, and until now the workflow was picking the nearest built-in target and doing the remaining arithmetic in your head every time the badge updated. In 1.2, Settings → Targets → Custom targets holds the spec itself: a name, the mode it belongs to, the measurement source (integrated, dialog-gated, or un-weighted RMS), the reference level, the tolerance band, and the true-peak ceiling. The saved target joins its mode's list and gets the full treatment: the verdict badge, the hover breakdown showing which number missed and by how much, Match to audition at the target level, Normalize to target to commit, and a row in the report exports, so the PDF that goes back to the client carries a verdict against their own numbers.
The measurement source is the field that earns its keep. Broadcast and music specs judge integrated LUFS, VOD houses judge dialog-gated, and audiobook delivery is un-weighted RMS. A custom target names its source explicitly, so the number being checked is the number the spec is written in.
Raw PCM import
Raw PCM import is for a different desk: the one with a decoder under test on it. Specula now opens headerless audio: a .pcm or .raw dump from a codec, an I2S capture, a .bin of samples from a test harness. Declare the format and the whole analysis stack applies: loudness, true peak, FFT, spectrogram, compare, edit, reports. The declaration covers sample rate, channel count, sample format from 8-bit unsigned to 64-bit float including packed 24-bit, byte order, interleaved or planar, and an optional header skip. The import sheet does the tedious part: it checks that the file size divides into whole frames, ranks the byte formats that fit by decoding a few seconds of each and scoring the result, and previews the decoded waveform with playback before you commit.
The one thing it never guesses is the sample rate. Nothing in a headerless file can reveal it, and a wrong rate corrupts every number without producing an error. Declarations are remembered per file, can be saved as named presets, and are recorded in every report, since the numbers from a raw file ride on the declaration.
The same import runs on the command line: specula analyze dump.pcm --raw-rate 48000 --raw-channels 2 --raw-format s24le, with the same flags on report and edit, and --raw-preset for saved presets. A decoder regression script goes from dump to JSON without the app open.
The readability pass
1.2 also carries a readability pass. Settings → Layout → Text size scales the text across the main window to Default, Large, or Extra Large, the faintest info-panel labels are brighter across the board, and the system Increase Contrast setting lifts them further. The live Momentary and Short-term readouts are readable again: at the 10 Hz update rate the rolling-digit animation was re-triggered before it could finish, which blurred both numbers permanently. The digits now repaint plainly by default, with a refresh-rate picker (10 Hz default, since EBU Tech 3341 requires at least that for a live short-term meter; 5 and 2 Hz for easier reading) and a separate Rolling digits toggle. Display only, on both counts: measurements are unchanged.
Also in 1.2
- Clicking outside a text field commits it, the same as pressing Return.
- Double-click resets the waveform time zoom, the amplitude zoom, and the FFT range.
- Spectral mode gets per-axis zoom reset: ⌘0 for both axes, ⇧⌘0 for time alone, ⌥⌘0 for frequency alone, plus a small canvas button per zoomed axis.
- The Live / Offline analysis switch moved to its own Analysis section in the sidebar, between Mode and Channels, where it is visible instead of buried in a section header.
- Three fixes: the spectrogram draws short files solid all the way to the end, loudness curves stay drawn at high zoom, and the Spectral-mode tooltips sit on the controls they describe.
Specula 1.2 is a free update for existing licenses: Check for Updates inside the app, or download at headroomstudio.dev/specula. New licenses are $99.99, one time, with a 7-day trial. Full release notes →