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
//////////////////////////////////


No hay comentarios:

Publicar un comentario