Skip to content

Audio

Global mix control and session recording, independent of whatever mode is running. The mix is rate: state — sent on change, re-sent on /sys/sync, safe to send twice.

/audio/master/volume

engine → sc state since 0.1.0

Master output gain.

f gain
f
gain f float32 0.0 – 1.0normalizeddefault 0.8
Linear-perceptual gain: 0.0 is silence, 1.0 is the installation's calibrated maximum. SuperCollider applies its own curve, so send the fader position, not decibels.
packet /audio/master/volume 0.8
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/audio/master/volume', 0.8);
engine (C#) osc.Send(Osc.AudioMasterVolume, 0.8f);

The calibrated maximum is set during installation and is the loudest the room should ever get — a classroom full of children, so set it with someone standing where they will stand.

/audio/master/mute

engine → sc state since 0.1.0

Mute or unmute all output, keeping the volume setting intact.

i muted
i
muted i int32 0 | 1default 0
1 mutes, 0 unmutes. A flag, hence an int and not a float.
packet /audio/master/mute 0
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/audio/master/mute', 0);
engine (C#) osc.Send(Osc.AudioMasterMute, 0);

Mutes with a short fade to avoid a click. For an instant kill use /sys/panic.

/audio/bus/volume

engine → sc state since 0.2.0

Level of one category of sound.

s bus
f gain
sf
bus s string "voice" | "music" | "ambience" | "sfx" | "content"
voice = narration and spoken instructions. music = arpeggiator, background music. ambience = looping soundscapes. sfx = game feedback chosen by SuperCollider. content = teacher-uploaded audio.
gain f float32 0.0 – 1.0normalizeddefault 1.0
Applied before the master gain.
packet /audio/bus/volume ambience 0.5
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/audio/bus/volume', "ambience", 0.5);
engine (C#) osc.Send(Osc.AudioBusVolume, "ambience", 0.5f);

Every sound belongs to exactly one bus: /sample/play names its bus explicitly, and sounds SuperCollider generates itself go to sfx or music.

SuperCollider ducks music and ambience under voice automatically, so a narrated story stays intelligible without the engine managing levels line by line.

/audio/speaker/volume

engine → sc state since 0.1.0

Trim one speaker's output.

i speakerIndex
f gain
if
speakerIndex i int32 speaker index
Speaker index, per the speaker map on the home page.
gain f float32 0.0 – 1.0normalizeddefault 1.0
Per-speaker trim, applied after the master gain.
packet /audio/speaker/volume 2 0.9
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/audio/speaker/volume', 2, 0.9);
engine (C#) osc.Send(Osc.AudioSpeakerVolume, 2, 0.9f);

For installation-time calibration, not for panning during play. SuperCollider places sounds from hold positions itself.

/audio/record/start

engine → sc event since 0.2.0

Start recording everything the wall plays to a file.

s sessionId
s
sessionId s string
Name for the recording, e.g. "class-3b-2026-09-19-synth". Becomes the file name, so letters, digits and dashes only.
packet /audio/record/start class-3b-2026-09-19-synth
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/audio/record/start', "class-3b-2026-09-19-synth");
engine (C#) osc.Send(Osc.AudioRecordStart, "class-3b-2026-09-19-synth");

Records the master output — what the room heard — including every effect. This is what makes Climbing Synth sessions into a library: a saved recording can be played back later with /sample/load and /sample/play like any other file.

Starting while already recording stops and saves the current file first.

/audio/record/stop

engine → sc event since 0.2.0

Stop recording and save the file.

/audio/record/stop takes no arguments.

Acknowledged by /audio/record/saved.

packet /audio/record/stop
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/audio/record/stop');
engine (C#) osc.Send(Osc.AudioRecordStop);

A no-op if nothing is recording.

/audio/record/saved

sc → engine event since 0.2.0

A recording has been written to disk.

s sessionId
f duration
s path
sfs
sessionId s string
The sessionId given to /audio/record/start.
duration f float32 seconds
Length of the saved recording.
path s string
Where the file landed, relative to the asset root, so it can be passed straight to /sample/load.
packet /audio/record/saved class-3b-2026-09-19-synth 184.2 recordings/class-3b-2026-09-19-synth.wav
SuperCollider ~osc[\audioRecordSaved].value("class-3b-2026-09-19-synth", 184.2, "recordings/class-3b-2026-09-19-synth.wav");
engine (C#) // handler for Osc.AudioRecordSaved