| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- (
- // Clear any existing OSC definitions
- OSCdef.freeAll;
- // Define OSC responder for touch events
- OSCdef(\touchOSC, { |msg, time, addr, port|
- var x = msg[1], y = msg[2], pressure = msg[3], color = msg[4];
- // Map x, y coordinates to frequency and amplitude
- var freq = x.linexp(0, 1, 100, 2000);
- var amp = pressure.linlin(0, 1, 0.1, 0.8);
- // Use color to select sound type (assuming color is an integer)
- var synthType = switch(color.asInteger,
- 0, { \sineTone },
- 1, { \squareTone },
- 2, { \sawTone },
- 3, { \triTone },
- 4, { \fmTone },
- { \sineTone } // default
- );
- // Create synth with mapped parameters
- Synth(synthType, [
- \freq, freq,
- \amp, amp,
- \pan, y.linlin(0, 1, -0.8, 0.8),
- \attack, 0.01,
- \release, y.linlin(0, 1, 0.2, 2.0)
- ]);
- // Log the received data
- ["Touch data:", x, y, pressure, color, "->", synthType, freq, amp].postln;
- }, '/touch');
- // OSC responder for control messages
- OSCdef(\controlOSC, { |msg, time, addr, port|
- var control = msg[1].asSymbol, value = msg[2];
- // Log the control change
- ["Control change:", control, value].postln;
- // Handle different control parameters
- switch(control,
- \reverb_mix, { ~reverbSynth.set(\mix, value); },
- \reverb_room, { ~reverbSynth.set(\room, value); },
- \reverb_damp, { ~reverbSynth.set(\damp, value); },
- \delay_time, { ~delaySynth.set(\delaytime, value); },
- \delay_feedback, { ~delaySynth.set(\feedback, value); },
- \delay_mix, { ~delaySynth.set(\mix, value); },
- \filter_cutoff, { ~filterSynth.set(\cutoff, value.linexp(0, 1, 200, 10000)); },
- \filter_res, { ~filterSynth.set(\res, value); }
- );
- }, '/control');
- // OSC responder for system commands
- OSCdef(\systemOSC, { |msg, time, addr, port|
- var command = msg[1].asSymbol;
- ["System command:", command].postln;
- switch(command,
- \start_effects, { ~startEffectsChain.value; },
- \stop_effects, { ~stopEffectsChain.value; },
- \reset, { ~resetSystem.value; }
- );
- }, '/system');
- // Start the OSC server on port 57120 (default SuperCollider port)
- thisProcess.openUDPPort(57120);
- "OSC server ready on port 57120".postln;
- "Registered OSC commands: /touch, /control, /system".postln;
- )
|