miércoles, 16 de febrero de 2011

bizarythm

Algo ya mas parecido a una pieza, Esta es una experimentación rítmica basada en ProxySpace y la combinacion de Pbind y Tdef 's, algo similar a los resultados cuando se usan secuencias y patterns en #superCollider sin ProxySpace, por lo cual responde también a cambiar los bpm con TempoClock y así poder dar mas flexibilidad rítmica, la combinacion de los nodosProxy es libre y al gusto;como siempre!!. Una de las cualidades del Proxyspace es poder cambiar parámetros de una variable global en tiempo real, así que tambien queda jugar con los diferentes argumentos pudiendo evaluar la cantidad de veces que sea necesario la misma función con distintos parámetros.



//ejemplo sonoro: track: hhrniah

:::click:descarga el audio:::
////escrito sobre gedit, ubuntu 10.04
/////////////////////////////codigo://///////////////////////////
s.boot
s.quit
s.scope

//p.free
p=ProxySpace.push(s)
p.fadeTime=0.5
TempoClock.tempo=45/60 // 25/60 // 75/60

~out.play
(
(
~sint={|t_trig=0,frec=61,att=0.045,rel=0.5,maxffreq=900|
EnvGen.ar(Env.perc(att,rel),t_trig)*
RLPF.ar(
(LFTri.ar(frec.midicps,0.1,0.46)*Saw.ar(frec.midicps,0.3,0.48)),
XLine.ar(210,maxffreq,0.35),0.15);
}
);
(
Tdef(\tsint,{
f=Prand([60,63,67,70,72],inf).asStream;
g=Pseq([240,430,560,640,820,920,2000],inf).asStream;
h=Pwrand([60,63,67,70,72],[4,1,3,1,1],inf).asStream;
t=Prand([0.25,0.5,0.75,1,1.5,2],inf).asStream;
inf.do{
~sint.set(\t_trig,1);
~sint.set(\frec,f.next);
~sint.set(\frec,h.next);
~sint.set(\maxffreq,g.next);
~sint.set(\rel,2.5+[0.125,0.5,1].choose);
t.next.wait;
}}
)
);
)
Tdef(\tsint).play
Tdef(\tsint).stop
~sintrev={FreeVerb.ar(~sint.ar,1,1,0.1,0.45)}

~bomb={|t_trig=0,mfrq=1|EnvGen.ar(Env.perc(0.01,0.35),t_trig)*SinOsc.ar(Pulse.ar(mfrq,0.25,60,65),0.25,0.5)}
~tar={|t_trig=0|EnvGen.ar(Env.perc(0.01,0.15),t_trig)*Saw.ar(Mix([200,400,800,2000]),0.25,0.5)*WhiteNoise.ar(0.25)}
~kntras={|amp=0.5,t_trig=0|EnvGen.ar(Env.perc(0.025,0.1),t_trig)*(WhiteNoise.ar(amp)*PinkNoise.ar(amp))}
(
(
Tdef(\bomtar,{
var t2,mfreq;
mfreq=Pwrand([1,2,4],[0.45,0.45,0.1],inf).asStream;
t2=Pseq([0.125,0.25],inf).asStream;
inf.do{
var num;
num=wchoose([0,1],[0.6,0.4]);
if(num == 0,{~bomb.set(\t_trig,1)},{~tar.set(\t_trig,1)});
~bomb.set(\mfrq,mfreq.next.value.postln);
t2.next.wait;
}}
)
);
(
Tdef(\tkntras,{
var ampt/*mdt*/,t2;
ampt=Pseq([0.4,0.25,0.3,0.15],inf).asStream;
t2=Pseq([0.125,0.25],inf).asStream;
//mdt=Pwrand([0.02,0.04,0.05,0.8],[0.15,0.35,0.35,0.15],inf).asStream;
inf.do{
~kntras.set(\t_trig,1);
~kntras.set(\amp,ampt.next);
//~mastf.set(\deltim,mdt.next);
t2.next.wait;
}}
)
);
)
Tdef(\bomtar).play;
Tdef(\bomtar).stop;
Tdef(\tkntras).play;
Tdef(\tkntras).stop;
~rythrev={FreeVerb.ar([~bomb.ar,~tar.ar],0.3,0.65,0.1)!2};//quitar "!2" para panear totalmente tarola y bombo!

//~mastf={CombC.ar(~out.ar,0.5,Demand.kr(Impulse.kr(2),0,Drand([0.04,0.08,0.16,0.32],inf)),0.25)!2};
~mastf={|deltim=1|RLPF.ar(CombC.ar(Mix([~rythrev.ar,~kntras.ar]),0.5,deltim,1,0.5),16000,0.25,0.89)};//control de mouse en la frecuencia del filtro
(
Tdef(\tmast,{
var mdt,t3;
t3=Pwrand([0.125,0.25,0.5,0.75,1],[0.1,0.1,0.4,0.3,0.1],inf).asStream;
mdt=Pwrand([0.02,0.04,0.03,0.8],[0.15,0.35,0.35,0.15],inf).asStream;
inf.do{
~mastf.set(\deltim,mdt.next);
t3.next.wait;
}}
)
);
Tdef(\tmast).play;
Tdef(\tmast).stop;
//////la diferencia de las funciones de ~bass y ~bassp es la posicion del filtro
(//openbass
~bass={|frec1=54,frec2=54,t_trig=0|
RLPF.ar(
EnvGen.ar(Env.asr(0.05,5,1),t_trig)*

Saw.ar([frec1.midicps,frec2.midicps],0.25,0.45)+
LFTri.ar([frec1.midicps,frec2.midicps],-0.25,0.45);
,10800,1,0.65);
}
);
(//bajo punteado
~bassp={|frec1=54,frec2=54,t_trig=0|
EnvGen.ar(Env.asr(0.05,5,1),t_trig)*
RLPF.ar(
Saw.ar([frec1.midicps,frec2.midicps],0.25,0.45)+
LFTri.ar([frec1.midicps,frec2.midicps],-0.25,0.45);
,10800,1,0.65);
}
);
(
Tdef(\tbass,{
var t4,f1,f2;
f2=Pseq([54,59,61,56,64] -24,inf).asStream;
f1=Pseq([54,59,61,56,64] -24.25,inf).asStream;
t4=Pwrand([0.25,0.5,0.75,1],[0.05,0.35,0.15,0.45],inf).asStream;
inf.do{
~bass.set(\t_trig,1);
~bass.set(\frec1,f1.next);
~bass.set(\frec2,f2.next);
~bassp.set(\t_trig,1);
~bassp.set(\frec1,f1.next);
~bassp.set(\frec2,f2.next);
t4.next.wait;
}}
)
);
Tdef(\tbass).play;
Tdef(\tbass).stop;
//~out.play;
~out= /////esta linea para combinarlos al gusto
~out=~sintrev;
~out=~rythrev;
~out=~kntras;
~out=~bass;//bajo abierto
~out=~bassp;//bajo punteado
~out=~mastf;
~out=~kntras+~bass+~rythrev+~mastf+~sintrev;
//~mastf.play
//~mastf.stop

No hay comentarios:

Publicar un comentario