Audio mix

How clips reach the speakers and the export: clip gain, channels, track faders, the master, and loudness normalize.

Every clip runs through the same chain in preview and export: source → channels (audioChannel / channelMode) → gain (dB) → clip fx → volume (keyframes, fades, duck) → pan → its A-track, then track fx → track fader → track pan → master sum → master fx → master fader. A track has a fader (tracks[].gain, dB), a pan (tracks[].pan) and effects (tracks[].fx); the master has a fader (master.gain) and effects (master.fx). Audio on a video lane (a clip with volume > 0 on V1…) goes straight to the master. In the UI these are the strips in the Mixer tab beside the Inspector (its FX button edits that track's or the master's effects); mute / solo are the existing track switches (disabledTracks).

Effects (fx - an array processed in order; every parameter optional, out-of-range values are clamped; on:false bypasses one without losing its settings):

typeparameters (default)
eqlowFreq 120 Hz, lowGain 0 dB (low shelf) · midFreq 1000, midGain 0, midQ 1 (peak) · highFreq 8000, highGain 0 (high shelf); gains −18…+18
highpass / lowpassfreq (80 / 8000 Hz), q 0.71
compressorthreshold −20 dB, ratio 4, attack 10 ms, release 200 ms, knee 6 dB, makeup 0 dB
limiterceiling −1 dB, release 80 ms - brickwall, 5 ms lookahead; nothing passes the ceiling
gatethreshold −50 dB, range −40 dB (how far it closes), attack 2, hold 80, release 150 ms
delaytime 0.3 s, feedback 0.35, mix 0.25
reverbdecay 2 s, predelay 20 ms, mix 0.25
distortiondrive 0.3, mix 1
widenerwidth 1.5 (0 = mono, 1 = as is, 2 = extra wide)

Presets fill the chain with tweakable effects: Voice - clean-voice, podcast, radio, deep-voice (EQ-only: lower, warmer - not a pitch shift), telephone; Music - cinematic, wide, muffled (next room). Agents apply them (or any chain) with the patch op setFx: {op:"setFx", target:"clip", id:"c_vo", preset:"podcast"} · {op:"setFx", target:"track", id:"A3", fx:[{type:"eq", highGain:-3}]} · {op:"setFx", target:"master", fx:[{type:"limiter", ceiling:-1}], append:true} · fx:null clears. On a clip it applies to its linked stems too; chains are validated (unknown effect or preset → the whole patch is refused). The compact project view shows chains as fx:highpass·eq·….