Open Rack → Routes to see which controls move each parameter, then change literal modulation depths directly. Desktop and browser use the same controls.
Hear it and change it#
Run this song, select voice in Rack, and open Routes. Start playback.
timingVersion = 2
tempo = 120bpm
voice = patch {
source = saw (freq pitch),
motion = lfoSine @ 2Hz,
cutoff = 2000Hz + motion * 800Hz,
gain = vel * 0.2
}
lead = play voice "c3 e3 g3 e3"
Listen for: the repeating filter movement. The LFO's cutoff route has an 800 Hz depth. Increase that depth for a wider sweep, set it to zero to stop the filter movement, or make it negative to reverse the movement.
Make it yours: drag the depth, then release. The coefficient in your song updates and the workbench runs the edited song. One Undo restores the entire edit and sound; Redo reapplies it. Use the Routes Undo/Redo buttons, or ⌘Z/⌘⇧Z (Ctrl on Windows/Linux) after using a depth control.
Editing a depth#
- Drag a numeric depth horizontally. Hold Shift for finer adjustments. In the desktop workbench the sound follows the drag — each value's edit is compiled off the UI thread and its numbers moved in the running engine, with no rebuild (Change music while it plays § Live constants) — and release installs it once. A depth in a shared library definition, and every depth in the browser, is heard on release.
- Click the number to type an exact value. Enter or leaving the field applies it. Values use the unit displayed beside the control.
- Escape cancels an unfinished drag or typed edit.
- Right-click for Zero depth, Invert polarity, or Source ↗.
- Alt-click a numeric depth to visit its coefficient in Source.
The number is a draft during the gesture. Releasing or confirming applies a single checked source edit and runs it. Pointer movement does not repeatedly compile the song. The parameter bars continue to show the installed sound until the new version is accepted.
The editor preserves authored units: a route displayed in Hz can update an original 0.8kHz coefficient. Negative and zero coefficients remain editable. Subtraction and a single literal divisor are supported; a divided route cannot reach zero because that would require an infinite divisor. Use its source expression to mute or restructure that route.
Edits are enabled for the current live song after Run has accepted its source and imports. A parked song, pending Run, or source/import changes disable editing until those versions agree. Changing the patch or source cancels an unfinished gesture. Compile failures and changed declarations leave the original source intact.
Imported patches edit their own library definition. The tooltip identifies a shared library edit; every use of that definition is affected. Source navigation opens the owning library buffer. Library edits use that buffer's undo history.
Track, return and shared routes#
The Routes for selector includes track effects, mixer strips, returns, master inserts and named shared controls. IDs include the owner and insert slot, so independent instances remain separate. A local track coefficient can be edited with the same drag and Undo transaction as a voice coefficient. Coefficients inside an imported recipe remain expression edits; selecting a caller never rewrites its shared library.
Capability labels come from the parameter audit used by completion and hover: continuous, per note, per grain, analysis hop, prepared change, and other explicitly bounded update policies. Hover a label for its scope, cadence, range and state-change rule. Inline detector labels identify their input and explicit tap stage/delay; the contract explains detector windows.
Module-route values show the latest published control targets. A missing observation reads — and has no position dot. A range estimate describes the expression; it does not promise that a consumer has accepted an unclamped value. Prepared-effect observations separately report requested/active choices, transition progress and resource readiness. Live limiter observations report requested/emitted ceiling, effective release and reduction. Those observations use a bounded rotating budget alongside ordinary voice probes.
Reading the matrix#
Auto shows a grid while both axes have at most eight entries, and a list for larger patches. Choose Grid or List explicitly to use the other presentation. Both have the same depth controls; large boards scroll.
Rows name modulation sources such as envelopes, LFOs, velocity, macros and pattern signals. Columns name destination ports such as cutoff, pitch, pan and gain. Source dots and route tint follow available voice values. Source headers and expression routes link back to their source.
Identical entries fold together with a count: sources that share a label and kind (drift ×14 for a unison stack's per-voice drift, macro "grit" ×2 for one macro used twice), ports that share a label, unit and resting value (freq ×7), and routes between them with the same depth (1¢ ×7). A banked unison saw's spread and drift ports read cents (`unison 7 (spread
- 50)
routes50¢) though the IR feeds them a bare number. The folded counts are counted entries; theroutes ·` line still counts every source and destination. A folded route shows its depth but is edited in source.
Each route is a chip in its source's colour: a stripe on the left, a fill that brightens with the source's live value, and, for a numeric depth, a bar along the bottom that grows right (positive) or left (negative) from the centre by the depth's share of its column. Literal depths you can drag carry an outline. An empty grid cell is a faint outlined cell with a dot.
The parameters section below the routes shows the combined destination readout and available range estimate. A parameter can receive several sources, so its bar describes their combined result. These bars are readouts. Edit an individual route's numeric depth above them.
Expression-controlled depths#
A depth is directly editable only when the route has one unambiguous literal coefficient in its owning definition. A macro or named coefficient, folded arithmetic such as (400Hz + 400Hz), several literal factors, multiple paths merged into one cell, a coefficient reused by multiple destinations, and inherited coefficients outside the selected definition remain source edits.
~ means the route is shaped by an expression or another live signal and has no single linear depth. Where the projection knows what shapes it, the cell names that instead (× env, × product); hover a read-only cell for the reason it is not editable here. A numeric expression route can still have a known result without having one coefficient the control can safely change. Its source link remains available.
Different reads of the same source can become distinct source rows. Pattern sources report their scalar multiplier; their event values remain in the pattern. Only ports with incoming modulation appear. Very large graphs above 2,000 nodes omit this projection.
Next steps#
Use Macros and automation to perform broader changes, or Patch Bay and Rack to edit the instrument's modules and wiring. Wavetable and spectral destination previews remain a separate deferred feature.