Upload
daniel
View
229
Download
0
Embed Size (px)
Citation preview
8/18/2019 Paradigma live Coding
1/28
Live Coding
El paradigma de la programación en vivo
v.2
Hernani Villaseñor Ramírez, 2013
Centro Multimedia, CENART, Méi!o "#$#
¿Qué es Live Coding ?
Live Coding es una %r&!ti!a deri'ada de la m(si!a ele!tr)ni!a %or !om%utadora * la
'ideo anima!i)n donde se %ro+rama en 'i'o mientras se e%one el !)di+o unto !on el sonido
* la ima+en resultante#
Esta !orriente !omenz) a tomar -uerza en Euro%a en los años .0 * a!tualmente es un
eer!i!io dentro del arte ele!tr)ni!o e%erimental# M!/ean 12., men!iona ue el término
sur+i) alrededor del 2003, %ara des!riir una a!ti'idad !on una a%roima!i)n a nue'as
-ormas de 4a!er m(si!a %or !om%utadora * 'ideo anima!i)n, asimismo su+iere ue el
término live coding se usa m&s en el !onteto de la im%ro'isa!i)n#
5or su %arte, Ro4r4uer et al 2002, men!ionan ue “Just in time programming (or:
conversational programming, live coding, on-the-flying-programming, interactive
programming)” se re-iere a un %aradi+ma ue in!lu*e la a!ti'idad de %ro+ramar en la
-un!ionalidad misma del %ro+rama, lo ue 4a!e ue es!riir !)di+o se !on'ierta en una
a!ti'idad !er!ana a una %r&!ti!a musi!al o e%erimental#
Antecedentes
T4e Hu es un ensamle de %ro+ramadores6!om%ositores %ioneros en la %r&!ti!a de
M(si!a %or Com%utadora en Red1# Este ensamle se !ara!teriza %or !om%artir datos e
in-orma!i)n a tra'és de una red %ara ser modi-i!ados durante la %resenta!i)n# El ensamle
1 Computer Music Network
1
8/18/2019 Paradigma live Coding
2/28
esta -ormado %or Tim 5er7ins, 8o4n 9is!4o--, C4ris 9ro:n, ;!ot ard, uienes diseñan sus %ro+ramas de audio en ase a len+uaes !omo 5earl *REA/9asi! Collins et al, 2003?323# 5osteriormente, "a'e iser# 59@5 to!an !on sus la%to%s sin !one!tarse a
un sistema de sonido, inter!amiando !)di+o a tra'és de una red, el !ual 'an +enerando *
modi-i!ando en el momento de la %resenta!i)n#
aa=!ell es un duo australiano de live coding a!ti'o desde el 200D, !on-ormado %or
Andre: R# 9ro:n * Andre: ;orenson, uienes usan el %ro+rama m%rom%tu en sus
%resenta!iones, el !ual 4a sido diseñado %or ;orenson#
9enoFt and t4e Mandelrots, es un ensamle de live coding -ormado en el 200. en
Barlsru4e# Cone!tados a tra'és de una red se sin!ronizan * en'ian datos# nte+rado %or 8uan
A# Romero, 5atri!7 9or+eat, Hol+er 9all:e+ * Matt4ias ;!4neideran+er#
Tamién %odemos men!ionar los %rimeros -esti'ales de live coding GC4an+in+
8/18/2019 Paradigma live Coding
3/28
Live Coding en México: una perspectiva desde el Centro Multimedia
/a %r&!ti!a de live coding en el Centro Multimedia tiene sus orí+enes en el año 200,
!on una serie de !on!iertos de la a+ru%a!i)n m@, la !ual estaa -ormada %or Eduardo
Meléndez, Ezeuiel Netri * Ernesto Romero uienes traaaan en el Taller de Audio delCentro Multimedia, estos !on!iertos tu'ieron lu+ar en la @ni'ersidad eroameri!ana, el
$esti'al 5lata-orma de 5uela * "or7ot Méi!o# Adem&s de este e'ento, el 1I de ulio 200.,
se lle') a!ao el %rimer !on!ierto de ;ines!enia2, donde Ezeuiel Netri %resent) G5r&!ti!as
!on !)di+o en 'i'o? Re=modula!i)n en 'i'o de !)di+o aierto a tra'és de ;u%er!ollider, ue
unto a los !on!iertos de m@ %odrían !onsiderse las %rimeras %resenta!iones de de live
coding en el CMM3#
En di!iemre 2010, !on una !re!iente !omunidad de usuarios de ;u%erCollider, $luus
* 5ro!essin+ !er!anos al CMM, se dan las !ondi!iones %ara 4a!er la %rimer sesi)n de live
coding !on 'arios %arti!i%antes, la !ual se lle') a!ao en la
8/18/2019 Paradigma live Coding
4/28
el Museo de Cien!ias de Morelos 4an sido nue'os es!enarios %ara estas sesiones, ue %o!o
a %o!o se 4an estale!ido !omo una %lata-orma %ara e%oner el traao de artistas *
%ro+ramadores, uienes !onsolidan la %r&!ti!a en Méi!o#
Ms all de las sesiones de Live Coding en el CMM
/a sesiones de live coding en el CMM, adem&s de ser'ir !omo %lata-orma %ara
di-undir una %r&!ti!a * !rear una !omunidad, 4an sido detonador %ara la or+aniza!i)n de
otros e'entos li+ados a esta %r&!ti!a, %or eem%lo G"iarios E-ímeros !i!lo or+anizado %or
8aime /oato dentro de ndeM@AC, %ro+rama de m(si!a !ontem%r&nea del Museo
@ni'ersitario de Arte Contem%or&neo de la @NAM# Este !i!lo se lle') a !ao entre el 1 de
a+osto * el 30 se%tiemre 2012, !on tres a!tos en 'i'o de live coding sumado a otras
dis!i%linas !omo %intura, danza * circuit ending ! "
Como -i+uras desta!adas de la !omunidad en torno a las sesiones de Live Coding del
CMM se %uede men!ionar a Ernesto Romero ue unto a Hernani Villaseñor 4an or+anizado
* %romo'ido esta %r&!ti!a dentro de este es%a!io# Tamién %odemos men!ionar a /uis
Na'arro, Eduardo H Jieta, 8or+e Ramírez, Martín uma*a, 8aime /oato, Aleandro $ran!o,
Mitzi Jl'era, Aleandra C&rdenas, Emilio J!elotl, 8aime 8alil Ramírez, 8osé Carlos Hasun,
8ulio aldí'ar, Arsitotles 9enitez * el Cole!ti'o Radiador#
!"vivo"! a dos a#os de tra$a%o so$re el tema
En el 2012 se or+aniz) el ;im%osio nterna!ional de M(si!a * C)di+o 6'i'o6, el !ual
tu'o lu+ar en el CMM entre el 13 * 1 de no'iemre 2012 !on el tema? Live Coding, usto dos
años des%ués de 4aer !omenzado la sesiones mensuales" Este sim%osio -ue el ter!ero
realizado a ni'el mundial !on esta tem&ti!a * !ont) !on la %arti!i%a!i)n de 8ulian Ro4r4uer,
Ale M!/ean, "a'e
8/18/2019 Paradigma live Coding
5/28
&ntroducción a 'uperCollider
;u%erCollider es un len+uae de %ro+rama!i)n de sonido, en el !ual se %ro+rama
!)di+o de la misma -orma en ue es!riimos en un %ro!esador de teto# Este %ro+rama -ue
diseñado %or 8ames M!Cartne* en 1..P, * desde enton!es 4a sido ado%tado %or una!omunidad ue traaa en torno a la m(si!a al+orítmi!a * el sonido !reado %or !om%utadora#
Conoce tu teclado
En!uentra en tu te!lado los si+uientes !ara!teres? Q, S, U, # Tilde, !or!4ete, lla'e *
pipe# En!uentra las si+uientes -un!iones? enter, !md, alt, !trl, es!#
(ola Mundo )
Como en !ualuier a%roima!i)n al estudio de una 4erramienta de %ro+rama!i)n, el
%rimer %aso es ase+urarnos ue est& instalada !orre!tamente * ue -un!iona, esta %rimer
%ro+rama!i)n se llama G#ello $orld %”
5ara realizar nuestro GHola mundo W en ;u%erCollider ne!esitamos saer !omo a!ti'ar
una línea de !)di+o * !omo -renar el %ro!eso# Estas a!!iones est&n determinadas %or el
sistema o%erati'o ue usamos * %or la -orma en la ue !orremos ;u%erCollider 1# Enton!es,
%ara 4a!er -un!ionar un !)di+o %onemos el !ursor sore la línea ue ueremos a!ti'ar o
sele!!ionamos 'arias líneas, %or (ltimo %resionamos la te!la ue nuestra 'ersi)n de
;u%erCollider reuiere# 5ara -renar el %ro!eso asta %resionar las te!las ue a!!ionan el
!omando stop" Nue'amente, este shortcut es distinto en !ada sistema#
A !ontinua!i)n los shortcuts en los sistemas m&s !omunes?
1 or eemplo SuperCollider puede 0uncionar dentro del editor de te$tos edit en -inu$'
/
8/18/2019 Paradigma live Coding
6/28
;istema En!ender 5arar
Ma! enter !md X #
>indo:s !trl X intro !trl X #
/inu =
8/18/2019 Paradigma live Coding
7/28
;inJs! oeto, siem%re em%ieza !on ma*(s!ula
#%la* método, lle'a un %unto antes del mensae
Z ru%tura de !)di+o
, una !oma se%ara los ar+umentos
Guna %alara !omillas, en+loan teto dentro de un !)di+o en -un!i)n[nomre dia+onal, de-ine el nomre de una rutina, un sinte o un mensae
Q tilde, de-ine una 'ariale +loal
Todos estos !ara!teres no tiene sentido %or si solos, %ero es ne!esario identi-i!ar ue
-un!i)n tienen dentro del !)di+o, esto en un %rin!i%io es im%ortante *a ue el !)di+o %odría
%are!ernos una se!uen!ia de %alaras * n(meros in!om%rensiles# Al de-inir estos
!ara!teres %odemos leer !)di+o sin %erdernos * dete!tar los errores m&s r&%ido#
Ver eem%lo 02 en la !ar%eta de eem%los#
La ventana del servidor local
;u%erCollider tiene dos ser'idores? lo!al e interno# En nuestro !aso traaaremos !on
el ser'ido interno# /a 'entana del ser'idor interno nos muestra el !om%ortamiento de
;u%erCollider, de interés son? la !antidad de %ro!esamiento em%leado * el n(mero de
sintetizadores a!ti'os# "esde esta 'entana tamién %odemos %render nuestro ser'idor *
a!ti'arlo !omo default #
La ventana post
Esta 'entana nos indi!a !on ma*or %re!isi)n lo ue su!ede !on ;u%erCollider, nos
in-orma ue el %ro+rama se 4a en!endido !orre!tamente, la !ara!terísti!a de !ada -un!i)n
ue de!laramos * nos alerta !uando 4a* un error en la %ro+rama!i)n# Tamién im%rime la
in-orma!i)n ue le indiuemos o los 'alores arroados %or una a!!i)n#
// declara este código en supercollider
5
8/18/2019 Paradigma live Coding
8/28
12.postln
6imprime esto".postln
Lectura de errores
Como men!ioné antes, la 'entana post nos alerta de errores en la %ro+rama!i)n, esto
es de suma im%ortan!ia !uando %ra!ti!amos live coding , *a ue !uando al+o no suena es
uena idea re'isar si 4a* un error en la post , de esta manera tendremos elementos %ara
resol'erlo#
Estas alertas nos indi!an en ue línea esta el error * de ue ti%o es, a 'e!es nos da la
su-i!iente in-orma!i)n %ara resol'erlo, otras tenemos ue re'isar dire!tamente el !)di+o ue
a!aamos de de!larar * ue arro) un error#
*+ens
/a unidades +eneradoras =&nit 'enerators=, son %eueños m)dulos de %ro+rama!i)n
ue a!e%tan %ar&metros de entrada !on al menos una salida# Estas unidades +eneradoras
%ueden !one!tarse a otras %ara diseñar, lo ue en m(si!a ele!tr)ni!a, se !onsidera se+(n
"od+e * 8erse1..K?K2, un instrumento o al+oritmo el !ual realiza un e'ento musi!al#
En ;u%erCollider estas unidades se llaman @
8/18/2019 Paradigma live Coding
9/28
Enton!es en el eem%lo anterior oser'amos ue un @
8/18/2019 Paradigma live Coding
10/28
sin ' SinOsc.ar$20000.1%;
pulso ' (ulse.ar $0.)%;
sin * pulso}.play
/as 'ariales +loales son letras min(s!ulas o %alaras ue em%iezan !on una tilde
!omo Q'ariale# /as 'ariales +loales %ueden ser de!laradas en !ualuier momento %ara
ser usadas !uando ueramos# Es im%ortante men!ionar ue 4a* letras ue son reser'adas
!omo la \s\ ue esta asi+nada %ara erver #
a ' )
b ' +
a , b
-!recuencia ' )00
-amplitud ' 1
Ver eem%lo 03 en la !ar%eta de eem%los#
Argumentos
/os ar+umentos en ;u%erCollider son 'alores asi+nados a !ada oeto, los !uales
tienen un ran+o * est&n de-inidos dentro de la %ro+rama!i)n de !ada oeto# 5ara saer
!uantos ar+umentos tiene un oeto, ué de-ine !ada uno * !u&l es su ran+o de o%era!i)n,
asta 'er la a*uda del oeto# En Ma! sele!!ionamos el teto del oeto * %resionamos !md
X "#
Anali!emos el oeto ue +enera tonos sinoidales? ;inJ;!#ar, el !ual tiene I
ar+umentos ue son? -re!uen!ia, -ase, multi%li!a!i)n * adi!i)n#
;inJs!#ar -re, %4ase, mul, add
En este !aso fre di!e ue -re!uen!ia +enera el os!ilador, phase en ue momento
1*
8/18/2019 Paradigma live Coding
11/28
!omienza la onda, este ar+umento se mide en radianesZ lue+o mul, es la are'iatura de
multi%li!a!i)n lo !ual de-ine la am%litud normalizada en un ran+o de 0 Y 1, * %or (ltimo add es
una suma la !ual se %uede usar %ara !ontrolar el !om%rtamiento del os!ilador#
// as &iene especi!icada la ayuda de SinOscSinOsc.ar$!re pase mul add%
Arra-s
/os arre+los o arrays son !ontenedores de in-orma!i)n, son elementos or+anizados
en una lista, +eneralmente n(meros ue %ueden usarse de maneras di'ersas# En
;u%erCollider un arre+lo se en!asilla entre !or!4etes * sus elementos se se%aran %or !omas,
!ada elemento es un índi!e * tiene una %osi!i)n dentro del array !on la !ual %uede ser
a!!esado# Así, el %rimer elemento es el índi!e 0, el se+undo índi!e 1, et!#
// array de &alores
1234)+56
/os 'alores internos de los arrays se identi-i!an mediante índi!es, !omenzando %or el
índi!e 0#
// array de &alores es el ndice 0 3 el ndice 1 4 el ndice 2 etc.
34+523)6
5ara a!!eder a un índi!e del array utilizamos un o%erador de a!!eso ue en
;u%erCollider -un!iona indi!ando entre !or!4etes el n(mero de índi!e ue reuerimos, antes
deemos i+ualar el array a una 'ariale#
// igualamos una array de elementos a la &ariable 7a7
a'34+324106
11
8/18/2019 Paradigma live Coding
12/28
// el operador de acceso llama el ndice ue le indicamos
a06
// la post nos arro8a el n9mero 3 ue es el &alor ue ocupa la primera
posición del array
/os arra*s tamién a!e%tan otro ti%o de 'alores !omo %uede ser una lista de %alaras#
Adem&s son -leiles *a ue en realidad !ada elemento del arra* es una 'ariale, es de!ir es
sus!e%tile de ser sustituida %or otro 'alor#
Ver eem%lo 0I en la !ar%eta de eem%los#
Live Coding con 'uperCollider: La li$rera /&0Li$
8T/i es una lirería de ;u%erCollider desarrollada %or 8ulian Ro4r4uer# 8T/i
si+ni-i!a GJust in time programming” otra -orma de re-erise al live coding #
1rox-'pace
5ro*;%a!e %ertene!e a la lirería 8T/i * es uno de los !uatro entornos de esta
lirería !on el !ual es %osile modi-i!ar el !)di+o de una %ro+rama!i)n mientras !orre#
1rimeros pasos
5ara !omenzar ini!iamos el amiente 5ro* de!larando la si+uiente línea de !)di+o?
p ' (ro#ySpace.pus$s.boot%
/ue+o de!laramos una 'ariale +loal, %ara lo !ual ante%onemos una tilde a la %alara
ue -ormar& nuestra 'ariale * usamos el mensae #%la*, de esta manera 4emos !reado al+o
12
8/18/2019 Paradigma live Coding
13/28
8/18/2019 Paradigma live Coding
14/28
// pongo en pausa y continuo los procesos el sinte no se librea del ser&er
-a.play
-a'{SinOsc.ar$40000.)%}
-a.pause
-a.resume
elease!'end
Estos mensaes no a-e!tan el monitoreo del sinte, #send lo ue 4a!e es en!ender un
nue'o sinte, #release lo liera# Jser'emos !omo el sinte sale del ;er'er# En este !aso
-adeTime a-e!ta el tiem%o de en!endido * de liera!i)n#
// libero y pongo en marca un sinte el sinte se librea del ser&er
-a.play
-a'{SinOsc.ar$40000.)%}
-a.release
-a.send
3ade0ime
-adeTime determina el tiem%o ue utilizar& !ada nue'o !amio, %odemos de!lararlo de
manera +eneral o asi+narlo a !ada 'ariale#
Hemos i+ualado nuestro amiente 5ro* a \%\, así ue %odemos !rear un -adeTime
+loal de 10 se+undos de la si+uiente manera?
p.!ade
8/18/2019 Paradigma live Coding
15/28
-salida.!adetodo.set sustituimos el &alor 400 por 500
-y.set$?!re 500%
El método #set, +enera un crossfade ue de%ende del 'alor asi+nado en -adeTime,
es de!ir si este es de D se+undos la transi!i)n ue se lo+ra entre el 'alor anterior * el nue'o
es de D se+undos, esto !rea transi!iones ue e'itan los !amios aru%tos al sustituir los
'alores de un sonido !on el mensae #set#
// este m>todo es similar al anterior la di!erencia es ue aplica un
cross!ade ue depende de !ade
8/18/2019 Paradigma live Coding
16/28
Es %osile de!larar las -un!iones de manera e%lí!ita, es de!ir, indi!ar si ser&n de
!ontrol o de audio, %ara %osteriormente utilizarlas de manera anidada dentro de otra -un!i)n#
// especi!co ue la &ariable ser de control y asigno el control mediante
el ratón-algo.@r
-algo'{AouseB.@r$2002000%}
// a un SinOsc le aCado como argumento la &ariable -algo.@r ue controlar
su !recuencia
-ob8eto.play
-ob8eto'{SinOsc.ar$-algo.@r00.)%}
Es %osile ma%ear el !ontrol mediante el método #ma% utilizando ar+umentos dentro
de la !onstru!!i)n del sinte#
-a.play
// creamos el argumento !rec
-a'{=!rec'400= SinOsc.ar$!rec 0 0.)%}
// creamos la &ariable -c y le asignamos un control con el ratón
-c'{AouseB.@r$300 3000%}
// con el m>todo .map indicamos ue el contenido de -c modi!iue el
argumento ?!rec
-a.map$?!rec -c%
5ara uitar el ma%a usamos el método #unma% sore la 'ariale ue -ue ma%eada
anteriormente#
14
8/18/2019 Paradigma live Coding
17/28
// ambos m>todos remue&en el mapeo
-a.unmap
-a.uset
@na 'ariante de #ma% !on la ue %odemos lo+rar transi!iones sua'es es #ma%, este
método utiliza el #-adeTime ue es a%li!ado sore la 'ariale#
Ver eem%lo 0P en la !ar%eta de eem%los#
Aleatoridad - reconstrucción de valores
Ha* 'arios métodos %ara !rear 'alores aleatorios en ;u%erCollider, %or eem%lo rrand
o e%rand, ue indi!a ue es!o+er&n un n(mero de manera aleatoria dentro de un ran+o ue
nosotros indiuemos#
// cada &eD ue declaremos el sinte se producir un nue&o &alor entre 100 y
200
-a.play
-a'{SinOsc.ar$rrand$100200%01%}
5ara re!onstruir estos 'alores %odemos mandar el mensae #uild, el !ual sir'e %ara
re!onstruir un sinte dentro del ser'idor, es ueno usarlo si el sinte -ue %ro+ramado !on
'alores aleatorios#
// le dice al sinte ue reconstruya los &alores aleatorios
-a.rebuild
Ver eem%lo 0. en la !ar%eta de eem%los#
15
8/18/2019 Paradigma live Coding
18/28
+eneración de ritmo mediante 1ulsos
Ha* 'arios métodos en ;u%erCollider ue +eneran %ulsos, este re!urso es so!orrido
%ara +enerar rítmi!as dentro de una %ro+rama!i)n, * %uede utilizarse !omo una estrate+ia%ara realizar %ro+rama!i)n en 'i'o# Esta té!ni!a nos %ermite tener resultados mediante un
%ulso ue sir'e !omo detonador de ritmos, aunue no es tan -leile en la %ro+rama!i)n de
rítmi!as !omo %odría ser el uso de %atrones# /o ue 4a!emos es multi%li!ar un @
8/18/2019 Paradigma live Coding
19/28
le*endo los 'alores del arre+lo de %rin!i%io a -in#
Femand.@r$Gmpulse.@r$1% 0 Fse$01234)6in!%%
En el eem%lo anterior %odemos leer ue "emand utiliza un m%ulse#7r !omo trigger, el
'alor 1 indi!a el tiem%o ue el im%ulso 'a a !amiar de no %ositi'o a %ositi'o, lue+o elar+umento 0 es el reset del "emand, * des%ués 'iene el oeto ue +enera la se!uen!ia, en
este !aso "se# Adentro de "se se en!uentra una lista ordenada en un arre+lo * su
dura!i)n, en este !aso in-, lo ue indi!a ue esa se!uen!ia se 'a a re%etir al in-inito# En su
lu+ar %odríamos determinar la dura!i)n mediante el n(mero de 'e!es ue ueremos re%etir
la se!uen!ia#
Ha* di-erentes ti%os de +eneradores de se!uen!ia ue !amian el !om%ortamiento en
la le!tura de los 'alores de la lista o arre+lo, %or eem%lo "rand tiene un !om%ortamiento
aleatorio#
// creamos una secuencia ba8o demanda con lectura de &alores aleatoria y la
insertamos como control en el argumento de !rec de un tono
Qa]Femand.@r$Gmpulse.@r$5% 0 Frand$100200300400)00006in!%%}
-b'{[email protected]%}
-b.play
Jtra -orma de realizar se!uen!ia ao demanda es mediante el oeto "ut*, la
di-eren!ia !on "emand es ue "ut* tiene un m%ulse in!luído en su %rimer ar+umento, otra
di-eren!ia es ue en el %rimer ar+umento es %osile usar una se!uen!ia ao demanda !omo
%uede ser un "se, !on lo !ual %odemos +enerar un !om%ortamiento rítmi!o#
-d.play
-c'{Futy.@r$10Fse$2004005006in!%%}
-d'{SinOsc.ar$-c.@r00.)%}
// e8emplo con una secuencia ba8o demanda en el primer argumento
18
8/18/2019 Paradigma live Coding
20/28
-d.play
-c'{Futy.@r$Fse$1/41/26in!%0Fse$2004005006in!%%}
-d'{SinOsc.ar$-c.@r00.)%}
Ver eem%lo 11 en la !ar%eta de eem%los#
elo% - cuanti5ación
5odemos re-eren!iar las a!!iones realizadas dentro de un amiente 5ro* a un relo *
a su 'ez !uantizar di!4as a!!iones, tener un relo nos sir'e %ara sin!ronizar los e'entos ue
'amos %ro+ramado * es (til !uando traaamos !on e'entos rítmi!os#
// establece un relo8 basado en el tiempo inicial de arranue
p.cloc@ '
8/18/2019 Paradigma live Coding
21/28
1atrones
El tema de %atrones es am%lio, * aunue no es un tema e!lusi'o de 8T/i, estos
%ueden usarse dentro del amiente 5ro*# Antes deemos e%li!ar ue*atterns
es la -ormaen la ue %odemos %ro+ramar mediante %atrones en ;u%erCollider, de manera similar a
%ro+ramar un se!uen!iador# /os *atterns tienen una am%lia 'ariedad de estru!turas ue nos
a*udan a !om%oner de manera se!uen!ial#
"entro de 5ro*;%a!e un %atr)n se %uede de!larar de la misma -orma ue un sinte, el
%rimer %atr)n ue 'amos a e%li!ar es el 5ind !u*a -un!i)n es la de !ominar 'alores de
distinos ti%os de %atrones en un solo -luo de datos# Es im%ortante men!ionar ue dentro de
la estru!tura de *atterns *a eisten ar+umentos %reestale!idos, %or eem%lo la dura!i)n se
es%e!i-i!a [dur * la am%litud [am%#
-a.play
// este código ace sonar una nota de un sinte preestablecido cada medio
segundo
-a'(bind$?dur 0.)%
"es%ués %odemos a+re+ar nuestro %rimer %atr)n anidado, ue -ormar& una se!uen!ia
de dura!iones, %ara este -in usamos 5se# Este %atr)n ne!esita de un arra* !on elementos
ue indi!an los distintos tiem%os de dura!i)n, los !uales ser&n leídos uno %or uno de manera
serial, des%ués de nuestro arra* indi!amos el n(mero de 'e!es ue ser& ee!utado, si
ueremos ue esto su!eda de manera in-inita usamos el mensae in-#
// patrón con un arreglo de ) elementos ue se e8ecuta de manera in!inita(se$1 2 3 4 )6 in!%
// aplicado a nuestro e8emplo anterior
-a' (bind$?dur (se$0.2) 0.2) 0.)6 in!%%
21
8/18/2019 Paradigma live Coding
22/28
// aplicamos (se a la duración y a la amplitud
-a' (bind$?dur (se$0.2) 0.2) 0.)6 in!% ?amp (se$0.1 16in!%%
5odemos a+re+ar azar !on el %atr)n 5rand, el !ual se estru!tura i+ual ue 5se soloue los 'alores no son leídos de manera se!uen!ial sino de -orma aleatoria#
// aplicamos (se a la duración y a la amplitud y (rand a !recuencia
-a'(bind$?dur (se$0.2) 0.2) 0.)6 in!% ?amp (se$0.1 16in!%
?!re (rand$2004005001006in!%%
Ver eem%lo 13 en la !ar%eta de eem%los#
Mensa%es so$re patrones - valores midi
Métodos !omo #%*ramid * #mirror a+re+an a los %atrones un !om%ortamiento en el ue
!onstru*en !adenas de 'alores a %artir de un modelo, %or eem%lo mirror re%ite los 'alores
del arra* en re'ersa una 'ez ue estos terminaron * %*ramid !onstru*e una una se!uen!ia
en -orma de %iramide#
5ara ue estos a!tuen sore un %atr)n asta !olo!arlo des%ués del arra* ue esta
dentro de un 5attern#
-a'(bind$?dur 0.) ?!re (rand$2004005001006.mirrorin!%%
El mensae #midi!%s nos %ermite traaar !on notas midi en lu+ar de 'alores de
-re!uen!ia# Re!ordemos ue los 'alores de notas midi 'an de 0 a 12K, donde 0 !orres%onde
al do !entral#
-a'(bind$?dur 0.) ?!re (rand$024)++16.midicpsin!%%
22
8/18/2019 Paradigma live Coding
23/28
0ra$a%ando con nuestros sintes: '-nt64e7
El tema de ;*nt4"e- es !om%leo, estos %ueden usarse dentro de 5ro*;%a!e * es
una manera m&s elaorada de traaar sonidos# Men!ionaré este tema %ero sin %ro-undizaren la !onstru!!i)n de ellos# El modelo de nuestro eem%lo %uede ser utilizado %ara 4a!er
'aria!iones de su estru!tura#
SyntFe!$?sinte{=out'0=
Out.ar$out(an2.ar$SinOsc.ar$20000.1%*Jn&Ken.@r$Jn&.perc$0.10.1%doneLct
ionM2%%%}%.add
Limpiar el am$iente - salir de 1rox-'pace con .clear - .pop
@na 'ez ue 4emos terminado nuestra sesi)n de live coding o !uando al+una
%ro+rama!i)n no resulto %odemos lim%iar el amiente 5ro* o una 'ariale es%e!í-i!a %ara lo
ue utilizaremos el método #!lear, este método remue'e los sintes, el monitor, el +ru%o *
liera el us#
5or (ltimo, en !aso de uerer salir de nuestro entorno de %ro+rama!i)n 5ro*, asta
!on de!larar #%o%#
// limpia el contenido de la &ariable -a
-a.clear
// limpia todo el contenido del (ro#ySpace
p.clear
// podemos especi!icar en cuanto tiempo realice esta acción
p.clear$5%
// salimos del ambiente (ro#y
p.pop
23
8/18/2019 Paradigma live Coding
24/28
Código - memoria: la clase (istor-
/a idea de !onser'ar nuestra im%ro'isa!i)n %uede resultar interesante !uando usamos
!)di+o, *a ue adem&s del resultado sonoro oser'ar el %ro!eso de %ro+rama!i)n %aso a%aso %uede ser'irnos de re-eren!ia %ara analizar nuestra %ro+rama!i)n o re%rodu!irla
nue'amente#
5ara realizar esta tarea %odemos usar Histor*, una !lase %ro+ramada %or Alerto de
Cam%o, la !ual est& diseñada %ara re+istrar el desarrollo de una %ro+rama!i)n a lo lar+o de
una línea de tiem%o, re+istrando !ada !amio ue realizamos sore nuestra %ro+rama!i)n#
Histor* !omienza a +enerar un do!umento !uando le en'iamos el mensae #start * dea
de +enerarlo !on #end#
// comienDa a registrar el istorial
Nistory.start
// cada &eD ue declaremos una linea de código se registra una entrada en
el documento
-a.play
-a'{SinOsc.ar$20000.1%}
-a.release
// paramos el registro
Nistory.end
5ara 'er el resultado usamos #do!ument, al ee!utar este mensae se are una nue'a
'enta ue nos muestra la 4istoria#
Nistory.document
2(
8/18/2019 Paradigma live Coding
25/28
El do!umento resultante nos indi!a el tiem%o en ue !ada nue'a línea de !)di+o -ue
de!larada# Con #%la* %odemos re%rodu!ir nuestra ee!u!i)n * !on #sto% dear de re%rodu!irla#
Nistory.play
Nistory.stop
5ara !onser'ar nuestra 4istoria de !ada %ro+rama!i)n es ne!esario sal'arlas, %ara lo
!ual utilizamos #sa'e;tor*, indi!ando una ruta * asi+nando un nomre# /a ruta se indi!a entre
%arentesis * !omillas * el nomre del do!umento lle'a la etensi)n #s!d
Nistory.sa&eStory$/Psers/compu/Focumentos/istoria1.scdQ%
5ara llamar una 4istoria de %ro+rama!i)n anterior utilizamos #load;tor*, indi!ando
entre %arentesis * !omillas, la ruta donde +uardamos el do!umento#
Nistory.loadStory$/Psers/compu/Focumentos/istoria1.scdQ%
5ara !omenzar una nue'a 4istoria, %odemos orrar los datos ue se 4an uedado
+uardados en el do!umento del 4istorial !on el mensae #!lear, de otra manera los nue'os
datos !omenzar&n a +uardarse des%ués del re+istro de la (ltima %ro+rama!i)n#
Nistory.clear
@na -un!i)n (til de Histor* es la 'entana de 'isualiza!i)n, !on #ma7e>in se !rea esta
'entana donde %odemos 'er !omo se 'a desarrollando nuestra %ro+rama!i)n en el -ormato
de Histor*# Esta 'entana !ontiene 'arias otones ue nos %ermiten realizar al+unas a!!iones
desde la 'entana !omo star6end#
Nistory.ma@eRin
Ver eem%lo 1I en la !ar%eta de eem%los#
2/
8/18/2019 Paradigma live Coding
26/28
8/18/2019 Paradigma live Coding
27/28
Ver eem%lo 1D en la !ar%eta de eem%los#
8tros programas para Live Coding
5or (ltimo resta men!ionar ue, la lirería 8T/i es una 4erramienta mu* %otente *
-leile %ara la %r&!ti!a de live coding , en ;u%erCollider tamién se %uede %ro+ramar -uera
del amiente 5ro* mediante el uso de 5de-, Tde- * Nde-#
Asimismo, adem&s de ;u%erCollider otros %ro+ramas !omo C4u!B o Etem%ore son
usados %ara %ro+ramar sonido# En el !aso de la %ro+rama!i)n de im&+enes $luus o
5ro!essin+ son de los %ro+ramas m&s utilizados# 9ao el %aradi+ma de live patching 5ure
"ata * Ma6M;5# n!luso el len+uae C a%li!ado a mi!ro!ontroladores#
9i$liogra7a
Collins, N#, M!/ean, A#, Ro4ur4uer, 8#, * >ard, A# 2003# Live coding in laptop performance#
Camrid+e? Camrid+e @ni'ersit* 5ress#
"e Cam%o, A#, Ro4r4uer, 8# * >eiser, R# 200I# .lgorithms today: /otes on language
design for 0ust in time programming #
"od+e, C4# * A# 8erse, T# 1..K# Computer 1usic: ynthesis, composition and performance#
;!4irmer#
M!/ean A# 2011# .rtists-*rogrammers and *rogramming Languages for the .rts" Tesis
do!toral#
8/18/2019 Paradigma live Coding
28/28
Romero, E# * Villaseñor, H# 2012# 16sica por computadora# Méi!o, "$? Centro Multimedia#
Ro4r4uer, 8#, "e Cam%o, A# * Jlo-sson, $# 2002# Just in 7ime *rogramming Lirary
8ocumentation# ;u%erCollider "istriution 2002=2013#
;orensen, A# * R# 9ro:n, A# 200K# aa-cell in practice: an approach to musical live coding #
nternational Com%uter Musi! Con-eren!e, Co%en4a+ue#
>ilson, ;#, Cottle, "# * Collins, N# ed## 2012# 7he uperCollider 9oo # Massa!4usetts?T4e
MT 5ress#
Est& ora est& sueta a la li!en!ia Re!ono!imiento=NoComer!ial=Com%artir+ual 3#0 @n%orted de Creati'e
Commons# 5ara 'er una !o%ia de esta li!en!ia, 'isite 4tt%?66!reati'e!ommons#or+6li!enses6*=n!=sa63#06#
27