Saltar al contenido

Clase de Chidogui, un ejemplo de como crear una clase que te hace un gui automatico con colorsitos y botonsitos

octubre 3, 2010

/* Aqui empieza el codigo, puedes hacer copy paste y copiarlo a un archivo en tu carpeta de clases de supercollider, esta comentado, entonces chequenle si lo quieren hacer personalizado. */

//agregamos a la clase SynthDesc una funcion
+SynthDesc {

//funcion makeChido, el groupid es si quieren agregar el sinte a un grupo en especifico
//out para la salida
makeChido{|groupid=1,out=0|
this.makeChidoGui(groupid,out);
}

//ora si llamamos a la funcion
makeChidoGui{|groupid,out|
var w, s, startButton, sliders,boxes;
var id, cmdPeriodFunc;
var usefulControls, numControls,audioControls;
var getSliderValues, gui,auxcolor,font,fontColor,count;

s = Server.default;

gui = GUI.current;
//Yo uso arcade classic, pero puedes poner el quieras
//font=Font(“ArcadeClassic”,12);
//usaremos el default
font=Font(Font.defaultSansFace,12);

//por seguridad contamos que se haya creado almenos un slider
count=0;
audioControls=List.new();

//aqui buscamos todos los controladores que vamos usar y los separamos por audio y de parametros
usefulControls = controls.select {|controlName, i|
var ctlname,audioFound=false;
ctlname = controlName.name.asString;
//out,fade o in van a ser parametros diferentes a un slider
((ctlname == “out”) || (ctlname == “fade”) || (ctlname == “in”)).if({audioControls.add(controlName);},{audioFound=true});
( (ctlname != “in”) && audioFound && (msgFuncKeepGate or: { ctlname != “gate” }))

};

numControls = usefulControls.size;
sliders = Array.newClear(numControls);
boxes=Array.newClear(audioControls.size);

// aqui creamos colores aleatorios
auxcolor=Color.rand;
auxcolor=[[auxcolor,auxcolor.complementary,Color.black],[auxcolor,Color.black,Color.white],[auxcolor,Color.white,Color.black],[Color.black,auxcolor,Color.white],[Color.white,auxcolor,Color.black]].choose;
fontColor=auxcolor[2];

//aqui tenemos la ventana, usamos el nombre del sinte como la ventana
w = gui.window.new(“–”+name+”–”, Rect(20, 400, 410, numControls * 18 + 28),true);
w.view.decorator = FlowLayout(w.view.bounds);
//usamos un gradiente para el background, puede ser otra cosa, talvez no funcione en linux
w.view.background=Gradient(auxcolor[0],auxcolor[1],\h,12);

// Un boton especifico para prender y apagar cosas
startButton = gui.button.new(w, 60 @ 15);
startButton.states = [
["Start", Color.black, Color.green],
["Stop", Color.white, Color.red]
];
startButton.font_(font);

//aqui recolectamos el tipo de controlSpec para los sliders
getSliderValues = {
var envir;
envir = ();
usefulControls.do {|controlName, i|
var ctlname;
ctlname = controlName.name.asSymbol;
envir.put(ctlname, sliders[i].value);
};
audioControls.do {|controlName, i|
var ctlname;
ctlname = controlName.name.asSymbol;
envir.put(ctlname, boxes[i].value);
};
envir.use {
msgFunc.valueEnvir
};
};

//definimos acciones a tomar para el botn start
startButton.action = {|view|
if (view.value == 1) {
// empieza
if(id.isNil) { id = s.nextNodeID };
s.sendBundle(s.latency, ["/s_new", name, id,1, groupid] ++ getSliderValues.value);
};
if (view.value == 0) {
if (this.hasGate) {
//si tiene una gate el sinte, matarlo lentamente
s.sendMsg(“/n_set”, id, “gate”, 0);
}{
//matar violentamente
s.sendMsg(“/n_free”, id);
};
id = nil;
};
};
//Aqui lidiamos con los controladores “audio”
audioControls.do{|controlName,i|
var ctlname, ctlname2, capname, spec;
ctlname = controlName.name;
ctlname2 = controlName.name.asString;
capname = ctlname.copy;

ctlname = ctlname.asSymbol;
if((spec = metadata.tryPerform(\at, \specs).tryPerform(\at, ctlname)).notNil) {
spec = spec.asSpec
} {
spec = ctlname.asSpec;
};
if (spec.notNil) {

//si son controladores de salida o entrada, les vamos a crear un NumberBox
((ctlname2 == “out”) || (ctlname2 == “in”)).if({
boxes[i] = gui.ezNumber.new(w,110 @ 15,ctlname2, spec,
{ |ez|
if(id.notNil) { s.sendMsg(“/n_set”, id, ctlname, ez.value) }
},out);
boxes[i].font_(font);
boxes[i].setColors(stringColor:fontColor);
},{
//al fade le damos un valor default
boxes[i] = gui.ezNumber.new(w,110 @ 15,ctlname2, spec,
{ |ez|
if(id.notNil) { s.sendMsg(“/n_set”, id, ctlname, ez.value) }
}, controlName.defaultValue);
boxes[i].font_(font);
boxes[i].setColors(stringColor:fontColor);
});
} {postln(controlName.name+” is not present in metadata”);
count=count+1;
}
};

// creamos controles para todos los parametros que no son “audio”
usefulControls.do {|controlName, i|
var ctlname, ctlname2, capname, spec;
ctlname = controlName.name;
capname = ctlname.copy;
capname[0] = capname[0].toUpper;

ctlname = ctlname.asSymbol;
if((spec = metadata.tryPerform(\at, \specs).tryPerform(\at, ctlname)).notNil) {
spec = spec.asSpec
} {
spec = ctlname.asSpec;
};
if (spec.notNil) {
//creamos un slider
sliders[i] = gui.ezSlider.new(w, 400 @ 15, capname, spec,
{ |ez|
if(id.notNil) { s.sendMsg(“/n_set”, id, ctlname, ez.value) }
}, controlName.defaultValue);
sliders[i].font_(font);
sliders[i].setColors(stringColor:fontColor);
w.view.decorator.nextLine;
} {postln(controlName.name+” is not present in metadata”);
count=count+1;
}
};

// Que apague el sinte (botno == apagado) cuando se usa el stop
cmdPeriodFunc = { startButton.value = 0; };
CmdPeriod.add(cmdPeriodFunc);

// Para el sonido y matalo cuando se cierra la ventana
w.onClose = {
if(id.notNil) {
s.sendMsg(“/n_free”, id);
};
CmdPeriod.remove(cmdPeriodFunc);
};
//si hay un slider, hacemos la ventana de acuerdo al numero de sliders
(count > 0).if({w.bounds_(Rect(20, 400, 410, (numControls-count) * 18 + 28))});
w.front; // pon la ventan al frente
}

}

ronchas dandole!

septiembre 29, 2010

quihuibole…

hace mucho tiempo que este aposento no se dan noticias, los ronchudos  hemos estado trabajando en varios proyectos y nuestra falta de disciplina ha hecho que descuidamos el blog, pero o-jo-joo! ya llegan nuevas noticias:

  • Proximamente el 6 de Octubre en el Museo Iconografico del Quijote alas 7:00 pm, pronto, muy pronto, ponemos mas detalles y posters.
  • tocaremos unas piezas en el FIC dentro del evento Concierto del taller interactivo de música contemporánea” en el salon universitario el 24 de Octubre, 12:00 pm
  • UnTelemusica con el centro nacional de las artes en el DF, tentativamente el 29 de Octubre (todavia faltan detalles).
  • Hemos estado trabajando en nuevos visuales que se estrenaran en este mes! Visuales de Cablefonicos, dos interacciones nuevas con video en vivo, un nuevo parche de sistemas fisicos (colorcitos y muchas particulas) y un visual interactivo para Telemusica.
  • Tendremos ronchi-calcas en los conciertos.

Y pues tambien un poco de lo que hemos estado haciendo:

  • Tuvimos dos conciertos en Puebla, ademas dimos un curso Introductorio de Supercollider!
  • Tuvimos 5 conciertos en Agosto: un Telemusica desde el jardin union, uno en plaza de la paz, otro en las escalinatas de la Universidad de Guanajauto con el Colectivo Radiador, un concierto dentro del Callejon del Ruido y dentro como parte del evento “Colmena audiovisual” en el Euquerio Guerrero.

Pronto ponemos mas info de los conciertos.

Saludos

Concierto de música electroacústica. Invitado especial Rogelio Sosa

julio 21, 2010

Museo Iconografico del Quijote

Calle Manuel Doblado n° 1

Guanajuato, Mexico

30 de julio · 8:00 p.m.

Entrada libre.

rorschach_3.1 se complace en invitarlos a su próximo concierto en el cuál tendremos como  invitado especial al artista sonoro, compositor y promotor de música electrónica experimental y arte sonoro Rogelio Sosa.

Rogelio Sosa realizó estudios de música electrónica en los Ateliers Upic y en el Institut de Recherche et Coordination Acoustique/Musique (IRCAM) en Paris entre 1999 y 2001. En 2003 obtuvo una maestría en música y tecnolo …gía en la Universidad de Paris VIII.
Desde 2004 radica en la Ciudad de México. Actualmente forma parte del proyecto de improvisación con medios electrónicos .pig, es director del festival Radar.

Próximos conciertos de rorschach_3.0 Mayo 2010

abril 27, 2010

Jueves 6 de mayo 2010 a partir de las 9:30

Cabezas de cera  y  rorschach_3.0
Jardín Primer Ligero, Guanajuato, Gto.

Cover 20 pesos

Chela 10 pesos toda la noche!

Organiza: Departamento de Filosofía de la Universidad de Guanajuato

Miércoles, 12 de mayo de 2010 a las 9:00

Inauguración de ENADII

Auditorio general de la Universidad de Guanajuato.

ENADII MEXICO es el encuentro Nacional de Arquitectura y Diseño de Interiores que se realiza año con año en la Capital Y que en esta ocasión se viste de gala llevando a Diez estados de la República nuestro festejo mediante el TOUR IRREVERENTE 2010! que acercara hasta ti una serie de conferencias, mesas de debate- dialogo únicos.

Jueves 13 de mayo 2010

Foro Universitario Espiral.

Edificio DCEA de la Universidad de Guanajuato.

Instalaciones de rorschach_3.1 y colectivo SWAT.

abril 4, 2010

Los invitamos a la exposición que está en la Galería Tomás Chávez Morado de la Universidad de Guanajuato. Podrán ver las instalaciones del Colectivo SWAT además de una instalación de rorschach_3.1 !!! Del 22 de marzo al 30 de abril.

Próximos Conciertos de Rorschach_3.0

febrero 22, 2010

Programación

Miércoles 24 de febrero 16:00 hrs
Concierto a distancia.
Sesión 1 Habitación del Ruido
Improvisación en tiempo real, Colectivo Radiador en la Ciudad de México, Rorschach_3.0 en la Ciudad de Guanajuato.

Sábado 27 de febrero 19:00 hrs.
Plaza de la Cultura y las Artes
Lugar: Plaza Allende
Entrada Libre

Jueves 4 marzo 19:00 hrs.
Rorschach_3.3  El Ruido Mata…
Invitados especiales: Roberto Morales, Víctor Rivas Dávalos y Josué Fonseca
Lugar:  Museo Iconográfico del Quijote
Entrada Libre

Martes 9 marzo 17:00

Concierto Didactico (revelaremos algunos secretos)

Lugar: Escuela de Nivel Medio Superior de Guanajuato (Prepatoria Oficial)

Entrada Libre

Viernes 12 marzo 22:00
Aurora V Festival de Cine de Horror, Metal y Artes Oscuras
Lugar: Café Antik
Entrada Libre

Por fin las fotos del concierto de Aniversario de rorschach_3.0 realizado en noviembre del 2009 en el Museo Iconográfico del Quijote

febrero 3, 2010

Seguir

Get every new post delivered to your Inbox.