# FOH Master-Bus Hardening — Build Recipe

**Session:** `/home/pln/Work/Sound/Ardour/Tidal Live/Tidal Live.ardour` (Ardour 9.2, created with 8.6)
**Role:** dual-purpose — **live PA feed to FOH** *and* **12-orbit stem recorder** for later release remastering.
**Goal:** clean gain structure + a true-peak brickwall safety limiter + optional kick→bass sidechain ducking, **without** baking master processing into the recorded stems.
**Author's note:** everything below was read out of the actual `.ardour` XML on 2026-07-25. Spec only — the session file was **not** modified.

---

## 1. Findings — what is actually in the session right now

### Track list (15 routes)
- **Master** (id 71) — stereo out, currently patched to `Comet Lake PCH cAVS Headphones` (dev machine; will be your interface live).
- **Tidal 01–12** (12 audio tracks) — each fed from a SuperCollider orbit: `Tidal NN` ← `SuperCollider:out_(2N-1)/(2N)`. So **Tidal 01 = SC out_1/2 = orbit 0 = d1**, … **Tidal 11 = SC out_21/22 = orbit 10 = d11**, **Tidal 12 = out_23/24 = orbit 11 = d12**. (Orbit `N` in Tidal is 0-indexed → `d(N+1)` → `Tidal (N+1)`.)
- **Keys** (id 2756) — MIDI/ZynAddSubFX.
- **Mic** (id 145585) — audio.

### Current Master processor chain (exact order, top→bottom)
| # | Processor | Type | State |
|---|-----------|------|-------|
| 1 | **Polarity** (id 102) | polarity | active |
| 2 | **Trim** (id 103, labelled "Amp") | trim | active, `trimcontrol = 1.0` (0 dB) |
| 3 | **Amp / fader** (id 101) | amp | active, `gaincontrol = 0.366` → **−8.7 dB** |
| 4 | **ACE Compressor (stereo)** (id 11497) | lv2 `urn:ardour:a-comp#stereo` | active proc, **but `enable = 0` (bypassed internally)**; `sidech = 0` (SC listen OFF). Params: att 50 ms, rel 400 ms, knee 8, **ratio 5:1**, thr −4 dB, makeup +2.3 dB (preset "VocalLeveller"). Has a **3rd (sidechain) input already wired** — see below. |
| 5 | **ACE Inline Spectrogram** (id 99029) | luaproc | visualizer (pass-through) |
| 6 | **LSP Spectrum Analyzer x1** (id 250581) | lv2 | visualizer (pass-through) |
| 7 | **Master main-outs** (id 105) | main-outs | → hardware out |
| 8 | **meter-Master** (id 104) | meter | K-meter tap |

Route attributes: `meter-point="MeterOutput"`, **`meter-type="MeterK14"`** (K-14 scale already selected), `disk-io-point="DiskIOPreFader"`.

**➡ THE GAP: there is no limiter of any kind on the master.** The only dynamics plugin (ACE Compressor) is *disabled*. Nothing stops a `# gain 1.4` kick or a feedback runaway from clipping the PA. This is the #1 thing to fix.

### The sidechain is already half-built
- **Tidal 11** carries a **pre-fader send** named `send 6` (id 106533) whose two outputs both feed `SC Master/ACE Compressor (stereo) 4/audio_in 1` — i.e. a **mono key** into the compressor's sidechain port. Send gain = unity, and it sits **before** Tidal 11's fader, so it taps the signal even though **Tidal 11's own fader is at 0 (−∞ dB)** — Tidal 11 is currently a *silent, dedicated sidechain-key track*, not part of the audible mix.
- So the session already designates **Tidal 11 (orbit 10 / d11) as the kick key**. **Verify this per-set** — orbit→role is not fixed across ParVagues tracks; confirm against the loaded track's `.tidal` and by ear that d11 is your kick before trusting the ducking. If the kick lives on a different orbit for a given track, move the send (§5).
- Both compressor toggles that would make it do anything (`enable`, `sidech`) are **off**, so today the sidechain does nothing.

### Gain-staging state (fader snapshot in the file)
Master fader **−8.7 dB**; many orbit faders are parked at **0 (−∞)** or low (e.g. −15.2, −14.4, −12.7 dB) with a couple near unity (−1.3 dB, 0 dB). This is the ad-hoc, ride-it-by-hand structure behind *"output is very low on stage"*: the master is pulled down ~9 dB **and** the one gain-recovery device (compressor makeup) is switched off. (These stored values are a snapshot, not a designed structure.)

### Stem-safety — already correct, keep it that way
Every **Tidal 01–12** track has `disk-io-point="DiskIOPostFader"`. That disk-writer tap is **post the track's own fader but before the signal is summed into Master** — so **the master chain (comp/limiter) can never bake into the recorded stems.** The Master itself is `DiskIOPreFader`, but Master isn't record-armed. ✅ Nothing you add to the master bus touches the stems. The only thing that *does* color a stem is that track's **own** fader/trim/plugins.

---

## 2. Target signal flow

```
 SuperCollider orbits (peaks ~ -6 dBFS at source, set in SuperDirt # gain)
        │
        ▼   [ per-orbit tracks Tidal 01..12 ]
  Trim(unity) ─► [pre-fader SEND on kick orbit] ─────────────┐  (mono key)
        │                                                    │
     Fader(ride for balance)                                 │
        │                                                    │
     DiskWriter  ── records CLEAN stem (post track-fader, PRE master) ✔
        │                                                    │
        └────────────► sum to  M A S T E R  bus              │
                                   │                         │
        ┌──────────────────────────┘                        │
        ▼                                                    │
 1. Polarity                                                 │
 2. Trim  (master input trim — set overall drive here)       │
 3. Fader (→ 0 dB / unity)                                   │
 4. ACE Compressor (stereo)  ◄───────── sidechain key ◄──────┘
        │   (glue 2–3 dB GR; sidechain ducks bass under kick)
 5. Spectrogram / LSP analyzer   (visualizers, pass-through)
 6. ★ x42 DPL — Digital Peak Limiter (stereo)  ◄── NEW, LAST PROCESSOR
        │   true-peak mode, ceiling −1 dBTP  (brickwall PA safety)
 7. Main-outs ─► hardware ─► FOH
        │
       K-14 meter (route meter, MeterOutput) — read loudness/headroom
```

Rule that makes the whole thing safe: **the limiter is the last processor before `main-outs`.** Anything after it (only the meter/main-outs) cannot re-raise the level past the ceiling.

---

## 3. Plugins to insert, order, and starting parameters

### 3a. The limiter (the one mandatory addition) — **x42 DPL "Digital Peak Limiter (Stereo)"**
Ships in Ardour's bundled x42 set; it's a look-ahead brickwall limiter (Fons Adriaensen DPL-1 lineage) with a genuine **true-peak** detection mode (key input 4× oversampled), ~1 ms latency, and the same gain reduction on both channels (no image shift). It is the right tool here because it is *transparent, dead-simple (3 knobs), and true-peak-accurate* — exactly what a live safety brickwall needs.

**Insert position:** after the LSP analyzer, **immediately before `Master main-outs`** — i.e. dead last.

**Starting parameters (x42 DPL Stereo):**
| Control | Value | Why |
|---|---|---|
| **True Peak** | **On** | catch inter-sample peaks; a PA/limiter downstream sees dBTP, not just sample peaks |
| **Threshold** (= output ceiling) | **−1.0 dBTP** | brickwall ceiling; leaves margin for D/A and downstream FOH gear |
| **Input Gain** | **0 dB** to start; raise to **+2…+4 dB** to drive it for a hotter, more consistent FOH feed | this knob is your "make it louder safely" control — everything above ceiling is caught |
| **Release** | **150 ms** | fast enough to stay loud on 4-on-the-floor techno, slow enough to avoid audible pumping on sustained bass |

> Rationale for "hot but safe": don't chase loudness with the fader (that clips). Push **Input Gain** into the DPL; the ceiling holds at −1 dBTP no matter what. On techno this typically means 1–3 dB of limiting on kicks — inaudible, and it converts your peaky signal into a louder average.

**Alternatives (equivalent slot, pick one — DPL preferred):**
- **a-Limiter** (Ardour bundled, `Fast Lookahead Limiter`, SWH) — fine brickwall but **sample-peak only** (no true-peak), and pumps more with a short release. Use only if DPL isn't in your build. Params: Limit −1.0 dBFS, Release 150 ms, Input gain to taste.
- **Calf Limiter (LV2)** — true-peak-ish (ASC), has its own metering and a soft-clip stage. Heavier CPU, more knobs than you want live. Params: Limit −1.0 dB, Lookahead 5 ms, Release 150 ms, ASC on.

**Optional loudness read-out (does not touch audio):** add **x42 dpMeter (EBU R128 / dpMeter4)** as the very last slot *after* DPL, or read the existing **K-14 route meter**. Use it to sanity-check that your live feed sits in a consistent range (see §6). Keep it a *meter*, not a second processor in the audio path if CPU is tight — the K-14 route meter already exists.

### 3b. The compressor (already present — enable and re-tune it)
Keep **ACE Compressor (stereo)** in slot 4. Turn it into a gentle glue/ducking device, not a vocal leveller:
| Control | From → To | Why |
|---|---|---|
| **Enable** | 0 → **1** | it's currently bypassed |
| **Ratio** | 5:1 → **2.5:1** | glue, not squash |
| **Threshold** | −4 → **−12 dB** | so it acts on mix peaks, ~2–3 dB GR |
| **Attack** | 50 → **30 ms** | let the kick transient through (esp. important with sidechain) |
| **Release** | 400 → **120 ms** | breathe with the tempo |
| **Knee** | 8 (keep) | soft |
| **Makeup** | 2.3 → **+3…4 dB** | recover level — part of the "louder on stage" fix |
| **Sidechain** (`sidech`) | 0 → **1** *(only when using kick ducking, §5)* | routes the SC key to the detector |

Order stays **Compressor → (visualizers) → Limiter**: compress for tone/glue, *then* brickwall for safety. Never the reverse.

---

## 4. Gain-structure guidance (the "too quiet on stage" fix)

The signal is quiet because the **master fader is at −8.7 dB and the makeup/comp is off** — you're throwing away ~9 dB and not recovering any. Rebuild the structure bottom-up:

1. **At the source (SuperDirt):** aim each orbit's `# gain` so the **orbit stem peaks around −6 dBFS** (check on the per-track meters, `MeterPostFader`). −6 gives transient headroom and keeps stems clean for release. Fix reds *here*, not on the master.
2. **Per-track Trim:** leave at **unity (0 dB)**. Trim is your clean per-orbit offset if one orbit is consistently hot/quiet — prefer trimming here over riding the fader, because trim is stable and the stem stays sensible.
3. **Per-track faders:** set to **0 dB (unity) as the home position**; ride only for musical balance. (Today several sit at −∞/−15 dB — reset the ones you actually use to unity so you have a known starting point.) Remember: the fader **is** post-record tap → big rides *do* shape the recorded stem. For release-critical balance, prefer Trim + source gain.
4. **Master Trim (slot 2):** this is your overall-drive control into the comp/limiter. Start **0 dB**; if the summed mix is hot into the comp, pull Trim down a couple dB rather than the fader.
5. **Master fader (slot 3):** return to **0 dB (unity)** — stop using it as an attenuator.
6. **Recover/level with Compressor makeup (+3–4 dB) and Limiter Input Gain (+2–4 dB).** These give you a *hot, controlled* feed instead of a quiet peaky one.

### Live loudness target vs release LUFS — they are different jobs
- **Release mastering** targets an integrated **LUFS** number over the whole track: **−14 LUFS** streaming / **−9 LUFS** club (project standard). That's a long-window *average* measured offline on a finished file.
- **Live FOH is not a LUFS target.** You can't master an integrated LUFS in real time, and the FOH engineer sets the room's absolute level anyway. Your job on stage is **controlled peaks + consistent short-term loudness**: hand FOH a signal that (a) **never exceeds −1 dBTP** (the limiter guarantees this) and (b) stays in a **steady short-term band** so they're not constantly riding you. Practically: aim your **short-term loudness to sit around −12 to −10 LUFS-S** on the dpMeter/K-14 with the limiter catching only 1–3 dB — loud, consistent, and clip-proof. Give FOH headroom, don't hand them a brickwalled −9 LUFS master; let the PA amplify.

---

## 5. Sidechain routing — kick orbit → master compressor (Ardour 9)

**The wiring already exists** (Tidal 11 `send 6` → compressor SC input, §1). To **use** it:
1. **Confirm the kick orbit for the current track.** The session assumes **Tidal 11 = d11 = kick key**. Validate against the loaded `.tidal` (which orbit is the kick) and by ear. If correct, skip to step 4.
2. **If the kick is a different orbit** (say `Tidal 03`): open that track's mixer strip → **right-click the black area at the top of the processor box → New Aux Send… is not what you want**; instead **right-click → "New External Send…"** *no* — use: right-click the processor box → **`Sidechain`** is set from the plugin side. The clean way: on the **kick track**, right-click processor box → **New Pre-Fader Send…** → in the send's output routing, connect its two ports to **`Master/ACE Compressor (stereo)/audio_in 1`** (the SC port). Make it **pre-fader** so ducking is independent of the kick's fader ride. Delete the old `send 6` on Tidal 11 if you moved the key.
3. Keep the send **mono-summed into `audio_in 1`** (both send channels → in 1), matching the existing setup — the detector only needs a mono key.
4. **On the master compressor:** double-click ACE Compressor → set **Sidechain (`sidech`) = On** and **Enable = On**. Now the detector listens to the kick, not the full mix.
5. **Tune the duck:** with sidechain on, use **Attack ~5–15 ms** (fast, so the bass dips right as the kick hits), **Release 80–120 ms** (recover before the next kick at techno tempo — at 130 BPM a 1/8 note ≈ 115 ms, so ~100 ms release gives a clean pump-and-recover), **Ratio 3–4:1**, **Threshold** so the *kick key* drives **3–5 dB** of gain reduction. Result: the bass ducks under each kick, un-masking the low end.
6. **Set the kick key level** with the **send gain** (currently unity) so the compressor is triggered reliably but not slammed.

> Caveat: the master compressor ducks the **whole mix** under the kick, not just the bass. On a dense techno mix that reads as a musical pump (often desirable). If you want to duck **only** the bass, that belongs on the *bass orbit's* own strip (a per-track sidechain comp keyed by the kick), not the master — out of scope for master hardening, note it for a future pass.

---

## 6. Stem-safety checklist (guarantee recorded stems stay clean / pre-master)

- ✅ **Each Tidal 01–12 is `disk-io-point = DiskIOPostFader`** — records post its own fader, **before** the Master sum. Confirm it stayed that way: Mixer → each track → the disk-writer tap. Master processing (comp/limiter) is downstream of the record tap, so **it cannot touch stems**. (Verified in file today.)
- ✅ **Do not record-arm the Master.** Master is `DiskIOPreFader` but must stay disarmed; the stems are the deliverable, not a master print. (If you ever want a full-mix reference, add a *separate* record bus fed post-limiter — never arm Master itself.)
- ✅ **Never put release-critical processing on the master and expect it in the stems** — by design it won't be. Any tone you want *in the stem* goes on that **track's** strip.
- ⚠️ **Fader rides bake into stems** (post-fader tap). For balance you care about at release time, prefer **per-track Trim** + **source `# gain`**; reserve fader for live moves you're happy to re-do in remaster.
- ⚠️ **Tidal 11 is currently a silent key track (fader 0).** Its recorded stem will be silent/near-silent. If d11 is a real musical orbit for a given track, either (a) raise its fader and take the sidechain key from a *separate* pre-fader send (the send is already pre-fader, so the key is unaffected by the fader), or (b) move the key to the actual kick orbit (§5). Decide per-set.
- ✅ **Set source peaks to −6 dBFS** so stems have headroom for release mastering (no track should show red on `MeterPostFader`).

---

## 7. Step-by-step GUI build in Ardour 9.2 (~10 minutes)

**A. Add the safety limiter (2 min) — do this first, it's the critical fix**
1. Show the **Mixer** (`Alt+M`). Select the **Master** strip.
2. In the Master's **processor box**, right-click in the empty space **below `LSP Spectrum Analyzer`** and **above the output/main-outs** → **New Plugin → By Category → Dynamics** (or **Plugin Manager**, search **`DPL`**).
3. Add **`x42-limiter — Digital Peak Limiter (Stereo)`**. Confirm it lands **last, just above the main output**. Drag it there if not.
4. Double-click it: **True Peak = On**, **Threshold = −1.0**, **Release = 150 ms**, **Input Gain = 0** (raise later).

**B. Re-enable + retune the compressor (2 min)**
5. Double-click **ACE Compressor (stereo)**. Set **Enable On**, **Ratio 2.5**, **Threshold −12**, **Attack 30**, **Release 120**, **Makeup +3.5**. Leave **Sidechain Off** for now (turn on in step D).

**C. Reset gain structure (3 min)**
6. Master strip: set **Trim = 0 dB**, **Fader = 0 dB** (right-click fader → *Set value* → 0, or type it).
7. For each orbit you'll actually use: **Trim = 0 dB**, **Fader = 0 dB** as home. Then quickly set each orbit's SuperDirt `# gain` so its `MeterPostFader` peaks ~**−6 dBFS**.
8. Raise **DPL Input Gain** to **+2 dB** (then to taste) so the feed is hot; watch the K-14 meter.

**D. Arm the kick sidechain (3 min)**
9. Confirm the kick orbit (§5 step 1). If it's Tidal 11, just: double-click **ACE Compressor → Sidechain On**.
10. If the kick is elsewhere: on that track's strip, right-click processor box → **New Pre-Fader Send…** → route its outputs to **`Master/ACE Compressor (stereo)/audio_in 1`** (both → in 1); delete old `send 6`; then **Compressor → Sidechain On**.
11. Set compressor **Attack 10 ms, Release 100 ms, Ratio 3.5**, and adjust send gain so you see **3–5 dB GR** pumping on each kick.

**E. Save As (don't overwrite blindly)**
12. **Session → Save As** a new snapshot (e.g. `Tidal Live — FOH hardened`) so you can A/B against the current file.

---

## 8. Soundcheck test — prove the limiter catches an over-hot kick without pumping

1. **Baseline:** play a normal techno pattern. On the **K-14 route meter** the mix should sit with peaks near/just under **−1 dBTP**, comp showing ~2–3 dB GR. Note the DPL gain-reduction meter — occasional 1–2 dB dips on kicks are fine.
2. **The deliberate abuse:** in Tidal, fire a hot kick: `d1 $ s "bd*4" # gain 1.4` (or push the kick orbit `# gain` well past normal). Without the limiter this would clip the PA.
3. **Watch the DPL:** its gain-reduction meter should jump (several dB) and **the Master output must NOT exceed −1 dBTP** — the route meter's peak-hold stays pinned at/under −1, no red on the output. That's the brickwall doing its job.
4. **Listen for pumping:** the kick should still sound like a kick — punchy, not "sucked". If you hear the *whole mix breathing/pumping* on each hammered kick, **lengthen DPL Release** (150 → 200–250 ms) and/or back off **Input Gain**. If kicks sound dulled/squashed, **shorten Release** (→ 100 ms) — the DPL recovers faster between hits.
5. **True-peak proof:** toggle DPL **True Peak off then on** while feeding the hot kick; with it **on**, the output peak-hold should read ≤ −1.0 **dBTP** (not just dBFS). Leave it **on**.
6. **Sidechain check (if used):** solo kick+bass, hammer the kick — the bass should audibly **duck under each kick and recover** before the next. Tune with compressor Release (§5.5). Then unmute the mix and confirm the low end feels *clearer*, not pumping.
7. **Reset** the abuse pattern to normal `# gain` before the show.

---

## TL;DR — top 3 changes
1. **Insert x42 DPL (Stereo) as the last master processor**, True-Peak on, ceiling **−1 dBTP**, release 150 ms — the missing brickwall PA safety. (Today there is **no limiter at all**.)
2. **Fix the gain structure:** master fader is at **−8.7 dB** and the only makeup device (ACE Compressor) is **disabled** — that's why it's quiet on stage. Return master fader/trim to **unity**, set orbit sources to **−6 dBFS peaks**, **enable the compressor** (2.5:1, −12 thr, +3.5 makeup), and drive loudness with **DPL Input Gain**, not the fader.
3. **Arm the kick→bass sidechain** that's already 90% wired (Tidal 11 pre-fader `send 6` → compressor SC): flip **Sidechain On + Enable On**, set fast attack / ~100 ms release for a clean techno duck — but **verify the kick is really on d11** for the loaded track first.

Stems stay safe automatically: all 12 orbit tracks record **post-track-fader, pre-Master** (`DiskIOPostFader`), so nothing you add to the master bus can bake into the recorded stems.

---

Sources: [x42 Digital Peak Limiter](https://x42-plugins.com/x42/x42-limiter) · [dpl.lv2 (GitHub)](https://github.com/x42/dpl.lv2) · [True-peak limiter options for Ardour (discourse)](https://discourse.ardour.org/t/true-peak-limiter-options-for-ardour/104507)
