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

No hay comentarios:

Publicar un comentario