OSC controller

ciao a tutti, vorrei capire come poter gestire un parametro di due differenti synthdef con un unico fader di un controller osc.
Mi spiego meglio:
ho una prima synthdef “glive_1” e una seconda “del_2”. di queste voglio controllarne l’ampiezza, ma senza creare due fader saparati ne voglio avere uno unico (tipo master). se provo a scrivere come riportato funziona solo uno dei due, perchè SC prendere l’ultimo dei due che ho scritto. Come posso risolvere?


(
SynthDef(\glive_1,{arg outBus=0, inBus=0,
	                   gden=2, gdur=0.2, amp=1, pan=0, envbuf= -1,
	                   fadein=0.2,fadeout=1,gate=1;
	                var trig, sig, env;

	                    trig = Impulse.ar(gden);
	                    sig  = SoundIn.ar(inBus, 1);   // Segnale in ingresso
	                    sig  = GrainIn.ar(2,
		                                    trig,
		                                    gdur,
		                                    sig ! 2,   // Doppio mono
		                                    pan,
		                                    envbuf,512,amp);
	                    env = Linen.kr(gate,fadein,1,fadeout,doneAction:2);
	                Out.ar(outBus,sig * env)
          }).add;


~synth2 = Synth(\glive_1,[\inBus,0,\outBus,0,\gden,10,\gdur,0.1,\amp,1,\gate,1]);

OSCdef.new(\amp, {arg msg;
	~synth2.set(\amp, msg[1])},
'fader2', recvPort:57121);

); 

SynthDef(\del_2, {arg inBus=0, outBus=0, maxdel=2, del=0.5, fbk=0.0,
	                  amp=0, gate=0, fade=0.2, done=2;
	              var in, local, sig, dly, env;
	                  in    = In.ar(inBus);
	                  local = LocalIn.ar(2) + [in, 0];     // Ingresso interno dual mono (per feedback)
	                  dly   = DelayL.ar(local, maxdel, del,1 );
		              dly   = LeakDC.ar(dly);
	                  env   = Linen.kr(gate,fade,1,fade,done);
		          LocalOut.ar(dly.reverse * fbk); // reverse = ping pong effect
	              Out.ar(outBus, local * env * amp);
                  }).add;



~synth3 = Synth(\del_2,[\inBus,~delBus,\outBus,0, \amp,1,\fade,0.5, \del, 0.8, \fbk,0.2, \gate,1],~fxGrp);    


OSCdef.new(\amp, {arg msg;
	~synth3.set(\amp, msg[1])},
'fader2', recvPort:57121);
)

Nota: mi scuso in anticipo, non parlo italiano, quindi utilizzo Google Translate.

Puoi creare un SynthDef che sia solo di ampiezza e che controlli con OSCdef. Quindi puoi inviarlo agli altri SynthDef con In UGen:

(
SynthDef(\amp, {
	|amp, out = 0|
	Out.kr(out, amp);
}).add;

SynthDef(\sine, {
	|ampIn = 0|
	var sig = SinOsc.ar(440);
	var amp = In.kr(ampIn);
	sig = sig * amp;
	Out.ar(0, sig);
}).add;

SynthDef(\nz, {
	|ampIn = 0|
	var sig = WhiteNoise.ar(1);
	var amp = In.kr(ampIn);
	sig = sig * amp;
	Out.ar(0, sig);
}).add;
)

a = Synth(\amp, [\amp, 1.0]); //impostalo con il tuo OSCdef

b = Synth(\sine);

c = Synth(\nz);

a.set(\amp, 0.5);

(Sto anche usando Google translate)
Puoi semplicemente usare 1 OSCdef:

OSCdef.new(\amp, {arg msg;
	~synth2.set(\amp, msg[1]);	
	~synth3.set(\amp, msg[1]);
},
'fader2', recvPort:57121);
1 Like