// osc_receiver.scd - OSC receiver for webapp // Run this in SuperCollider: sclang supercollider/osc_receiver.scd // Then click nodes in the webapp to play tones s.boot; s.waitForBoot { // Define synth on the server (2-second ring) SynthDef(\sineTone, { |freq = 440, amp = 0.15| var env = EnvGen.kr( Env([0, 1, 1, 0], [0.05, 0.1, 1.85], \sin), doneAction: Done.freeSelf ); Out.ar(0, SinOsc.ar(freq) * env * amp); }).add; // Wait for synth to be added to server s.sync; // OSC handler for /freq messages ~oscHandler = OSCFunc({ |msg, time, addr, recvPort| if (msg.size >= 3, { var freq = msg[2].asFloat; if (freq > 0, { Synth(\sineTone, [\freq, freq, \amp, 0.15]); }); }); }, '/freq'); "OSC receiver ready on port 57120".postln; "Click nodes in webapp to play".postln; // Keep alive while { true } { 10.wait; }; }