[Diary/2012/July]

SuperColliderのOSCResponderの複合構造 / 2012-07-04 (水)

今日

事務作業.夕方からSuperColliderの授業.
全体の復習をしながら,OSCResponderの複合構造でフレーズを構成するための制御部分について,もう一度.

//---------------- 複数のPbindを多重的に呼び出す
(
~sequenceTempo1 = 5;
~sequenceTempo2 = 1;


SynthDef(\testSin, {arg amp=0.1, freq=440, pan=0;
var sound = SinOsc.ar(freq);
var env = EnvGen.ar(Env.perc, doneAction:2);
sound = sound * env;
Out.ar(0, Pan2.ar(sound, pan, 1));
}).store;

SynthDef(\positionSender1, {arg position=0;
	SendReply.kr(EnvGen.kr(Env.perc, doneAction:2), '/positionReceiver1', position);
}).store;

SynthDef(\positionSender2, {arg position1=0, position2=0;
	SendReply.kr(EnvGen.kr(Env.perc, doneAction:3), '/positionReceiver2', [position1, position2]);
}).store;



~oscResponderPositionReceiver1.remove;
~oscResponderPositionReceiver1 = 
		OSCresponder(nil, '/positionReceiver1', {arg time, responder, message;
	//if文などを使って得られた数値を使ってトリガーにする
	if(message[3] == 0, {n.play;});
}).add;

~oscResponderPositionReceiver2.remove;
~oscResponderPositionReceiver2 = 
		OSCresponder(nil, '/positionReceiver2', {arg time, responder, message;
	//if文などを使って得られた数値を使ってトリガーにする
	message[3].post; " ".post; message[4].postln;
	if(message[3] == 1, {o.play;});
	if(message[3] == 5, {m.play;});
}).add;

)

(
m = Pbind(
	\instrument, \testSin,
	\dur, 0.25,
	\pan, Pfunc({1}),
	\octave, 3,
	\degree, Pseq([7, \reste, 2, 6, 5, \reste, 3])
);

n = Pbind(
	\instrument, \positionSender2,
	\position1, Pseq([0, 1, 2, 3, 4, 5]),
	\position2, Pseq([7, 6, 5, 4, 3, 2]),
	\dur, Pfunc({~sequenceTempo2})
);

o = Pbind(
	\instrument, \testSin,
	\dur, 0.25,
	\pan, Pseq([1, -1], inf),
	\octave, 4,
	\degree, Pseq([1, 2, 3, 4, 5, 6])
);


p = Pbind(
	\instrument, \positionSender1,
	\position, Pseq([0, 1, 2, 3, 4, 5], inf),
	\dur, Pfunc({~sequenceTempo1})
).play;
)