domingo, 4 de diciembre de 2011

domingo, 10 de julio de 2011

hackpact mx

codigo por Eduardo H Obieta, reBlogeado de http://hackpact.laad.com.mx #hackPactMx jul 01 -- jul 31 2011
/////////////////////////////

Hackpact Day#4 LAAd from Eduardo H Obieta (LAAd)
/////////////////////////////
////escrito en supercollider sobre OSX
//estudiando un poco mas acerca de la comunicación OSC de SuperCollider y Fluxus
//código SuperCollider
s.boot;
f=Server("fluxus", NetAddr("127.0.0.1", 4444));
(
(SynthDef(\synth0,{|wmul=0.5, wsfreq=0.1, wsmul=2000, wsadd=2600, lmul=0.035, pan=0|
var son, son1, son2, paneo, freq1, mul1;
son=HPF.ar(WhiteNoise.ar(wmul,0),SinOsc.kr(wsfreq,0,wsmul,wsadd),lmul,0);
son=son+Dust.ar(15);
paneo=Pan2.ar(son,pan);
Out.ar(0,paneo);
}).send(s)
);
(SynthDef(\synth1, {|freq=120, mul=0.5, pan=0|
var env, paneo, son1, dem;
son1=SinOsc.ar(freq,0,mul)+SinOsc.ar(freq*2,0,0.1);
paneo=Pan2.ar(son1,pan);
env=EnvGen.kr(Env.perc(0.005, 0.2, 1, -4),doneAction:2);
Out.ar(0,paneo);
}).send(s)
);
(SynthDef(\synth2, {|freq=40, dur=0.2, mul=0.55, amp=1|
var sig, env;
sig=SinOsc.ar(freq,pi/2,mul)+Saw.ar(freq,0.121)!2;
env=EnvGen.kr(Env.perc(0.05,dur,1,-8),doneAction:2);
Out.ar(0,sig*env*1*amp);
}).send(s)
);
(SynthDef(\synth3, {|freq=80, dur=0.4, amp=1, factor=1.2, ampB=0.3, durB=0.05|
var sig, env;
sig=Pan2.ar(Mix(SinOsc.ar(XLine.kr(freq*factor,freq,dur)*[1,1.1,1.25],pi/2,amp/3)),0);
sig=sig+EnvGen.ar(Env([1,0],[0.05]));
sig=sig+(BrownNoise.ar(ampB)*EnvGen.kr(Env.perc(0.01,durB)));
env=EnvGen.kr(Env.perc(0.01,dur),doneAction:2);
Out.ar(0,sig*env)
}).send(s)
);
(SynthDef(\synth4, {|freq=12000, mul=0.5, pan=0, rel=0.2|
var sig, env;
sig=HPF.ar(WhiteNoise.ar,freq,mul,0);
sig=Pan2.ar(sig,pan);
env=EnvGen.kr(Env.perc(0.01,rel,0.7,-8),doneAction:2);
Out.ar(0,sig*env);
}).send(s);
);
(SynthDef(\synth5, {|freq=120, mul=0.5, pan=0|
var env, paneo, son1;
son1=Saw.ar(freq*0.25, mul, 0)*SinOsc.ar(60.midicps);
paneo=Pan2.ar(son1,pan);
env=EnvGen.kr(Env.perc(0.01, 1, 0.75, -10),doneAction:2);
Out.ar(0,paneo*env);
}).send(s)
);
)
//TDEF
(
(j=Pseq([Pseq([60,64,67,69],8),Pseq([63,68,72,75],8)],inf).asStream;
k=Pseq([0.2,0.2,0.4,0.2,0.4,0.2,0.2,0.2],inf).asStream;
a=Tdef(\fluxus, {
inf.do {
k.next.wait;
Synth(\synth1,[\freq, j.next]);
f.sendMsg("/uno", j.next);
}}));
(l=Pseq([60,65,69,72,60,65,69,75,60,65,69,72],inf).asStream;
m=Prand([0.4,0.2],inf).asStream;
b=Tdef(\fluxus2, {
inf.do {
m.next.wait;
Synth(\synth2, [\freq, l.next]);
f.sendMsg("/dos", l.next);
}}));
(n=Pseq([15,30,45,60],inf).asStream;
o=Pseq([0.1,0.2,0.1,0.4,0.2,0.2,0.2,0.1,0.2,0.4],inf).asStream;
c=Tdef(\fluxus3, {
inf.do {
o.next.wait;
Synth(\synth3,[\freq, 1.5*n.next]);
f.sendMsg("/tre", n.next);
}}));
(p=Pseq([12000,14000,17000],inf).asStream;
q=Pseq([0.1,0.1,0.1,0.1,0.05,0.05,0.1,0.1,0.05],inf).asStream;
d=Tdef(\fluxus4, {
inf.do {
q.next.wait;
Synth(\synth4,[\freq, p.next]);
f.sendMsg("/cua", p.next);
}}));
(
u=Pseq([0.1,0.1,0.2,0.2,0.1,0.1,0.2,0.1,0.5],inf).asStream;
e=Tdef(\fluxus5, {
inf.do {
u.next.wait;
t=([84,89,93,96,101,103,105]).choose;
Synth(\synth5,[\freq, t.midicps]);
f.sendMsg("/cin", t.next);
}}));
)
z=Synth(\synth0).play;
a.play
b.play
c.play
d.play
e.play

a.stop
b.stop
c.stop
d.stop
e.stop
z.free

s.quit;
//código "fluxus"
(clear)
(osc-source "4444")
(define rotx 0)
(define roty 0)
(define rotz 0)
(define esc1 0)
(define esc2 0)
(define (hackpact)
(clear-colour (* 0.25 (flxrnd)))
(with-state
(rotate (vector (+ (* 5 (time)) (* 0.2 esc1)) (* 45 (time)) 0))
(cond ((osc-msg "/tre")
(set! esc1 (osc 0))))
(scale (vector 1 (* 0.5 esc1) 0.01))
(push)
(translate (vector -21 0 -180))
(for ((n (in-range 20)))
(translate (vector 2 0 0))
(draw-cube))
(pop)
)
(with-state
(cond ((osc-msg "/cin")
(set! esc2 (* 0.5 (osc 0)))))
(scale (vector 1 0.2 0.2))
(push)
(hint-none)
(hint-wire)
(rotate (vector -70 0 0))
(translate (vector 0 -40 0))
(for ((n (in-range 60)))
(scale (vector (* 0.025 esc2) 1 0.2))
(translate (vector 0 2 0))
(draw-cube))
(pop))
(with-state
(push)
(hint-wire)
(cond ((osc-msg "/uno")
(set! rotx (osc 0))))
(cond ((osc-msg "/dos")
(set! roty (osc 0))))
(cond ((osc-msg "/tre")
(set! rotz (osc 0))))
(scale (vector 4 (* 0.03 rotx) 5))
(colour (vector (* (* 0.02 rotx) (sin (time)))
(* (* 0.02 roty) (cos (time)))
(* (* 0.02 rotz) (sin (time)))))
(rotate (vector (* 0.2 (* (sin (time)) rotx)) (* roty (* 0.5 (cos (time)))) rotz))
(draw-cube)
(pop)))
(every-frame (hackpact))

lunes, 4 de julio de 2011

hackpact dia #3

codigo reBlogeado de http://hackpact.laad.com.mx #hackPactMx jul 01 -- jul 31 2011

//ejemplo sonoro: track: hp-03jul11

:::click:descarga el audio:::
////escrito en Gedit sobre PureDyne 9.11
/////////////codigo:////////////////
////hackpact mx #03jul11
s.boot;
s.scope;
s.meter;
/////
(//<------evalua todo de una vez*****
TempoClock.default.tempo=58/60;
(///timbres
(
SynthDef(\bass,{|out,gate=1,amp,nota|
    var vas,env;
        vas=GVerb.ar(RLPF.ar((SinOsc.ar(nota.midicps,mul:0.75)+
                  Pulse.ar(2+nota.cpsmidi,mul:0.45))*
                  SinOsc.ar(nota.midicps)*
                      Pulse.ar(2+nota.cpsmidi),
                 Line.kr(12000,40,0.4),0.25),
            7,1,0.01);
        env=EnvGen.ar(Env.asr(0.05,1,0.1),gate,doneAction:2);
    Out.ar(out,Pan2.ar(vas*env,[1,-1])*amp);
}).add
);
(
SynthDef(\bombo,{|out,gate=1,amp|
    var kick,env;
        kick=SinOsc.ar(60)+Saw.ar(Pulse.ar(2,0.3,60,75));
        env=EnvGen.ar(Env.perc(0.01,0.3),gate,doneAction:2);
    Out.ar(out,Pan2.ar(kick*env,[0.95,-1])*amp);
}).add
);
(
SynthDef(\tarola,{|out,gate=1,amp,deltime|
    var tar,env;
        tar=BPF.ar(Saw.ar([440,880,1600,3200],mul:0.5)+WhiteNoise.ar(0.85),2040,0.75);
        tar=CombC.ar(tar,0.5,deltime,0.5);
        env=EnvGen.ar(Env.perc(0.01,0.25),gate,doneAction:2);
    Out.ar(out,Pan2.ar(tar*env,[0.75,-0.75])*amp);
}).add
);
(
SynthDef(\hhts,{|out,gate=1,amp|
    var hats,env;
        hats=RHPF.ar(WhiteNoise.ar(0.25),2000,0.25);
        hats=CombC.ar(hats,0.5,0.02,4);
        env=EnvGen.ar(Env.perc(0.025,0.05),gate,doneAction:2);
    Out.ar(out,Pan2.ar(hats*env,[1,-1])*amp);
}).add
);
);
(////////secuencias
(
Pdef(\bassec,(
    Pbind(\instrument, \bass,
        \dur, Pxrand([Pseq([0.25,0.25,0.5,0.75,0.25],1),   
                Pseq([0.5,0.5,0.25,0.75],1),
                      Pseq([0.75,0.25,1],1),
                          Pseq([0.75,0.5,0.25,0.5],1)],inf),
        \nota, Prand([61,66,70,73,78]-24,inf),
        \amp, Pseq([0.25,0],inf),
        \out, 0
)
))
);
(
Pdef(\bombsec,(
    Pbind(\instrument, \bombo,
        \dur, Pxrand([Pseq([0.25,0.25,0.5,0.75,0.25],1),   
                Pseq([0.5,0.5,0.25,0.75],1),
                      Pseq([0.75,0.25,1],1),
                          Pseq([0.75,0.5,0.25,0.5],1)],inf),
        \amp, Pseq([0.65,0],inf),
        \out, 0
)
))
);
(
Pdef(\tarsec,(
    Pbind(\instrument, \tarola,
        \dur, Pseq([Pseq([0.5,0.5,0.75,0.25],2),   
                Pseq([0.5,0.5,0.5,0.125,0.125,0.25],2),
                      Pseq([0.5,0.5,0.5,0.5],2),
                          Pseq([0.5,0.5,0.5,0.125,0.125,0.125,0.125],2)],inf),
        \amp, Pseq([0,0.75],inf),
        \deltime, Pwrand([0,0.02,0.04,0.05,0.075,0.08,0.01],[0.3,0.17,0.19,0.05,0.03,0.01,0.15],inf),
        \out, 0
)
))
);
(
Pdef(\hatsec,(
    Pbind(\instrument, \hhts,
        \dur, Pseq([Pseq([0.125,0.125,0.25,0.25,0.25],4),   
                Pseq([0.5,0.25,0.25,0.125,0.125,0.25,0.5],4),
                      Pseq([0.5,0.125,0.5,0.125,0.25,0.25],4),
                          Pseq([0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125],1)],inf),
        \amp, 0.25,
        \out, 0
)
))
);
);
);
/////controles
(//todos a la vez
Pdef(\bassec).play;
Pdef(\bombsec).play;
Pdef(\tarsec).play;
Pdef(\hatsec).play;
);
Pdef(\bassec).stop;
Pdef(\bombsec).stop;
Pdef(\tarsec).stop;
Pdef(\hatsec).stop;
///
s.record
s.stopRecording

martes, 28 de junio de 2011

HardCore kicks

just harshNoise trip!

//ejemplo sonoro: track: HxCkcks

:::click:descarga el audio:::
////escrito en Gedit sobre PureDyne 9.11
/////////////codigo:////////////////
s.boot;
s.quit;
s.scope;
FreqScope.new;
//
p=ProxySpace.push(s);
p.fadeTime=10//0.001
//p.pop
/////
~o.play
///
~bombo={Pan2.ar(Limiter.ar(LFTri.ar(Pulse.ar(Demand.kr(Impulse.kr(4),0,Dseq([1,2,3,4],inf)),0.5,60,65),0,0.9),0.25),[1,-1])};
~bombo1={Pan2.ar(Pulse.ar(Pulse.ar([2,4],Demand.kr(Impulse.kr(1),0,Drand([0.1,0.2,0.3,0.4,0.5],inf)),60,65),Demand.kr(Impulse.kr(1),0,Drand([0.1,0.2,0.3,0.4,0.5],inf)),0.15),[0.9,-0.8])};
~bombo2={Pulse.ar(Pulse.ar([2,4],Demand.kr(Impulse.kr(1),0,Drand([0.1,0.2,0.3,0.4,0.5],inf)),60,65),Demand.kr(Impulse.kr(1),0,Drand([0.1,0.2,0.3,0.4,0.5],inf)),0.15)};
~bombo3={Pan2.ar(Limiter.ar(Pulse.ar(/*Saw*/Pulse.ar(Demand.kr(Impulse.kr(Demand.kr(Impulse.kr(2),0,Drand([0.5,1,1.5,2,3,4,6,8],inf))),0,Dseq([1,2,3,4],inf)),Demand.kr(Impulse.kr(1),0,Drand([0.1,0.2,0.3,0.4,0.5],inf)),60,65),Demand.kr(Impulse.kr(1),0,Drand([0.1,0.2,0.3,0.4,0.5],inf)),0.5),0.15),[0.8,-0.7])};
~filtro={RLPF.ar(~bombo3.ar,Demand.kr(Impulse.kr(2),0,Dxrand([120,400,800,1600,3200,6400,12800],inf)),MouseY.kr(0.01,1),0.5)};//Demand.kr(Impulse.kr(2),0,Prand([50,100,200,400,800,1600,3200],inf))//;
~filtro1={RLPF.ar(~bombo3.ar,MouseX.kr(20,12000),MouseY.kr(0.01,1),0.5)};
~lata={|t_trig=0|EnvGen.ar(Env.perc(0.01,0.5),t_trig)*Pan2.ar(FreeVerb.ar(PinkNoise.ar(0.45),0.65,0.45,0.01),[1,-1])};
(
t=Pwrand([2,4,8],[0.13,0.13,0.73],inf).asStream;
r=Pxrand([1,1.5,2,2.5,3,3.5],inf).asStream;
v=Prand([5],inf).asStream;
Tdef(\tarsec,{
    inf.do{
        ~lata.set(\t_trig,1);
        ~vlata.set(\room,r.next.value.postln);
        ~vlata.set(\vtim,v.next.value.postln);
        t.next.wait;
          }
         })
);
~vlata={|room=5,vtim=6|GVerb.ar(~lata.ar,room,vtim,0.15,mul:0.85)};
~sint={|nota=48,t_trig=0,att,dec|EnvGen.ar(Env.perc(att,dec),t_trig)*Pulse.ar(nota.midicps,0.2,0.05)};
(
u=Pwrand([16,6,4,8],[0.05,0.15,0.2,0.6],inf).asStream;
n=Pseq([48,43,51,60],inf).asStream;
Tdef(\sintsec,{
    inf.do{
        ~sint.set(\t_trig,1);
        ~sint.set(\nota,n.next);
        ~sint.set(\att,0.9);
        ~sint.set(\dec,4);
        u.next.wait;
          }
         })
);
~vsint={GVerb.ar(~sint.ar,10,15,0.05,mul: 1.1)};
////////////control
Tdef(\tarsec).play;
Tdef(\sintsec).play;
~o=~vsint//~vlata;
~o=~bombo+~vsint//~vlata;
~o=~vsint+~vlata
~o=~bombo1+~vlata+~vsint;
~o=~bombo2+~vlata+~vsint;
~o=~bombo3//+~vlata+~vsint;
~o=~filtro1+~vlata;
~o=~filtro1+~vsint+~vlata;
~o=~filtro1+~bombo1+~vsint+~vlata//~filtro
~o=~vlata
~o=0;
Tdef(\tarsec).stop
Tdef(\sintsec).stop

//////////
s.record;
s.stopRecording;
s.meter;

miércoles, 18 de mayo de 2011

melodicBox

Esta vez nos encontramos en un paisaje sonoro con un conjunto de melodías secuenciadas con Pdef y Pbind, pero que parten de un solo SynthDef, esto es; un solo sintetizador  corriendo tres instancias a manera de voces (bajo,tenor,mezo) el cual a su vez es ruteado por los canales estéreo 30,32 y 34 hacia otros 3 synthdef los cuales hacen la función de efectos, recibiendo la señal con el objeto In.ar.
El resultado es una una de casi infinitas posibilidades y aun contiene muchos parámetros modulables, la secuencia de las notas se encuentra en la tonalidad de "C" así que es un patch que puede tocar por horas melodías agradables al oído y con variaciones ricas en su timbre, fuerza y velocidad.

//ejemplo sonoro: track: m_melbx

:::click:descarga el audio:::

////escrito en Gedit sobre PureDyne 9.11
/////////////codigo:////////////////
 s.boot;
s.quit
s.scope;
/////
TempoClock.default.tempo=72/60//..10/60
///
(
(
SynthDef(\mastfx2,{|gate=1,amp=0.9,tes=1,out=34|
    var fx,env;
        fx=PitchShift.ar(In.ar(32),0.75,tes);
        env=EnvGen.ar(Env.adsr(0.01,0.25,0.98,0.01),gate,doneAction: 2);
    Normalizer.ar(Out.ar(out,Pan2.ar(fx*env,[0.95,-0.82])),amp);
}).add;
);
(
SynthDef(\mastfx,{|gate=1,amp=0.9,deltime=0.1,out=0|
    var fx,env;
        fx=Limiter.ar(In.ar(30),0.98);
        fx=CombC.ar(fx,0.5,deltime,0.5);
        fx=FreeVerb.ar(fx,0.35,0.9,0.01);
        env=EnvGen.ar(Env.adsr(0.01,0.25,0.98,0.01),gate,doneAction: 2);
    Normalizer.ar(Out.ar(out,Pan2.ar(fx*env,[0.95,-0.82])),amp);
}).add;
);
(
SynthDef(\rev,{|gate=1,amp=1|
    var fx,env;
        fx=In.ar(34);
        fx=DelayC.ar(fx,0.25,0.15);
        fx=FreeVerb.ar(fx,0.65,0.95,0.01,1.5);
        env=EnvGen.ar(Env.adsr(0.01,0.25,0.98,0.01),gate,doneAction: 2);
    Normalizer.ar(Out.ar(0,Pan2.ar(fx*env,[0.95,-0.82])),amp);
}).add;
);
(//sinte
SynthDef(\timbre,{|gate=1,nota=60,amp=0.95,irdist=0.25,amp2=0.85,panl=1,rel=2,panr= -1,out=0|
    var tono,tono2,env;
        tono=Mix([LFTri.ar(nota.midicps,0,0.6)*LFPulse.ar(LFNoise0.ar(nota.midicps,0.5,0.26),0.6),
            Saw.ar(nota.midicps,0.5,0.6)],Saw.ar(nota.midicps,0,0.75));
        tono=InRange.ar(tono,0,irdist);
        tono=FreeVerb.ar(tono,0.85,0.9,0.01);
        tono=RLPF.ar(tono,Line.kr(120,3350,0.25),0.95);
        tono=CombC.ar(tono,1,0.25,2);
        tono2=FreeVerb.ar(SinOsc.ar(nota.midicps,0,amp2),0.3,0.85,0.75);
        env=EnvGen.ar(Env.perc(0.15,rel),gate,doneAction: 2);
    Normalizer.ar(Limiter.ar(Out.ar(out,Pan2.ar(Mix.new([tono,tono2])*env,[panl,panr])*amp),0.05),0.85)
}).add
);
///secuencias voces
(///FX
Pdef(\fxseq,
    Pbind(\instrument, \mastfx,
        \dur, Pwrand([0.5,0.25,0.75,1],[0.7,0.2,0.075,0.025],inf),
        \deltime, Prand([0.01,0.02,0.03,0.04,0.05,0.07,0.09,1],inf),
        \amp, Pn([1,1],inf),
        \out, Pn([[0,34],[0,34]],inf)
)
)
);
(///FX2
Pdef(\fxseq2,
    Pbind(\instrument, \mastfx2,
        \dur, Prand([1,0.5,2],inf),
        \amp, Pseq([0.95,1],inf),
        \tes, Prand([1,1.5,2,2.7,3.3],inf),
        \out, Prand([34,0],inf)
)
)
);
(///bajo
Pdef(\secuenciaescala,
    Pbind(\instrument, \timbre,
        \dur, Pwrand([2,3,0.5,1]*1/*este valor altera la velocidad de la duracion*/,[0.3,0.3,0.05,0.35],inf),
        \nota, Prand([60,62,64,65,67,69,71,72]-24,inf),
        \amp2, Pseq([0.35,0.46],inf),
        \amp, Pseq([0.35],inf),
        \rel, Pwrand([1,1.5,2],[0.2,0.3,0.5],inf),
        \irdist, Prand([0.25,0.32,0.4],inf),
        \out, Pseq([[0,30,34],[34]],inf)//[0,32,34]//[0,32]//30

)
)
);
(//segunda voz
Pdef(\secuenciaescala2,
    Pbind(\instrument, \timbre,
        \dur, Pwrand([1,2]/2,[0.6,0.4]*1,inf),
        \nota, Prand([60,62,64,65,67,69,71,72],inf),
        \panl, Prand([-0.2, -0.5, -1],inf),
        \panr, Pseq([0.8,0.6,0.2],inf),
        \amp2, Pseq([0.5,0.45],inf),
        \rel, Pwrand([0.5,0.75,1,1.25],[0.2,0.3,0.45,0.05],inf),
        \irdist, Prand([0.23,0.45,0.55],inf),
        \out, Prand([[32,34],[30,0]],inf)//[32,34]//30
)
)
);
(////3er voz
Pdef(\secuenciaescala3,
    Pbind(\instrument, \timbre,
        \dur, Pwrand([0.5,0.25,0.75,1]*2,[0.3,0.4,0.2,0.1],inf),
        \nota, Prand([60,64,67,72]+7,inf),
        \panl, Pseq([0.1,0.3,0.5,0.7,0.9],inf),
        \panr, Pseq([-1, -0.8, -0.6, -0.4, -0.2],inf),
        \amp2, Pseq([0.35,0.4],inf),
        \rel, Pwrand([3,2.5,2,1],[0.2,0.3,0.35,0.1],inf),
        \irdist, Prand([0.35,0.4,0.5,0.6],inf),
        \out, Pwrand([[0,34],[0,32,34],[0,30,34],[30,34]],[0.5,0.1,0.2,0.2],inf)//[0,34,32]//[0,30,32]//0
)
)
);
);

//////declarar primero los efectos
Synth(\rev)//fx
Pdef(\fxseq).play;//fx
Pdef(\fxseq2).play;//fx
(
Pdef(\secuenciaescala3).play;
Pdef(\secuenciaescala2).play;
Pdef(\secuenciaescala).play;
);
Pdef(\secuenciaescala3).stop;
Pdef(\secuenciaescala2).stop;
Pdef(\secuenciaescala).stop;
s.record;
s.stopRecording

martes, 12 de abril de 2011

GUI SCWindow o JSCWindow

Esta vez Jorge Ramirez nos comparte un pequeño patch con un código que bien vale la pena leer mas de dos veces. Incorporando un GUI con 2 botones como trigger de cada SynthDef y síntesis granular dinámica e impredecible con un buen juego de paneos aleatorios controlados a través del objeto Routine el cual contiene también los SCWindow y SCButton. Ya que los GUI en SuperCollider para plataformas Linux y Windows son basados en JAVA, no hay que olvidar incorporar una "J" al script ( SCWindow - JSCWindow) para que este funcione.

El ejemplo sonoro nos muestra ambientes eléctricos, pulsos erráticos y movimientos sutiles, en fin, sintesis de audio! :)

//ejemplo sonoro: track: yeah-nah

:::click:descarga el audio:::

GUI screenshot
http://www.interela.com/
////escrito sobre SuperCollider en OSX
/////////////codigo:////////////////
 (
SynthDef("sino2", {  |freq, pan|
var signal, env;
signal = RHPF.ar(FSinOsc.ar(LFSaw.ar(freq,0, 1,10.2)*freq,0,0.1 ).distort*LFPulse.ar(SinOsc.kr(3),0,rrand(0.3,0.1),0.2), 0,0.125,0.75);
 signal= DelayC.ar(signal*0.5, 0.068, 0.068, 0, signal);
 signal= Pan2.ar(signal, pan);
 env= EnvGen.kr(Env.perc(0.06, 0.3, 0.4, 15),doneAction: 2);
 Out.ar(0,signal*env)}).send(s)
);
(
var rutina, ventana, boton, synth;

rutina = Routine({
loop({ s.sendMsg("/s_new","sino2", -1,0,1,
\freq, exprand(3100.0, 4400.0), \pan, 1.0.rand2);

rrand(0.25, 0.125).wait})});
ventana = SCWindow("sino", Rect(100, 100, 200, 200));
boton= SCButton(ventana, Rect(10, 10, 200,200));

boton.states=[["nah!", Color.white, Color(1.0, 0.6)], ["yea!", Color.yellow]];

boton.font= Font(\Arial, 100);
boton.action= {|estado| if(estado.value==1,{rutina.reset.play}, {rutina.stop})
 };
ventana.front)

(
SynthDef("sino", {  |freq, pan|
var signal, env;
signal = RHPF.ar(FSinOsc.ar(LFSaw.ar(freq,0, 1,10.2)*freq,0,0.06 ).distort(LFNoise2.kr(1))*LFPulse.ar(SinOsc.kr(30),0,rrand(0.3,0.1),Line.kr(0.91, 0.375,0.1)), 0,0.125,0.a25);
 signal= DelayC.ar(signal*0.5, 0.068, 0.068, 0, signal);
 signal= Pan2.ar(signal, pan)1
 env= EnvGen.kr(Env.perc(0.16, 0.6, 0.54, 15),
 doneAction: 2);
 Out.ar(0,signal*env)}).send(s)
);
(
var rutina, ventana, boton, synth;

rutina = Routine({
loop({ s.sendMsg("/s_new","sino", -1,0,1,
\freq, exprand(4100.0, 5400.0), \pan, 1.0.rand2);

rrand(0.15, 0.25).wait})});
ventana = SCWindow("sino", Rect(100, 100, 200, 200));
boton= SCButton(ventana, Rect(10, 10, 200,200));

boton.states=[["nah!", Color.white, Color(1.0, 0.6)], ["yea!", Color.yellow]];

boton.font= Font(\Arial, 100);
boton.action= {|estado| if(estado.value==1,{rutina.reset.play}, {rutina.stop})
 };
ventana.front)
//////////
s.record
s.stopRecording

lunes, 28 de marzo de 2011

hardwareBufferSize - latencia

Este video fue posteado en diciembre del 2010, esta hecho con SynthDef, Pdef y Tdef, principales elementos para la secuencia de patrones, e incorporando una improvisación de bajo a través de AudioIn.ar. dado a que no todas las interfaces de audio son iguales, se utilizo un serverOptions para optimizar la latencia de entrada con: s.options.hardwareBufferSize, la formula para la latencia es la siguiente:

( I/O periods * frames) / sample_rate = latency(ms);
//periods: periodos de entrada y salida;
////frames: numero de muestreos de captura por delante de la senal;
/////sample_rate: frecuencia de muestreo utilizada

En este caso, quedando de la sig manera:

(2 * 578) = 1156 / 44100hz = 2.6ms //una latencia manejable para tocar "casi" en tiempo real. 
nota:
*declara el serverOptions antes de prender el servidor
*si bajas demasiado la latencia y tu tarjeta no la puede procesar, escucharas clipear el audio de entrada
*aprende sobre  LATENCIA
/////////

trippin' supercollider + bass improvisation dec2010
////escrito sobre SuperCollider para Windows
///////////////////////codigo://////////////////////////////
s.options.hardwareBufferSize=1156 //declara antes de prender el servidor
s.boot
s.quit
s.scope
TempoClock.default.tempo=75/60 // 85/60
(
(
SynthDef(\bass,{|gate=1,out=0,vol=1,mix=0.5,room=0.9,damp=0.01|
var in,env;
in=AudioIn.ar(2);
in=FreeVerb.ar(in,mix,room,damp,1.5);
env=EnvGen.ar(Env.asr(0.001,0.98,0.001),gate,doneAction:2);
Out.ar(out,Pan2.ar(in*env,[0.9,-1])*vol)
}).memStore
);
(
SynthDef(\masterfx,{|gate=1,freq=1,ancho=0.1,out=0,vol=1,mix=0.5,room=0.9,damp=0.01,delt=0.01,delr=0.4|
var sig,env;
sig=In.ar(30);
sig=FreeVerb.ar(sig,mix,room,damp,1.5);
sig=CombC.ar(sig,0.1,delt,delr);
env=EnvGen.ar(Env.asr(0.01,0.98,0.01),gate,doneAction: 2);
Out.ar(out,Pan2.ar(sig*env,[1,-1])*vol)
}).memStore
);
(
SynthDef(\masterfx2,{|gate=1,freq=1,ancho=0.1,out=0,vol=1,mix=0.7,room=0.9,damp=0.01,delt=0.1,delr=1|
var sig,env;
sig=In.ar(32);
sig=FreeVerb.ar(sig,mix,room,damp,1);
sig=CombC.ar(sig,0.25,delt,delr);
env=EnvGen.ar(Env.asr(0.01,0.98,0.01),gate,doneAction: 2);
Out.ar(out,Pan2.ar(sig*env,[1,-0.85])*vol)
}).memStore
);
(
SynthDef(\ambient,{|gate=1,vol=1,fase=0.25,freq=85,pizq= -1,pder=0.9,out=32|
var sig,env;
sig=Saw.ar(freq,fase,1)*Pulse.ar(freq/2,0.5,0.5);
sig=FreeVerb.ar(sig,1,1,0.05);
env=EnvGen.ar(Env.asr(0.8,0.1,0.1),gate,doneAction: 2);
Out.ar(out,Pan2.ar(sig*env,[pizq,pder])*vol)
}).memStore
);
(
SynthDef(\bombo,{|gate=1,freq=0.8,ancho=0.1,out=30,vol=1|
var sig,env;
sig=SinOsc.ar(Pulse.ar(freq,ancho,80,115),0.2,0.7)*SinOsc.ar(Pulse.ar(1.2,ancho,80,115),0.1,0.7);
env=EnvGen.ar(Env.perc(0.01,0.25),gate,doneAction: 2);
Out.ar(out,Pan2.ar(sig*env,[1,-1])*vol)
}).memStore
);
(
SynthDef(\tarola,{|gate=1,freq=2,fase=0,ancho=0.5,out=30,vol=1|
var sig,env;
sig=WhiteNoise.ar(0.4)*Pulse.ar(SinOsc.ar(freq,fase,200,6000),ancho,1);
env=EnvGen.ar(Env.perc(0.01,0.1),gate,doneAction: 2);
Out.ar(out,Pan2.ar(sig*env,[1,-1])*vol)
}).memStore
);
(
Pdef(\fx,(
Pbind(\instrument, \masterfx,
\dur, Pseq([0.5,0.5,1,0.75,0.25,1],inf),
\room, Prand([0.1,0.3,0.7,1],inf),
\damp, Prand([0.01,1],inf),
\delt, Prand([0.01,0.02,0.03,0.05],inf),
\delr, Prand([0.1,0.3,0.5,0.7],inf)
)
))
);
(
Pdef(\kntras,(
Pbind(\instrument, \tarola,
\dur, Pseq([0.25,0.25,0.25,0.25,0.25],inf),
\freq, Prand([1,2,4,8]*1200,inf),
\vol, Pseq([0.5,0.2,0.35,0.1],inf),
\out, 30

)
))
);
(
Tdef(\bullyann,{
inf.do{
var arr;
arr=[0,1,2,3,4,5,6,7,8,9,10].choose.postln;
if(arr >= 5,{Synth(\bombo).postln},{Synth(\tarola).postln});
0.25.wait;
}
})
);
(
Pdef(\amb,(
Pbind(\instrument, \ambient,
\dur, Pseq([2,1,1.5,0.5,1,1.75,0.25],inf),
\freq, Prand([110,220,440,880,1600,13200],inf),
\pizq, Prand([ -0.1, -0.4, -0.75, -1],inf),
\pder, Prand([0.1,0.4,0.75,1],inf),
\fase, Prand([0,0.3,0.5,0.7],inf),
\out, [30,32],
\vol, 0.5
)
))
);
(
Pdef(\ambfx,(
Pbind(\instrument, \masterfx2,
\dur, 100000,
\room, 1,
\mix, 0.5,
\damp, 0.01
)
))
);
(
Pdef(\beiss,(
Pbind(\instrument, \bass,
\dur, Pseq([0.5,0.5,0.5,0.5],inf),
\room, Prand([0.1,0.3,0.7,1],inf),
\damp, Prand([0.01,0.3,0.6,1],inf),
\mix, 0.5,
\out, 30//[30,32]
)
))
);
)
(
Pdef(\ambfx).play;
Pdef(\fx).play;
Pdef(\kntras).play;
Tdef(\bullyann).play;
Pdef(\amb).play;
Pdef(\beiss).play
)
Pdef(\ambfx).stop;
Pdef(\fx).stop;
Pdef(\amb).stop;
Pdef(\kntras).stop;
Tdef(\bullyann).stop;
Pdef(\beiss).stop
//////////////////////////////////


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