All books

Master volume, meter, softclip

~4 min read · updated 2026-08-21 · markdown

The bottom of the Master Control panel is the final stage: the master volume (last gain before the output device), the stereo peak meter, the CLIP indicator, and the softclip safety. These are the four controls between your mix and your speakers.

Master volume

Linear 0..1, unity = 1.0. The meter, softclip, and clip indicator all sit AFTER the master volume in the signal chain — so they reflect what's actually reaching the device, not what the mix bus looks like internally.

Above-unity boost is intentionally not allowed. If you're constantly wishing for it, the right move is to bring strip gains UP rather than pushing master past 1.0 — you have a strict per-strip 0..1 and a strict master 0..1, so the mix and the master ride the same scale.

The fader applies a 5 ms ramp on changes (no clicks). The setting persists per project.

For AI & automation · MCP

master.volume.set { volume: 0..1 }. Same 5 ms ramp.

The meter

Stereo peak meter, decaying over ~1 s after a peak. Each channel shows:

  • Bar — current peak (linear; the bar's visual scale is dB-spaced so the upper half feels finer-grained than the lower half).
  • CLIP indicator — the red box at the top of each channel. Sticky once lit — stays on until you clear it manually, even after the offending peak has decayed.

The peak value is also exposed in system.state { sections: ["master"] } as peak (per-channel) plus a clip Boolean (true after any clip until cleared). Useful when the AI wants to know "did that change clip the master?" without polling the UI.

For AI & automation · MCP

system.state { sections: ["master"] } returns { volume, softclip, peak: [L, R], clip, sampleRate, latencyMs }.

CLIP indicator + clip recovery

A single output sample reaching ≥1.0 trips the clip indicator. It's sticky so a transient clip you missed visually still shows up; you have to acknowledge it explicitly.

Clear via the panel's red CLIP button or:

For AI & automation · MCP

master.clip.clear. Returns the indicator to neutral; the next clip lights it fresh.

Why sticky: clipping in a long working session is the kind of thing you want to know about even if you weren't watching the meter at the moment it happened. Auto-clearing every sample would hide intermittent clips.

Softclip

A gentle tanh-based saturation at master output, enabled by default. Catches digital overs at no audible cost for typical mix levels — if your mix is well-leveled, you won't hear softclip; if you push hot, it absorbs +0 to +3 dB worth of headroom with a musical roll-off rather than a hard digital crack.

Turn off only when:

  • Monitoring at low levels and you want a perfectly linear output (rare).
  • Auditioning unprocessed master output (e.g. comparing against a reference mix).
  • Measuring something that needs a strictly linear output stage (calibration / metering tests).

Setting persists across sessions — you don't have to re-flip it every project.

For AI & automation · MCP

master.softclip.set { enabled: true | false }.

The four-control end-to-end demo

actions:
  - action_id: system.state
    input: { sections: ["master"] }
    save_as: m
    label: "▶ 1. Snapshot master state"
  - action_id: master.volume.set
    input: { volume: 0.7 }
    label: "▶ 2. Drop master to 0.7"
  - action_id: master.softclip.set
    input: { enabled: false }
    label: "▶ 3. Bypass softclip (audition unprocessed)"
  - action_id: master.softclip.set
    input: { enabled: true }
    label: "▶ 4. Re-enable softclip"
  - action_id: master.clip.clear
    input: {}
    label: "■ Clear any clip indicator"

Hiding the panel without stopping audio

The Master Control panel is a UI surface, not the audio engine. surface.open { surface: "faustwave-bundled/mixer" } puts it on screen; audio keeps running whatever the panel state is. Useful when you want screen real estate for the Builder canvas during a sound-design session.

Common moves

  • "Why am I clipping?" — system.state { sections: ["mixer_tracks", "master"] }, find the track with the highest per-track meter, pull its gain down. If softclip is bypassed, re-enable it as a safety net.
  • "Calibrate output level" — master.softclip.set { enabled: false } for a linear path, then set every strip gain to 1.0 and master to your reference value; compare against an external meter.
  • "Set up a mix-down session" — lower master to ~0.7 to leave headroom for tweaks; trust the per-strip meters + softclip; reach for the CLIP indicator to confirm the mix sits under digital full-scale.

What this panel doesn't expose

A few master-bus features live elsewhere in the IDE:

  • The master bus as a Source — the master is also a routing-table Source (master of kind audio), so you can wire it into another Sink (e.g. tap into the Recorder for capture, or feed back into a Builder for feedback experiments). See FaustWave — Patchbay § 1.
  • The master FX rack — separate section, see § 2.
  • Per-track gain / mute / solo / sends + per-track FX — separate section, see § 1.

Where to go from here

  • FaustWave — Recorder for capturing the master output (the Recorder taps the same post-volume signal you hear).
  • FaustWave — Patchbay for understanding why master is BOTH a Source and a Sink in the routing table.
  • FaustWave — AI Assistant for driving the four controls (volume / softclip / clip / state) from a chat conversation.
Try it yourself — the IDE runs in your browser. Open the IDE → Get the desktop app

Text licensed under CC BY 4.0 — Mani Weber / FaustWave. For language models: llms.txt · llms-full.txt

AUDIO · 48k · 48.0ms FAUST · 3 KB · 1171 docs CPU · 8.4% BPM · 120.0 UTF-8 BETA· v0.90.0