Sei sulla pagina 1di 11

Msica por computadora

Ernesto Romero y Hernani Villaseor


Centro Multimedia 2012
Sesin 20
SuperCollider en la interdisciplina con nuevos medios
La interdisciplina podramos entenderla como el entrecruce de diferentes disciplinas artsticas
que enriquecen las diferentes prcticas de arte !s" el c#di$o %a sido un detonador en este
cruce constante que se e&tiende a la ciencia y la tecnolo$a 'odemos mencionar el desarrollo
de proyectos audio(isuales" el uso de sensores como e&tenciones y nodos entre artes
esc)nicas" m*sica y artes (isuales
Anlisis de datos
E&isten innumera+les maneras de anali,ar un $rupo de datos Lo interesante es determinar el
al$oritmo reali,a el anlisis que deseamos !qu (eremos un e-emplo de un al$oritmo que
reali,a un anlisis a un $rupo de 100 n*meros enteros
1 .etermina que n*meros son menores que /0 y los a$rupa en un su+con-unto !
2 .etermina que n*meros son mayores que /0 y menores que 00 y los a$rupa en un
su+con-unto 1
/ .etermina que n*meros son mayores que 00 y los a$rupa en un su+con-unto C
2 .etermina cuantas (eces se repite cada elemento de cada su+con-unto
// Primero creamos un conjunto ~u con 100 nmeros enteros
aleatorios entre 0 y 100
~u=Array.rand(100,0,100);
// Creamos los subconjuntos ac!os ~a, ~b y ~c.
~a="#;
~b="#;
~c="#;
Con el si$uiente al$oritmo a$rupamos en 3a los n*meros menores que /0" en 3+ los mayores
que /0 y menores que 00" y en 3c los mayores que 00
1
(
~u.si$e.do%&i&
i'(~u"i#(=)0,%~a=~a.add(~u"i#)*);
i'((~u"i#+)0),,(~u"i#(=-0),%~b=~b.add(~u"i#)*);
i'(~u"i#+-0,%~c=~c.add(~u"i#)*);
*
)
'odemos (er c#mo quedan a$rupados los n*meros en su+con-untos despu)s del primer
anlisis.

~a;
~b;
~c;
4am+i)n podemos (isuali,ar una $rfica de cada su+con-unto
~a..lot/
~b..lot;
~c..lot;

! continuaci#n tenemos un al$oritmo que determina cuntas (eces est presente cada n*mero
'ero primero o+ser(emos los mensa-es .sort y .indices0'12ual que se usan en el
al$oritmo
// .sort nos .one en orden ascendente los nmeros de un array.
3i declaramos/
"4,1,),1,0,)#.sort
// 0btenemos
"0,1,1,4,),)#
.indices0'12ual nos dice en qu) indices estan presentes un elemento dentro de un array
5i queremos sa+er en qu) indices se encuentra presente el n*mero 1 dentro del array
"0,1,1,4,),)# declaramos6
"0,1,1,4,),)#.indices0'12ual(1);
2
7 o+tenemos6
"1,4#
// Para saber la cantidad de eces 2ue el nmero 1 se encuentra
en el array "0,1,1,4,),)# 5acemos esto/
"0,1,1,4,),)#.indices0'12ual(1).si$e;
!%ora s" el si$uiente al$oritmo determina cuntas (eces est cada n*mero en al su+con-unto
3a y nos $enera 2 arre$los6 el arre$lo 3elementos! con los elementos de 3a en orden y sin
repetir y otro arre$lo 3incidencias! con la cantidad de (eces que esta cada elemento en 3a
(
ar array=~a, elemento6anterior=nil;
~elementosA="#;
~incidenciasA="#;
array.si$e.do%&i&
i'(array.sort"i#7=elemento6anterior,
%
~elementosA=~elementosA.add(array"i#);

~incidenciasA=~incidenciasA.add(array.indices0'12ual(array"i#).s
i$e);
*);
elemento6anterior=array"i#;
*;

);
(
~elementosA..ostln;
~incidenciasA
);
// 8o mismo .ara ~b
(
ar array=~b, elemento6anterior=nil;
/
~elementos9="#;
~incidencias9="#;
array.si$e.do%&i&
i'(array.sort"i#7=elemento6anterior,
%
~elementos9=~elementos9.add(array"i#);

~incidencias9=~incidencias9.add(array.indices0'12ual(array"i#).s
i$e);
*);
elemento6anterior=array"i#;
*;

)

(
~elementos9..ostln;
~incidencias9
)
// : .ara ~c
(
ar array=~c, elemento6anterior=nil;
~elementosC="#;
~incidenciasC="#;
array.si$e.do%&i&
i'(array.sort"i#7=elemento6anterior,
%
~elementosC=~elementosC.add(array"i#);
~incidenciasC=~incidenciasC.add(array.indices0'12ual(array"i#).s
i$e);
*);
elemento6anterior=array"i#;
*;
)
(
~elementosC..ostln;
2
~incidenciasC
)
Mapeo
'or mapeo entendemos la traducci#n de informaci#n de parmetros distintos" que por su
cualidad informtica estn representados en n*meros" pero que en su salida representan
diferentes campos de acci#n Es decir una frecuencia es representada en un n*mero que
puede ser traducido a un canal de color R81" am+os son representados en n*meros pero sus
ran$os son distintos !plicando una t)cnica de mapeo podemos transponer el ran$o de
frecuencia del odo %umano 920 a 20"000 H,9 a un canal de color del sistema R81 90 a 2::9
Esto es sencillo dado que dentro de la computadora estos n*meros tienen el mismo
comportamiento y son fcilmente escala+les" toman sentido de ser frecuencia o color solo en
su salida
MouseX.kr / MouseY.kr;(alor min" (alor ma&" en(ol(imiento" inter(alo<
=$en del cursor" en plano (ertical y %ori,ontal de la pantalla
(alMin" (alMa&6 ran$o de (alores entre i,quierda y derec%a de la pantalla
inter(alo6 factor del inter(alo
en(ol(imiento6 cur(a del mapeo 0 es lineal" 1 es e&ponencial
inter(alo6 factor de inter(alo" sir(e para el mo(imiento del cursor
MouseButton.kr;(alMin" ValMa&" inter(alo<
=$en del +ot#n del rat#n
(alMin6 (alor cuando el +ot#n no est presionado
(alMa&6 (alor cuando el +ot#n est presionado
inter(alo6 factor del inter(alo
(
3ynt5;e'(<ma.eo,%&out=0&
ar sen, en, mouse=, mouse:, mouse9;
mouse==>ouse=.?r()00,)000,1);
mouse:=>ouse:.?r(1.0,0.001,1);
mouse9=>ouse9utton.?r(0,1,0.1);
sen=@3in0sc.ar(mouse=,0,mouse:);
en=1nAen.?r(1n..erc(0.1,)),mouse9,doneAction/0);
0ut.ar(out,senBen)
*).send(s)
)
a=3ynt5(<ma.eo)
a.'ree
:
>tros recursos son los mensa-es linlin y line&p que interpolan datos de manera lineal y
e&ponencial
.linlin;entradaMin" entradaMa&" salidaMin" salidaMa&" clip<
En(uel(e los datos de tal manera que un ran$o lineal de entrada es mapeado a un ran$o lineal
de salida
clip6 puede ser uno de estos 26 nil" no %ay clip" ?minma& %ay clip en el mnomo y m&imo de
salida" ?min %ay clip en el mnimo de salida" ?ma& %ay clip en el m&imo de salida
.linep;entradaMin" entradaMa&" salidaMin" salidaMa&" clip<
En(uel(e los datos de tal manera que un ran$o lineal de entrada es mapeado a un ran$o
e&ponencial de salida Hay que tener cuidado que el mnimo y m&imo de salida no sean
menores de cero y que sean del mismo si$no El clip funciona i$ual en en linlin
!SC
>pen 5ound Control es un protocolo de comunicaci#n en red que utili,an tanto computadoras
como sinteti,adores y otros aparatos multimedia !simismo este protocolo comunica diferentes
pro$ramas 5C tiene implementado >5C para su comunicaci#n interna y de manera e&terna
para comunicarse con otros pro$ramas como pueden ser 'rocessin$" >pen@rameAorBs o
'ure.ata Este protocolo tam+i)n es *til para comunicar un smartphone o para %acer
cola+oraciones en red a tra()s de Cnternet o de manera local mediante 4C'DC' a tra()s de los
puertos =.'
La comunicaci#n mediante >5C podemos pensarla en de dos maneras" una es el en(o de
datos y otra es la recepci#n de datos
"nv#o de datos
$etAddr;C'" puerto<
.irecci#n de red
C'6 es una cadena de n*meros6 E12F001G representa comunicaci#n interna
puerto6 es un n*mero como este :F120" es el n*mero de puerto e&clusi(o de 5C
// en!o de datos de 3C a 3C dentro de la misma com.utadora
CetAddr(D14E.0.0.1D, FE140)
%ecepcin de datos
0
>5Cresponder;direcci#n" nom+reComando" acci#n<
Cliente que responde a la red" re$istra una funci#n para ser llamada con un comando
especfico de una direcci#n >5C especfica
direcci#n6 la direcci#n desde donde reci+e el responder, puede ser nil en cuyo caso responde a
cualquier direcci#n
nom+re de comando6 un comando >5C del tipo6 Dal$o
acci#n6 una funci#n que ser e(aluada cuando un comando de ese nom+re es reci+ido por la
direcci#n
// rece.ciGn de datos
03Cres.onder (n, D/buenas/tardesD, %arH tiem.o, mensaje,
res.uesta; "mensaje, tiem.o#*).add
Comen,amos en(iando datos internamente en 5uperCollider
// declaro el cGdiHo .ara eniar datos a 3C dentro de mi .c
n=CetAddr(D14E.0.0.1D, FE140)
// delcaro el cGdiHo .ara recibir datos de 3C dentro de mi .c
r=03Cres.onder(nil,D/reciboD,%&tiem.o,res.uesta,mensaje,comando&
"tiem.o,res.uesta,mensaje,comando#..ostln*).add
// mando un mensaje con esta l!nea, en la .ost a.arece el
resultado
n.send>sH(D/reciboD,1)
La post me imprime una serie de (alores encasillados dentro de un !rray" de los cuales me
interesa el tercero que es el mensa-e" el cual a su (e, es un !rray que contiene el comando
>5C y un (alor *til 'ara filtrar ese (alor usaremos un >5Cresponder que indica que
informaci#n quiero leer
Aplicaciones del mapeo & !SC
Soni'icacin de datos
La sonificacion a+orda el mane-o de un con-unto con una $ran cantidad de elementos o de un
flu-o constante de datos (aria+les para con(ertirlos en sonido
!%ora (amos a sonificar el con-unto 3u despu)s de %a+er sido anali,ado Creamos primero un
5ynt%.ef que acepte cam+ios en ar$umentos de frecuencia y duraci#n
(
F
3ynt5;e'(<sonido, %&'re2=400, am.=0.F, dur=0.1F&
ar siH, en;
siH=3aI.ar('re2, am.);
en=1nAen.?r(1n.sine(dur,1),doneAction/4);
0ut.ar(0,siHBen);
*).send(s);
);
3ynt5(<sonido)
// Jeestructuramos los subconjuntos ~a, ~b y ~c.
(
~a="#;
~b="#;
~c="#;
~u.si$e.do%&i&
i'(~u"i#(=)0,%~a=~a.add(~u"i#)*);
i'((~u"i#+)0),,(~u"i#(=-0),%~b=~b.add(~u"i#)*);
i'(~u"i#+-0,%~c=~c.add(~u"i#)*);
*
)
// ;eclaramos una 'recuancia 'undamental.
~'und=)0;
El si$uiente al$oritmo de sonificaci#n le manda el mensa-e midiratio a los n*meros enteros del
su+con-unto 3a para leerlos como semitonos so+re la fundamental La duraci#n es el in(erso
de la cantidad de (eces que se repite el n*mero entero !dems repite la nota que representa
ese n*mero entero la cantidad de (eces que se repite dentro de 3a
(
(
Kde'(<soni'icacionA, %ar dur;
~a.si$e.do%&i&
dur=1/
(~incidenciasA"~elementosA.'ind("~a"i##)#)..ostln;
~incidenciasA"~elementosA.'ind("~a"i##)#.do%
3ynt5(<sonido, "<'re2, ~a"i#.midiratioB~'und, <dur, dur#);
H
dur.Iait;
*
*
*).2uant6(0);
);
/B
Kde'(<soni'icacionA)..lay;
Kde'(<soni'icacionA).sto.;
B/
// 8o mismo .ara ~b.
(
Kde'(<soni'icacion9, %ar dur;
~b.si$e.do%&i&
dur=1/
(~incidencias9"~elementos9.'ind("~b"i##)#)..ostln;

~incidencias9"~elementos9.'ind("~b"i##)#.do%
3ynt5(<sonido, "<'re2,
~b"i#.midiratioB~'und, <dur, dur#);
dur.Iait;
*
*
*).2uant6(0);
);
/B
Kde'(<soni'icacion9)..lay;
Kde'(<soni'icacion9).sto.;
B/
// : .ara ~c
(
Kde'(<soni'icacionC, %ar dur;
~c.si$e.do%&i&
dur=1/
(~incidenciasC"~elementosC.'ind("~c"i##)#)..ostln;
I

~incidenciasC"~elementosC.'ind("~c"i##)#.do%
3ynt5(<sonido, "<'re2,
~c"i#.midiratioB~'und, <dur, dur#);
dur.Iait;
*
*
*).2uant6(0);
);
/B
Kde'(<soni'icacionC)..lay;
Kde'(<soni'icacionC).sto.;
B/
)
// A2u! 5ec5amos a andar los tresubconjuntos soni'icados.
/B
(
Kde'(<soni'icacionA)..lay;
Kde'(<soni'icacion9)..lay;
Kde'(<soni'icacionC)..lay;
);
(
Kde'(<soni'icacionA).sto.;
Kde'(<soni'icacion9).sto.;
Kde'(<soni'icacionC).sto.;
)
B/
Bi(lio)ra'#a
Jetri" E y Romero" E ;200H< Curso de SuperCollider Intermedios. Centro Multimedia6 M)&ico
10
Esta o+ra est su-eta a la licencia !ttri+ution9JonCommercial95%are!liBe /0 =nported de
C r e a t i ( e C o mmo n s ' a r a ( e r u n a c o p i a d e e s t a l i c e n c i a " ( i s i t e
%ttp6DDcreati(ecommonsor$DlicensesD+y9nc9saD/0D o en(ie una carta a Creati(e Commons" 222
Castro 5treet" 5uite I00" Mountain VieA" California" I2021" =5!
11

Potrebbero piacerti anche