oscCtrl --- Continuous Control Lanes (OSC)

oscCtrl lets you draw a path in the score and use it as a live control lane for audio / electronics via OSC. As the playhead passes over the path, values are mapped and streamed to the audio engine.

The path acts like a breakpoint automation curve tightly aligned to instrumental notation.


Basic Syntax

oscCtrl( addr:"/fx/ring/freq", min:60, max:800, uid:ringModFreq )

Parameters


Param Required Type Description


addr ✔ string OSC address to control (joined under /oscilla/control)

min ✖ number Minimum mapped value (default 0)

max ✖ number Maximum mapped value (default 1)

uid ✖ string Unique label (client‑side only, debugging)

mode ✖ enum event (default) or continuous

The cue must be placed directly on a <path> element.


What gets sent

Given:

addr:"/fx/ring/freq"

Oscilla sends:

/oscilla/control/fx/ring/freq

Where:

Example:

/oscilla/control/fx/ring/freq 726.06 0.27


Path Semantics

The path defines:

Zoom, scale, and SVG transforms are handled automatically.


Modes

mode:event (default)

Send only when the value changes meaningfully: a message goes out once the value has moved by more than 0.5 % of the lane's min…max range since the last message sent (for min:0, max:0.8 that is 0.004). A slowly moving playhead therefore still streams, just at a lower rate than continuous.

oscCtrl( addr:"/fx/pan", min:-1, max:1 )

Reduces controller spam and CPU noise.

mode:continuous

Send regularly while the playhead is inside the lane:

oscCtrl( addr:"/fx/pan", min:-1, max:1, mode:continuous )

Useful for:

Messages are still throttled to ~30/s.


Recommended Uses

✔ ring modulation frequency
✔ panning automation
✔ filter cutoff / resonance
✔ spatialization
✔ cueing electronics transitions


Not Sent

oscCtrl does not apply smoothing.
This should happen in the audio client, where it belongs.


Future Extensions


Troubleshooting

Nothing happens?
Ensure the cue is attached to the path element itself, not a group.

OSC not received?
Check the server receives:

type: "osc_control"

and that /oscilla/control/* is routed correctly.


Summary

oscCtrl brings automation‑style control inside the score while remaining modular and OSC‑native.

Compose gestures visually --- let the audio engine interpret.


On the control plane

An oscCtrl() lane publishes as you move it, so it works as a fader inside the score as well as an OSC sender:

Channel Meaning
t position along the lane, 0–1
v the lane's value, 0–1
synth(uid:pad, wave:sine, freq: follow(myLane.t, 90, 2000), amp:0.1)

The two are independent: sending OSC out and driving a cue in the same score are the same movement read twice. Open the connections view to see the ports.

Demo

See demo-osc-send — drawn control lanes streaming OSC as the playhead crosses them.

http://localhost:8001/?project=demo-osc-send

Tip: use ← → or ↑ ↓ to navigate the docs