TT-TRUEAB — User Manual

JSFX plug-in for REAPER // Version 1.2.0 // TimTechlor

A fair A/B test needs equal loudness — otherwise the louder version always wins. TT-TRUEAB clamps any FX chain between a PRE and a POST instance and transports the full dry audio over shared memory, not just a level value — which is what makes a true delta signal possible.

01The concept

A fair A/B test needs equal loudness — otherwise the louder version always wins. TT-TRUEAB clamps any FX chain between two instances:

[ TT-TRUEAB PRE ]  →  [ any FX chain ]  →  [ TT-TRUEAB (POST) ]

Classic gain-match tools only exchange a level value. TT-TRUEAB transports the full dry audio — 218 samples per channel, about 5.5 s at 48 kHz. That is what makes a latency-aligned reference and a real difference signal possible; a level-only tool has no dry audio to compare against.

Loudness is measured with a K-weighting (BS.1770-like: high shelf +4 dB at ~1.5 kHz plus a ~38 Hz low-frequency high-pass) over a 400 ms window on both sides. Since both sides use the same window, this is a relative measurement; no ITU gating is needed.

TT-TRUEAB POST front panel — meter panel with IN/OUT bars and MATCH/CHAIN readouts on the left, MODE/LIMIT/SLEW buttons and TRIM/LAT knobs on the right
FRONTThe TT-TRUEAB POST front. Meter panel with readouts on the left, MODE/LIMIT/SLEW buttons plus TRIM and LAT knobs on the right — here waiting for its PRE companion.

02Quick start

  1. Insert TT-TRUEAB PRE before the chain you want to judge. Its two switches ACTIVE and DRY RING both default to ON.
  2. Insert TT-TRUEAB (POST) after the chain. The PRE LINK LED in the header lights up as soon as POST sees the PRE header; without it the header reads NO PRE.
  3. Play material. The match gain slews toward the correction at up to 12 dB/s; roughly half a second after linking, POST starts measuring the chain latency (watch the LAT SCAN line).
  4. Switch between PROC, REF and DELTA on POST.
PRE and POST communicate through a shared gmem namespace, so they also work across different tracks and even different track types. Use one PRE per POST — with two PREs writing at the same time, the last one wins.

03In practice

Three concrete setups that cover what TT-TRUEAB is for: judging a chain at equal loudness, hearing only what the chain changed, and reading out the chain's latency for parallel work.

A/B a processing chain at equal loudness

Goal: decide whether a chain (EQ + compressor + saturator, say) actually improves the material — with the loudness bias removed.

  1. Insert TT-TRUEAB PRE in the slot before the chain on the source track and TT-TRUEAB (POST) in the slot after it. FX slot order is the routing — no cabling needed.
  2. Play a representative loop — not the quietest part of the track.
  3. Wait for the PRE LINK LED and the status line reading ok, then let MATCH converge (about a second at the default SLEW of 12 dB/s).
  4. Toggle PROC ↔ REF. PROC is the chain corrected to input loudness; REF is the original, read from PRE's ring at the measured chain latency. Whatever still sounds better at equal loudness is a real improvement — not a level cheat.
TT-TRUEAB linked and matched — PRE LINK lit, IN and OUT meters both at -18.7 LUFS, MATCH +6.0 dB, CHAIN 2048 samples auto
LINKEDA live, matched pair. PRE LINK is lit, IN and OUT sit at the same level and MATCH holds the +6 dB that the test chain removes; CHAIN shows the auto-measured delay (2048 smp, flagged A).

Settings: the default MATCH LIMIT of ±24 dB and SLEW of 12 dB/s are safe starting points. On gentle chains narrow the limit to ±6 or ±12 to bound the correction; use TRIM for residual bias you want to keep or remove.

Delta audition — hear only what the chain changed

Goal: isolate the footprint of the chain: distortion residue, EQ tilt, compression pumping, added noise.

  1. Same rig as above. Make sure PRE's DRY RING switch is on (it is by default) — DELTA needs the dry audio.
  2. Wait until the latency measurement has run once (CHAIN shows a value flagged A and the status line is back on ok).
  3. Switch MODE to DELTA: you hear PROC − REF — gain and delay removed, only the chain's fingerprint left.
TT-TRUEAB in DELTA mode — DELTA button lit, matched IN/OUT meters, CHAIN 2048 smp
DELTADelta audition. With DELTA lit, only the difference between the matched chain and the aligned reference reaches the output — on a purely linear chain this is near silence.

Reading the result: near-silence means the chain is transparent — a pure gain+delay test chain nulls to about −75 dB here. Constant hiss is added noise, a growl is nonlinear distortion, and a crackle on transients usually means the latency lock is wrong.

Measure a chain's latency for parallel alignment

Goal: learn the real delay a plug-in or chain introduces — to align a parallel bus against it, or to verify a plug-in's PDC claim.

  1. Bracket only the suspect plug-in(s) between PRE and POST on a scratch track.
  2. Feed it material with movement — noise or transient-rich audio works best for the correlation.
  3. Read CHAIN: samples plus milliseconds, flagged A for auto-measured. That is the delay to dial into the compensator of the parallel path.
  4. To freeze the value, turn the LAT knob to the measured number — the readout then shows the same figure without the A.
TT-TRUEAB with manual latency — LAT knob reads 2048, CHAIN shows 2048 smp without the auto flag
MANUALLatency pinned by hand. LAT turned to 2048: the CHAIN readout shows the same number without the A flag and the periodic re-scan stops.

04Audition modes

ModeWhat you hear
PROCThe processed signal, corrected automatically (plus TRIM) to the input loudness.
REFThe dry signal, read straight from the PRE ring buffer at the measured chain latency — same loudness, sample-aligned to the chain output.
DELTAThe true difference PROC − REF: exactly what the chain changed — saturation, EQ shifts, compression — with gain and delay removed.

Switching morphs between the modes with ~5 ms triangular crossfade weights, so there are no clicks. Without a PRE link POST forces PROC; the mode buttons only take effect while linked.

On a chain that only changes gain and delay (−6 dB + 2048-sample PDC, noise @48 kHz) DELTA falls to −75.8 dB — both with a manually entered latency and with the auto-scan result. REF loudness tracks the chain output within ±0.5 LU.

If PRE's dry ring is switched off, POST still level-matches on the level value alone: PROC works as usual, REF stays silent and DELTA simply passes the matched PROC signal (difference against silence).

05The display

The POST front panel is divided into a meter panel (left) and a control panel (right). The readouts are also mirrored as read-only automation parameters (section 10).

TT-TRUEAB meter panel — IN/OUT bar meters, MATCH dB readout, CHAIN latency readout, PRE link status
METERSThe readout panel. IN/OUT K-weighted meters, the live MATCH gain and the detected CHAIN latency; below it the PRE link status.
PRE LINK
Header LED. Lit while POST receives a live PRE header; the text next to it reads PRE LINK or NO PRE.
IN
Bar meter and numeric readout of the K-weighted input level reported by PRE (---.- while unlinked).
OUT
Bar meter and readout of the output level after the match gain — i.e. the level you actually hear in PROC.
MATCH
The currently applied correction in dB, slewing toward its target at the SLEW rate.
CHAIN
Measured chain latency in samples plus milliseconds. A trailing A marks the automatic result; a manually entered LAT shows the same value without the A.
status line
LAT SCAN n/16384 while an auto-correlation sweep runs · waiting for TT-TRUEAB PRE ... while unlinked · ok otherwise.

06Latency engine

Any latency inside the chain (plug-in delay compensation, look-ahead) would smear REF and DELTA, so POST measures the chain latency itself — by correlating its own input against the dry audio in the PRE ring:

Turn the LAT knob to enter the latency by hand (0–16384 samples); 0 means automatic and the knob shows AUTO. A manual value freezes the display and stops the periodic re-scan — useful when the material is too flat or quiet for the correlation to lock.

07Controls

POST is operated entirely from the drawn panel. Buttons switch directly; the two knobs respond to vertical drags (hold Shift for fine adjustment), the mouse wheel, and right-click or double-click resets a knob to its default.

TT-TRUEAB control panel — MODE buttons PROC/REF/DELTA, LIMIT buttons, SLEW buttons, TRIM and LAT knobs
CONTROLSThe control panel. MODE (PROC/REF/DELTA), MATCH LIMIT and SLEW selectors, plus the TRIM and LAT knobs.
ControlValues (default)Function
MODEPROC · REF · DELTA (PROC)Selects the audition mode (section 04). Ignored while unlinked.
MATCH LIMIT±6 · ±12 · ±24 · ±48 dB (±24)Maximum correction of the automatic match. TRIM is added on top and may exceed the limit.
SLEW2 · 6 · 12 · 24 dB/s (12)How fast the match gain follows loudness changes.
TRIM±12 dB, knob (0)Manual fine correction added on top of the limited match target.
LAT0–16384 smp, knob (0 = AUTO)Manual latency override; also freezes the periodic re-scan.

PRE controls

PRE has no panel of its own — its two switches live in REAPER's slider list:

SwitchDefaultFunction
ACTIVEONTogether with DRY RING, gates writing into the dry ring.
DRY RINGRING ONEnables streaming the unprocessed audio. With either switch off, PRE still sends its level and the pair works as a meter-only gain match (no REF audio, DELTA = PROC), which also saves CPU.

08Preset bar & user bank

TT-TRUEAB POST with the preset bar in the header (previous, name with drop-down, next, SAVE, menu) left of OPTIONS and the open list of user slots
PRESETSThe preset bar sits in the header of the POST front, directly left of OPTIONS: < name > SAVE .... The name opens the list of the 32 user slots; the preset in use is marked.

TT-TRUEAB is a measuring tool, so presets are a small convenience: they store the measurement settings — MATCH LIMIT, SLEW, LAT (manual latency or AUTO), TRIM and METER (parameters 2–6; METER is stored although it is not wired to the display yet) — so that you can jump between, say, a fast-slewing setup for mixing and a slow, tightly limited one for mastering, or keep the pinned latency of a particular plug-in chain. Not part of a preset: MODE (PROC/REF/DELTA is the A/B switch itself; loading a preset must never flip you into DELTA), the colour scheme and the readouts. The bar is narrower than in the larger plug-ins (196 instead of 250 units) to fit the 560×210 window. There are no factory presets. The PRE instance has no panel and no presets.

ControlFunction
< / >Previous / next used user slot; wraps around and loads immediately.
Name fieldOpens the list of the 32 user slots (empty ones show - empty -). Mouse wheel scrolls, click loads. A * behind the name means the settings differ from the loaded preset.
SAVESaves the current settings into the selected user slot, or the first free one. A name box opens (up to 24 characters, default User 07): type, Enter or OK saves, CANCEL or a click outside cancels.
...RENAME, COPY (into the next free slot; the selection stays on the original), DELETE (a second click on the same entry confirms) for the selected slot, and INIT (defaults: LIMIT ±24, SLEW 12, LAT AUTO, TRIM 0, METER SLOW).

Where the user bank lives. Plug-ins cannot write files, so the 32 user slots are part of the plug-in state: they are saved with the project, with FX-chain and track-template copies, and in every REAPER preset of this plug-in (the + button in the FX window toolbar). To take your bank to another project or computer, save a REAPER preset once (+ → Save preset) and load it there: the whole bank comes with it. Projects saved with earlier versions load unchanged with an empty bank.

Typing names. REAPER keeps Space for the transport, so type Shift+Space for a blank. Depending on your REAPER settings Esc closes the whole FX window; use CANCEL instead. (The + menu of the FX window also has Send all keyboard input to plug-in.)

09Watchdog & safety

10Automation parameters

All user-facing values are visible in REAPER's parameter list and can be automated, learned or read by scripts:

InstanceVisible parameters
POSTMODE, MATCH LIMIT, SLEW dB/s, LAT smp (0=auto), TRIM dB, METER and the readouts IN LUFS (ro), OUT LUFS (ro), MATCH dB (ro), CHAIN LAT (ro), PRE LINK (ro)
PREACTIVE, DRY RING, IN LUFS (ro)

Two internal diagnostics are hidden from the list: -SNT on POST (a compiler liveness sentinel) and -WP on PRE (the ring write position). The METER parameter (SLOW/FAST) is reserved in v1.0.0 — it appears in the parameter list but is not wired to the display yet. Since v1.1.0 POST also has the hidden parameter UI Color (colour scheme 0–9, see Options / Color); since v1.2.0 four more hidden parameters (PB CMD, PB ARG, PB A, PB B, indices 13–16) form the test interface of the preset bank.

11Options / Color

TT-TRUEAB POST front with the OPTIONS box open: ten colour schemes, the factory scheme ACID is marked
OPTIONSTen colour schemes. The OPTIONS button sits in the header of the POST front, directly right of the preset bar, left of the PRE LINK LED. The white frame marks the active scheme; the name of the scheme under the mouse is shown at the bottom left of the box.

Click OPTIONS in the header of TT-TRUEAB POST to open the box. Under COLOR pick one of ten schemes: ACID, CYAN, ORANGE, MAGENTA, YELLOW, RED, BLUE, VIOLET, MINT or ICE. A click on a swatch changes the whole front at once (accent, dimmed accent, panel and ground tint, knob discs, meter bars); a click outside the box closes it. The choice applies per plug-in instance and is saved with the project and with FX chains (hidden parameter UI Color, index 12). The factory colour of TT-TRUEAB is ACID. Colour has no effect on the audio; PRE has no panel and no colour option.

12Troubleshooting