[linux-audio-dev] Does anyone have a working example of Supercollider and SCUM GUI where slider or a button does real-time update on the synth

Mario Lang mlang at delysid.org
Wed May 18 09:29:47 UTC 2005


Ivica Bukvic <ico at fuse.net> writes:

> Greetings all,
>
> I guess title says it all. I do have working examples (i.e. the sequencer 
> example from the LAD 2004) that make new instances of synths but none of them 
> actually do real-time updates to existing instances.
>
> At any rate I would greatly appreciate your help in this matter.
>
> This is as far as I got and cannot figure it out beyond this point (my brain 
> is pretty darn fried :-):
>
> s = Server.local.boot;
>
> SynthDef("onetwoonetwo",{ arg out=0, freq;

You are tripping over a common Client-Server-Architecture misunderstanding
here.  The code inside a SynthDef is only executed *once* at
the client side to construct the Synth graph.  You
can *not* set variables insides a SynthDef from client side GUI objects directly.

What you actually want is:

* A synthDef with arguments which represent the values you want to change.
* A client side GUI with callbacks that *set* the server-side
  Synth arguments on update.

I will try to illustrate, but I dont use SCUM, so its untested,
but I am pretty sure you'll get the idea:

SynthDef("onetwoonetwo",{ arg out=0, freq=440;
 	Out.ar(out,
 		 SinOsc.ar(freq, 0, 0.5)
 	)
}).send(s);

n=Synth(\onetwoonetwo);

w = SCUMWindow.new;
w.title = "Slider example";
w.initialSize = Size(20, 300);
c = SCUMVBox( w );
v = SCUMSlider(c, { |v|
	v.expand = 1;
	v.fill = 1;
	v.bgColor = Color.white;
	v.fgColor = Color.black;
	v.action = {
		n.set(\freq, (v.value * 100)+400);
	};
	v.doAction;
});
w.show;

-- 
CYa,
  Mario



More information about the Linux-audio-dev mailing list