// building a bridge of peace between client and server // rohrhuber 12/03 // preparations ( b = 16; // scale buffer number n = 6; // 6 tone scale s.sendMsg("/b_alloc", b, n);// allocate scale buffer ) // create a random scale ( var steps, scale, sum=0; steps = Array.fill(n - 1, { [1, 2, 3].choose }); scale = Array.with(0); steps.do { arg item, i; scale = scale.add(sum = item + sum) }; f = scale.postln; s.sendBundle(nil, ["/b_setn", b, 0, f.size] ++ f); ) // send synth definitions ( SynthDef(\sinsin, { arg out=0, freq=440, amp=0.1, pan=0, gate=1; var z; z = SinOsc.ar(freq * Line.kr(1.5, 1, 0.01)) * Line.kr(amp * 0.7, 0, ExpRand(0.1, 0.8), doneAction:2); Out.ar(out, Pan2.ar(z, pan)); }).send(s); SynthDef("wind", { arg out; var freq, z; freq = midicps( DegreeToKey.kr(b, LFNoise0.kr(7 / 8 * 1, n/2, n/2), f.last, 1, 72) + LFNoise1.kr([1,1] * 8, 0.3) ); z = Resonz.ar(PinkNoise.ar(LFNoise1.ar(freq *[1,1], 20).max(0)), freq, 0.01); Out.ar(out, z); }).send(s) ) // play server and client process together ( Pbind( \instrument, \sinsin, \scale, Pfunc({ f }), \dur, 1/7 * Prand([Pn(1, 12), Pn(3, 4)], 24), \octave, 6, \degree, Pfunc({ 10.rand }), \amp, 0.2, \player, NoteDurPlayer.new ).play; TempoClock.default.play({ s.sendBundle(s.latency, ["/s_new", "wind", 1345]); nil }); ) // evaluate this to create random scale ( var steps, scale, sum=0; steps = Array.fill(n - 1, { [1, 2, 3].choose }); scale = Array.with(0); steps.do { arg item, i; scale = scale.add(sum = item + sum) }; f = scale.postln; s.sendBundle(nil, ["/b_setn", b, 0, f.size] ++ f); ) // detune ( 5.do { var x; x = f.size.rand; f[x] = f[x] + 1.0.rand2 }; s.sendBundle(nil, ["/b_setn", b, 0, f.size] ++ f); ) ***************/* authors so far: jrh */ |