Skip to content

Sound Wall

Teachers upload audio — the children’s own recordings, narration, music, language exercises — and each file is assigned to a lit hold. Children climb freely; touching a hold plays its sound and animates it. The activity ends when every sound has been found.

The engine owns the assignment of sounds to holds and tells SuperCollider which sound to play on each touch, so SuperCollider keeps no mapping that a restart could lose. The files themselves are ordinary samples: the engine loads them with /sample/load before /mode/load.

Mode id: soundwall · Status: draft · Since: 0.2.0 · Spec: Prototype Use Cases, p. 5

Load this mode with /mode/load and type tags ssi:

NetAddr("127.0.0.1", 57120).sendMsg('/mode/load', "soundwall", "cut", 3);

Sent in this exact order, immediately after the mode id.

#NameTypeRange / defaultDescription
1playbacksoverlap, cut, ignore
default cut
What happens when a hold is touched while another sound is playing. overlap — both play. cut — the old one fades out. ignore — the new touch is silent until the current sound ends. cut is the default because overlapping speech is unintelligible.
2maxVoicesi1 – 8
default 3
With overlap, the most sounds that play at once; the oldest is cut when exceeded. Ignored otherwise.

Settings from the use case that never cross the wire. The engine applies them; SuperCollider does not need them, so they are not in the protocol.

Setting
Number of active holdsHow many holds carry a sound.
Assignment methodRandom or manual placement of sounds on holds, including the simplified Storytelling arrangement. SuperCollider only ever sees the result.
Hold colours and animationsIncluding the animation while a sound plays.

/mode/soundwall/trigger

engine → sc event since 0.2.0

A hold with a sound was touched; play its sound.

i holdId
s key
is
holdId i int32 hold index · 0 – holdCount−1
The hold touched. SuperCollider pans the sound to its position.
key s string
The sample key assigned to that hold. Must already be loaded.
packet /mode/soundwall/trigger 64 uploads/3b/maria-poem
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/soundwall/trigger', 64, "uploads/3b/maria-poem");
engine (C#) osc.Send(Osc.ModeSoundwallTrigger, 64, "uploads/3b/maria-poem");

Plays on the content bus. The playback policy decides what happens to anything already playing.

/mode/soundwall/stopped

sc → engine event since 0.2.0

A hold's sound has finished or been cut off.

i holdId
i completed
ii
holdId i int32 hold index · 0 – holdCount−1
The hold whose sound stopped.
completed i int32 0 | 1
1 if it played to the end, 0 if the playback policy cut it off.
packet /mode/soundwall/stopped 64 1
SuperCollider ~osc[\modeSoundwallStopped].value(64, 1);
engine (C#) // handler for Osc.ModeSoundwallStopped

Tells the engine when to stop the hold's playing animation. Only SuperCollider knows when a sound really ends, especially under the cut policy. Also sent for an ignored touch, with completed 0, so the engine never leaves an animation running.

/mode/soundwall/complete

engine → sc event since 0.2.0

Every sound on the wall has been discovered.

i soundCount
i
soundCount i int32 1 – 1024
How many sounds were found.
packet /mode/soundwall/complete 12
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/soundwall/complete', 12);
engine (C#) osc.Send(Osc.ModeSoundwallComplete, 12);

Plays a short celebration on the sfx bus once the current sound has finished.