compact_sets/supercollider/osc_receiver.scd

38 lines
1 KiB
Plaintext

// 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 with long attack and decay
SynthDef(\sineTone, {
|freq = 440, amp = 0.15|
var env = EnvGen.kr(
Env([0, 1, 0.8, 0], [1, 1.0, 3], \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 - explicitly bind to port 57120
~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', nil, 57120);
"OSC receiver ready on port 57120".postln;
"Click nodes in webapp to play".postln;
// Keep alive
while { true } { 10.wait; };
}
)