Skip to content

Mixer

The Mixer is the studio’s console: a channel strip per track, the send/return bus strips, and the master strip. Unlike the other views, the mixer is live performance state, not part of the AST — like flags, it resets with the runtime and is never written into your code.

  • Track strips: a vertical dB fader, a pan knob, mute / solo, and a live meter. The meter color climbs green → amber → red as the level approaches clipping.
  • Bus return strips: a fader + meter only (no pan/mute/solo), set apart with a dashed border and a “return” tag. The bus itself — its effect chain and default volume — is declared in code via song.bus(name, { effects, volume }); only its level is performance state here.
  • The master strip: the master fader + meter, tapped post-master-effects.

Track gain, pan, mute, and solo are things you ride during a performance — they change constantly and per-take, and writing every fader nudge back into the source would be noise, not composition. So the mixer owns this state in the runtime, separate from the document.

That mirrors a real distinction in the model:

  • Composition (what the song is) lives in code: tracks, effect chains, buses, patterns, automation. The Devices and Clip detail panels write back here.
  • Performance (how you play it) lives in the runtime: mixer state and flags. It resets when you reload.

Automation written in code (track.automate("gain", …)) drives a separate per-track gain stage, so code automation and the manual fader don’t fight each other.