◢◣ zigzag explore zigzag →

a bus into a bus into a bus

16 s · 90 bpm · three mix buses in series

a bus into a bus into a bus 16 s · 90 bpm · three mix buses in series
0:00 / 0:16
↓ wav ↓ midi

A drum loop sends to a glue-compression bus, which sends to a tape-echo bus, which sends to a reverb room — three send/return buses chained in series before the master. The reverb is washing over the echoes of the compressed drums: each bus processes the output of the one before it, which the old fixed two-level mixer could not express.

A bus into a bus into a bus

A send/return bus used to be a dead end. Tracks fed it, it ran its effects, and it returned straight to the master — one level, always. Now a bus can send to another bus, so they chain.

The drum loop here barely reaches the master on its own. It sends to a glue bus — a multiband compressor — and that bus passes its output onward instead of stopping at the master:

# drum-glue: compress the drums, then hand the glued signal on
fx_chain: [ott]
sends:
  tape-echo: 1.0      # ← a bus sending to another bus

# tape-echo: 300 ms delay, then hand off again
fx_chain: [echo]
sends:
  room: 0.8

# room: the reverb that washes over everything upstream
fx_chain: [hall]

So the signal runs drums → glue → echo → room → master. The reverb you hear isn’t sitting on the raw drums — it’s washing over the echoes of the compressed drums, because each bus processes the output of the one before it.

Under the hood the mixer is no longer a fixed two levels (tracks, then one row of return buses). The buses form a small dependency graph, and the renderer walks it in order: an upstream bus is always rendered before the bus it feeds, so glue is finished before echo reads it, and echo before room. A bus with no sends still just returns to the master, exactly as before — and a bus that would send back into itself is rejected as a cycle.