Mode lifecycle
Every mode is loaded, started, stopped and tweaked through these four messages. One dispatcher on the SuperCollider side handles all modes; adding a mode adds no new lifecycle plumbing.
The load → ack → start sequence exists because /mode/load may need to read files or allocate buffers. Starting before SuperCollider is ready produces silence that looks exactly like a broken patch.
Messages
Section titled “Messages”/mode/load
Load a mode and its initial parameters. Does not start it.
s -
modeIds string - Identifier of the mode to load, e.g. "route". Must match a mode id in the reference section.
Acknowledged by /mode/loaded.
/mode/load route NetAddr("127.0.0.1", 57120).sendMsg('/mode/load', "route"); osc.Send(Osc.ModeLoad, "route"); The modeId is followed by that mode's initParams, in the exact order the mode declares them. The concrete type tag string therefore differs per mode — each mode page shows its own.
Send /wall/config and load every sample the mode will name BEFORE /mode/load. A mode never waits for geometry or files once it starts.
Loading while a mode is running implicitly stops the running one.
/mode/loaded
SuperCollider has finished loading the requested mode.
sis -
modeIds string - The mode that was loaded, echoed back.
-
oki int32 0 | 1 - 1 on success, 0 on failure.
-
details string - Empty on success; a human-readable reason on failure.
/mode/loaded route 1 ~osc[\modeLoaded].value("route", 1, ""); // handler for Osc.ModeLoaded /mode/start
Start the loaded mode. Idempotent.
/mode/start NetAddr("127.0.0.1", 57120).sendMsg('/mode/start'); osc.Send(Osc.ModeStart); Sending this twice is safe. Sending it with no mode loaded is a no-op.
/mode/stop
Stop the running mode and release its resources. Idempotent.
/mode/stop NetAddr("127.0.0.1", 57120).sendMsg('/mode/stop'); osc.Send(Osc.ModeStop); Stops with the mode's own release envelope. For an immediate hard kill, use /sys/panic instead.
/mode/param
Tweak one runtime parameter of the running mode.
sf -
names string - Parameter name, from the running mode's runtimeParams list. Unknown names are logged and ignored, never an error.
-
valuef float32 - New value, always a float even when the parameter reads as an integer. Clamped to the parameter's declared range.
/mode/param tempo 110.0 NetAddr("127.0.0.1", 57120).sendMsg('/mode/param', "tempo", 110.0); osc.Send(Osc.ModeParam, "tempo", 110.0f); Per-mode load signatures
Section titled “Per-mode load signatures”The modeId in /mode/load is followed by that mode’s init parameters, in order, so the concrete type tag string differs per mode:
| Mode | /mode/load type tags | Arguments after the address |
|---|---|---|
| Chase the Shape | sisifs | “chase”, zoneCount, shape, shapeSize, speed, soundSet |
| Mirror, Mirror on the Wall | siiss | “mirror”, zoneCount, leaderZone, display, soundSet |
| Find the Match | sisss | “match”, pairCount, complexity, variant, soundSet |
| Sound Wall | ssi | “soundwall”, playback, maxVoices |
| Climbing Synth | sssffis | “synth”, scale, customScale, rootNote, tempo, steps, instrument |
| Draw & Climb | ss | “draw”, soundSet |
| Memory Game | ssi | “memory”, storyId, routeLength |
| Arcade | ssi | “arcade”, gameId, startMission |