domingo, 27 de febrero de 2011

mas y mas ProxySpace...

//ejemplo sonoro: track: iiinsnsbl3

:::click:descarga el audio:::
////escrito sobre emacs, pure:dyne 9.11
/////////////////////////////codigo://///////////////////////////
s.boot
s.quit
s.scope
////
p=ProxySpace.push(s);
p.fadeTime=1;
//////
s.record
///
TempoClock.tempo=115/60 //10/60//20/60//75/60;
/////
~o.play;

~uno={|ifrec=2|Normalizer.ar(RLPF.ar(Resonz.ar(LFTri.ar(Pulse.ar(Demand.kr(Impulse.kr(ifrec),0,Drand([1,2,4,8],inf)),0.5,80,90),0,0.5)*LFNoise0.ar(10000,0.1),Line.kr(220,10000,0.5),0.25),Demand.kr(Impulse.kr(4),0,Drand([800,1600,3200,6400,12000],inf)),0.25),0.05)};
~dos={|lft= -1,rght=1,ifrec=2,rfrec=2000|Normalizer.ar(Pan2.ar(BPF.ar(LFTri.ar(Pulse.ar(ifrec,0.5,6,4),0,0.25)*BrownNoise.ar(0.15),Demand.kr(Impulse.kr(ifrec),0,Drand([220,440,880,660],inf)),0.01),[lft,rght]),0.05)};
~tres={|ifrec=4,t_trig=0|EnvGen.ar(Env.perc(0.01,0.08),t_trig)*Normalizer.ar(Pulse.ar(Pulse.ar(ifrec,0.5,60,85),0.1,0.45)+SinOsc.ar(Pulse.ar(ifrec,0.5,60,85),0,0.75),0.95)};
~del={|dtim=0.05|CombC.ar(Mix(~tres.ar,~uno.ar,~dos.ar),0.25,dtim,0.8,0.55)};
~verb={FreeVerb.ar(~dos.ar,0.95,0.95,0.1,0.85)};
~pit={|prate=2,ifrec=1,rfreq=600|Compander.ar(Normalizer.ar(Resonz.ar(PitchShift.ar(Mix([~del.ar]),0.5,prate,0.95,0.025,0.5),rfreq,0.35),0.55,0.25),0,0.7,1,1,0.35,0.15)};
(
Tdef(\secs,{
a=Prand([1,1.3,1.7,2,2.2,2.5,2.9,3.2,3.4,3.7,4],inf).asStream;
b=Prand([0.5,2,1,4],inf).asStream;//~uno
c=Prand([0.5,1,2,4],inf).asStream;//~dos
d=Pwrand([0.25,0.5,0.75,1],[0.2,0.3,0.15,0.05],inf).asStream;    //~tres
e=Prand([100,200,400,800,1600],inf).asStream;
f=Prand([0.01,0.02,0.04,0.08],inf).asStream;
g=Prand([100,200,400,800,1600]+500,inf).asStream;
h=Pwrand([1,2,4],[0.2,0.3,0.15,0.05],inf).asStream;    //~tres
t=Pwrand([0.25,0.5,0.75,1],[0.05,0.55,0.25,0.15],inf).asStream;       
    inf.do{
        ~uno.set(\ifrec, b.next;
        ~dos.set(\ifrec, c.next);
        ~tres.set(\t_trig, d.next);
        ~tres.set(\ifrec, h.next);
        ~dos.set(\rfrec,g.next);
        ~pit.set(\rfreq, e.next);
        ~pit.set(\prate, a.next);
        ~del.set(\dtim, f.next);
        ~dos.set(\lft,[-1,1].choose);
        ~dos.set(\rght,[1, -1].choose);
        t.next.postln.wait;
}}
)
)
Tdef(\secs).play

///////controles
~o=      //////este para combinar los nodos
~o=~pit
~o=~uno
~o=~dos
~o=~tres
~o=~del
~o=~verb
~o=0
///
s.record


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

jueves, 10 de febrero de 2011

mas ProxySpace

//ejemplo sonoro: track: nnosprtamspltics

:::click:descarga el audio:::
////escrito sobre gedit, ubuntu 10.04
/////////////////////////////codigo://///////////////////////////
s.boot
s.quit
s.scope
////
p=ProxySpace.push(s)
p.fadeTime=0.5
p.free


~out.play
~sec={|t_trig=0,frec=60,oct=3|EnvGen.ar(Env.perc(0.5,5),t_trig)*LFTri.ar(frec.midicps/oct,0,0.3)*Saw.ar(frec.midicps/(oct)+2,1,0.5)}
~bombo={|dfrec=1|SinOsc.ar(Pulse.ar(Demand.kr(Impulse.kr(dfrec),0,Drand([1,2,4,8],inf)),0.5,80,120),0,0.25)}
~bombo2={|dfrec=2|SinOsc.ar(Pulse.ar(Demand.kr(Impulse.kr(dfrec),0,Drand([1,2],inf)),0.5,80,120),0,0.35)}
~canica={|dfrec=1,modmaxamp=1200|SinOsc.ar(Pulse.ar(Demand.kr(Impulse.kr(dfrec),0,Dseq([1,2,3,4,6,8,10,14,20,100],inf)),0.5,800,modmaxamp),0,0.15)}
~filt={|rq=0.2|RHPF.ar(~canica.ar,Line.kr(80,1200,10),rq,0.35)}
~rev2={FreeVerb.ar(~filt.ar,0.7,0.9,0.01)!2}
~rev={FreeVerb.ar(~sec.ar,1,0.95,0.01)!2}
~del={CombC.ar(~sec.ar,1,1,10)}
~del2={CombC.ar(~filt.ar,1,0.1,1)}
(
Tdef(\exp,{
    inf.do{
        ~sec.set(\t_trig,1);
        ~sec.set(\frec,[1,3,7].choose+[60,63,66,70,72].choose);
        ~sec.set(\oct,wchoose([1,1.5,2,3],[0.15,0.15,0.25,0.45]).postln);
        ~canica.set(\modmaxamp,[440,880,1200,2000].choose);
        wchoose([0.25,0.5,1,2],[0.15,0.15,0.25,0.45]).postln.wait;
}
})
)
Tdef(\exp).play////trigerea argumentos, no suena hasta ser igualado a ~out
Tdef(\exp).stop
/////hacer combinaciones de los nodos
~out=~del
~out=~rev+~del
~out=~bombo+~rev2+~rev+~filt+~sec+~del2
~out=~bombo2+~rev2+~rev+~del2+~del
~out=~rev+~rev2+~del+~del2+~filt
~out=~filt
~out=~rev+~filt
~out=0
...
////esto llama la mixer de nodos-proxy del ambiente igualado a"p"
ProxyMixer(p)
s.record

sábado, 5 de febrero de 2011

ProxySpace

... y para el primer Post de este blog...

Esta es una sesión de  ProxySpace.push(s) simple pero con resultados muy variados y ricos en armónicos, se trata de dos funciones y dos Tdef. Uno de ellos  a través de un if,  iguala la selección de un Array, creando una mezcla de las funciones de manera automática.
Lo
demás queda en modular los diferentes parámetros de las funciones para obtener distintos resultados sonoros(una opción seria dentro de estos u otros Tdef), con cuidado de no disparar de mas alguno de los parámetros; Una de las razones por la cual se uso parámetros de amplitud muy bajos.
/////ejemplo sonoro: track: cKrstlamb

:::click:descarga el audio:::
////escrito sobre gedit, ubuntu 10.04
/////////////////////////////codigo://////////////////////
s.boot
s.scope
FreqScope.new
/////
p=ProxySpace.push(s)
ProxyMixer.new(p)//muestra la mixer de los eventos del proxyspace
//p.free
p.fadeTime=4
////////

~out.play
(
(
~sint={
FreeVerb.ar(
FreeVerb.ar(
    HPF.ar(
        Pulse.ar(Demand.kr(Impulse.kr(Line.kr(1,0.5,0.5)),0,Drand([61,66,70,73,75,78,82,85,90].midicps/2,inf))
            ,-0.25,0.15)+
            Saw.ar(Demand.kr(Impulse.kr(Line.kr(1,0.25,0.5)),0,Drand([61,66,70,75,82,85].midicps,inf))
            ,0.3,0.15)
    ,/*MouseY.kr(45,10000).poll*/85,0.15)   
,0.75,1,0.05,0.5)
,1,0.9,1,0.5)
});
(
~sint1={|ffrec=620|
CombC.ar(
    LPF.ar(
        Saw.ar(Demand.kr(Impulse.kr(Line.kr(1,2,0.5)),0,Dseq([61,66,70,73,75,78,82,85].midicps/1.3,inf))
            ,0.1,0.1)+
            SinOsc.ar(Demand.kr(Impulse.kr(Line.kr(1,1.5,0.5)),0,Drand([61,66,70,73,75,78,82,85].midicps,inf))
            ,0,0.1)
    ,/*MouseX.kr(45,10000).poll*/ffrec,0.5)
,0.5,0.5,15,0.12)}
);
(
Tdef(\sec,{
    inf.do{
        ~sint1.set(\ffrec,[220,360,640,980].choose.postln);
        0.5.wait;
}
}
)
);
//combinador
(//combina las funciones cada 2 seg
Tdef(\comb,{
    inf.do{
       var res;       
        res=[1,2,3,4,5,6,7,8,9,10].choose.postln;
            if(res >= 5,{~out=~sint},{~out=~sint1});
    2.wait;
}}
)
);
)
Tdef(\sec).play//filtro del sint1
Tdef(\comb).play//combina las funciones
Tdef(\sec).stop
Tdef(\comb).stop//hay q apagar este tdef para usar otras igualaciones de ~out

~out=~sint+~sint1
~out=~sint
~out=~sint1
~out=0