Sei sulla pagina 1di 16

Msica por computadora

Ernesto Romero y Hernani Villaseor


Centro Multimedia 2012
SESIN 18
Forma
Rutinas
Una rutina es una programa de lectura de datos, el cual funciona de manera cclica en una
estructura llamada loop Muc!a de la programaci"n de software est# $asada en esta e%ecuci"n
cclica y %er#r&uica de c"digo Es decir, se programa de manera &ue el c"digo se e%ecuta por
pasos y una 'e( terminada la lectura de la programaci"n se repiten las mismas acciones En la
programaci"n podemos insertar instrucciones para &ue en cada nue'a lectura del c"digo se
realicen acciones diferentes, o sea damos instrucciones para &ue argumentos y 'aria$les
cam$ien en el tiempo
En una rutina podemos esta$lecer cuantas 'eces se repite una acci"n, generalmente un
programa mantiene un loop infinito, tam$i)n determinamos el tiempo &ue de$e esperar la
computadora para 'ol'er a leer la serie de instrucciones de c"digo
En *C !ay 'arias formas de !acer rutinas, una de ellas es +def y Routine
Tdef: +as, -efinition
Crearemos un c"digo con una rutina &ue controle unos *ynt!-efs y &ue desarrolle una forma
musical de manera autom#tica El c"digo estar# escrito de tal manera &ue ser# muy f#cil de
declarar y de correr Utili(aremos el mensa%e do.!en/ooted Este mensa%e reali(a una acci"n
una 'e( &ue el ser'idor !aya sido 0$ooteado1 En este e%emplo nos ser'ira para cargar todos
los *ynt!-efs y los +defs Usando esto en com$inaci"n con secciones de codigo comentados
podemos seleccionar todo y declararlo una 2nica 'e( Con esto e'itamos tener &ue recordar
&ue y en &ue orden de$emos declarar un c"digo para &ue corra $ien
33333333333333333333333333333333333333333333333333
33 33
33 +4546+454 *tyle 33
33 33
33 *elecciona todo y declara 33
33 33
3333333333333333333333333333333333333333333333333
1
37 C89+R8:
+def;<general=play
+def;<general=stop
73
s$ootdo.!en/ooted;>
3333333333 *ynt!-efs
;
;
*ynt!-ef;<sonido, >?fre&@A00, amp@02B, dur@0B, pan@0?
'ar sig, en'C
sig@R:DEar;*aFar;fre&,amp32=,fre&71G, 02=C
sig@sigH*in8scar;fre&,0,amp=C
sig@:imiterar;sig,0I=C
sig@Dan2ar;sig, pan=C
en'@En'Jenar;En'perc;001,dur=,done4ctionK2=C
8utar;0,sig7en'70LB=
M=send;s=
=C
37
*ynt!;<sonido=
73
;
*ynt!-ef;<$om$o, >?fre&@N0, amp@1LB, dur@02AB, pan@0?
'ar sig, ,ic,, en'C
sig@*in8scar;fre&7O1,11,1BP,pi,amp3O1,1,2P=meanC
,ic,@En'Jenar;En';O1,0P,O00BP==7QC
sig@:imiterar;sig, 0I=C
sig@Dan2ar;sigH,ic,, pan=C
en'@En'Jenar;En'perc;001,dur=,done4ctionK2=C
8utar;0,sig7en'=
M=send;s=
=C
37
*ynt!;<$om$o=
73
;
*ynt!-ef;<tarola, >?fre&@220, amp@1, dur@02B, pan@0?
2
'ar sig, entorc!ado, ,ic,, en'C
sig@*in8scar;fre&7O1,11,1BP,pi,amp3A=C
entorc!ado@.!ite9oisear;02B=7:ine,r;1,0,dur3Q=C
,ic,@En'Jenar;En';O1,0P,O001P==C
sig@Dan2ar;sigH,ic,Hentorc!ado, pan=C
en'@En'Jenar;En'perc;001,dur=,done4ctionK2=C
8utar;0,sig7en'=
M=send;s=
=C
37
*ynt!;<tarola=
73
;
*ynt!-ef;<!i, >?fre&@1220, amp@1, dur@02B, pan@0?
'ar sig, entorc!ado, ,ic,, en'C
sig@*in8scar;fre&74rrayrand;1B,Q,N0=,pi,amp3A=meanC
entorc!ado@.!ite9oisear;012B=7:ine,r;1,0,dur3Q=C
sig@Dan2ar;sigHentorc!ado, pan=C
en'@En'Jenar;En'perc;001,dur=,done4ctionK2=C
8utar;0,sig7en'=
M=send;s=
=C
37
*ynt!;<!i=
73
;
*ynt!-ef;<melodia, >?fre&@A00, amp@02B, dur@0B, pan@0?
'ar sig, en'C
sig@Eormantar;fre&, :ine,r;fre&72,fre&,dur32=, fre&=C
sig@:imiterar;sig,0I=C
sig@Dan2ar;sig, pan=C
en'@En'Jenar;En';O0,1,1,0P,O01,dur 602,01P=,done4ctionK2=C
8utar;0,sig7en'70B=
M=send;s=
=C
37
*ynt!;<melodia=
73
;
*ynt!-ef;<ruido, >?fre&@A00, amp@02B, dur@10B, pan@0?
'ar fre&M,sig, en'C
fre&M@*in8sc,r;L,0,01,1=C
sig@R:DEar;Dulsear;fre&7fre&M74rrayrand;1I,1,Q0==, :ine,r;fre&7N,fre&,dur=,
0A=meanC
A
sig@:imiterar;sig,0I=C
sig@Dan2ar;sig, pan=C
en'@En'Jenar;En';O0,1,0P,O01,dur 601P=,done4ctionK2=C
8utar;0,sig7en'70LB=
M=send;s=
=C
37
*ynt!;<ruido=
73
;
*ynt!-ef;<ruido2, >?fre&@A00, amp@02B, dur@10B, pan@0?
'ar fre&M,sig, en'C
sig@R:DEar;/lipar;fre&7O0,Q,L,12,1G,1I,2QPmidiratio,G=, :ine,r;fre&,fre&7N,dur=,
0A=meanC
sig@:imiterar;sig7:EDulse,r;N,01=,0I=C
sig@Dan2ar;sig, pan=C
en'@En'Jenar;En';O0,1,0P,O01,dur 601P==C
sig@EreeVer$ar;sig7en',0B,0ILI=C
8utar;0,sig=
M=send;s=
=C
37
*ynt!;<ruido2=
73
=C
3333333333 +defs
;
R$pm@120C
Rtempo@G03R$pmC
;
+def;<rutina1, >
infdo>
Qdo>
*ynt!;<sonido, O<fre&, A00P=C
;Rtempo32=FaitC
MC
Qdo>
*ynt!;<sonido, O<fre&, A00P=C
*ynt!;<sonido, O<fre&, A007QmidiratioP=C
;Rtempo32=FaitC
MC
Q
Qdo>
*ynt!;<sonido, O<fre&, A007 610midiratio32, <amp, 1P=C
;Rtempo32=FaitC
MC
Qdo>
*ynt!;<sonido, O<fre&, A007 6Bmidiratio32, <amp, 1P=C
*ynt!;<sonido, O<fre&, A007 61midiratio32, <amp, 1P=C
;Rtempo32=FaitC
MC
M
M=&uantS;0=C
=C
37
+def;<rutina1=playC
+def;<rutina1=stopC
73
;
+def;<rutina2, >
infdo>
2do>
*ynt!;<sonido, O<fre&, A00 7 6Nmidiratio32, <dur, 1, <amp, 1P=C
;Rtempo=FaitC

*ynt!;<sonido, O<fre&, A00 7 610midiratio32, <amp, 1P=C
;Rtempo32=FaitC
*ynt!;<sonido, O<fre&, A00 7 612midiratio32, <amp, 1P=C
;Rtempo32=FaitC
MC

*ynt!;<sonido, O<fre&, A007 6BmidiratioP=C
;Rtempo32=FaitC
*ynt!;<sonido, O<fre&, A007 61midiratioP=C
;Rtempo32=FaitC
*ynt!;<sonido, O<fre&, A007 LmidiratioP=C
;Rtempo32=FaitC
*ynt!;<sonido, O<fre&, A007 11midiratioP=C
;Rtempo32=FaitC

*ynt!;<sonido, O<fre&, A007 2midiratioP=C
;Rtempo32=FaitC
*ynt!;<sonido, O<fre&, A007 BmidiratioP=C
;Rtempo32=FaitC
*ynt!;<sonido, O<fre&, A007 11midiratioP=C
;Rtempo32=FaitC
B
*ynt!;<sonido, O<fre&, A007 1QmidiratioP=C
;Rtempo32=FaitC
M
M=&uantS;0=C
=C
37
+def;<rutina2=playC
+def;<rutina2=stopC
73
;
+def;<$ataca, >
infdo>
2do>*ynt!;<$om$o=C
*ynt!;<!i=C
;Rtempo32=FaitC
MC
*ynt!;<tarola=C
*ynt!;<!i=C
;Rtempo32=FaitC
*ynt!;<!i=C
;Rtempo32=FaitC
M
M=&uantS;0=C
=C
37
+def;<$ataca=playC
+def;<$ataca=stopC
73
;
+def;<rutinaA, >
infdo>
2do>
Qdo>
*ynt!;<sonido, O<fre&, A00 7 61midiratioP=C
;Rtempo3Q=FaitC
*ynt!;<sonido, O<fre&, A00 7 62midiratioP=C
;Rtempo3Q=FaitC
MC

Qdo>
*ynt!;<sonido, O<fre&, A00 7 2midiratioP=C
;Rtempo3Q=FaitC
*ynt!;<sonido, O<fre&, A00 7 1midiratioP=C
;Rtempo3Q=FaitC
G
MC
MC

2do>
Qdo>
*ynt!;<sonido, O<fre&, A00 7 ;61H2=midiratioP=C
;Rtempo3Q=FaitC
*ynt!;<sonido, O<fre&, A00 7 ;62H2=midiratioP=C
;Rtempo3Q=FaitC
MC

Qdo>
*ynt!;<sonido, O<fre&, A00 7 ;2H2=midiratioP=C
;Rtempo3Q=FaitC
*ynt!;<sonido, O<fre&, A00 7 ;1H2=midiratioP=C
;Rtempo3Q=FaitC
MC
MC

M
M=&uantS;0=C
=C
37
+def;<rutinaA=playC
+def;<rutinaA=stopC
73
;
+def;<rutinaQ, >
infdo>
2do>
Qdo>
*ynt!;<sonido, O<fre&, A00 7 6Qmidiratio32P=C
;Rtempo3Q=FaitC
*ynt!;<sonido, O<fre&, A00 7 6Bmidiratio32P=C
;Rtempo3Q=FaitC
MC

Qdo>
*ynt!;<sonido, O<fre&, A00 7 6LmidiratioP=C
;Rtempo3Q=FaitC
*ynt!;<sonido, O<fre&, A00 7 6NmidiratioP=C
;Rtempo3Q=FaitC
MC
MC
L

2do>
Qdo>
*ynt!;<sonido, O<fre&, A00 7 ;6QH2=midiratio32P=C
;Rtempo3Q=FaitC
*ynt!;<sonido, O<fre&, A00 7 ;6BH2=midiratio32P=C
;Rtempo3Q=FaitC
MC

Qdo>
*ynt!;<sonido, O<fre&, A00 7 ;6LH2=midiratioP=C
;Rtempo3Q=FaitC
*ynt!;<sonido, O<fre&, A00 7 ;6NH2=midiratioP=C
;Rtempo3Q=FaitC
MC
M

M
M=&uantS;0=C
=C
37
+def;<rutinaQ=playC
+def;<rutinaQ=stopC
73
;
+def;<$ataca2, >
infdo>
*ynt!;<$om$o=C
*ynt!;<!i=C
;Rtempo32=FaitC

*ynt!;<tarola=C
*ynt!;<!i=C
;Rtempo32=FaitC

*ynt!;<$om$o=C
*ynt!;<!i=C
;Rtempo3Q=FaitC

*ynt!;<$om$o=C
;Rtempo3Q=FaitC

*ynt!;<tarola=C
*ynt!;<!i=C
N
;Rtempo32=FaitC


M
M=&uantS;0=C
=C
37
+def;<$ataca2=playC
+def;<$ataca2=stopC
73
;
+def;<rutinaM, >'ar FaitC
;Rtempo7Q72=FaitC
infdo>
Fait@;Rtempo3O02B,0B,1,2Pc!oose=C
*ynt!;<melodia, O<fre&, A00 7 O0,2,Q,B,L,I,11,12Pc!oosemidiratio71, <dur, FaitP=C
FaitFaitC


M
M=&uantS;0=C
=C
37
+def;<rutinaM=playC
+def;<rutinaM=stopC
73
37
+def;<rutinaQ=playC
+def;<rutinaQ=stopC
+def;<$ataca=playC
+def;<$ataca=stopC

;
+def;<rutina1=playC
+def;<rutina2=playC
=
;
+def;<rutina1=stopC
+def;<rutina2=stopC
=
I
;
+def;<rutinaA=playC
+def;<rutinaQ=playC
=
;
+def;<rutinaA=stopC
+def;<rutinaQ=stopC
=
;
+def;<rutinaM=playC
+def;<rutina1=playC
+def;<rutina2=playC
+def;<rutinaA=stopC
+def;<rutinaQ=stopC
+def;<$ataca=playC
+def;<$ataca2=stopC
=
;
+def;<rutinaM=stopC
+def;<rutinaA=playC
+def;<rutinaQ=playC
+def;<rutina1=stopC
+def;<rutina2=stopC
+def;<$ataca2=playC
+def;<$ataca=stopC
=
;
+def;<rutina1=stopC
+def;<rutina2=stopC
+def;<rutinaA=stopC
+def;<rutinaQ=stopC
+def;<$ataca=stopC
+def;<$ataca2=stopC
+def;<rutinaM=stopC
=
73
;
+def;<general, >

10
;
+def;<rutinaM=playC
+def;<rutina1=playC
+def;<rutina2=playC
+def;<rutinaA=stopC
+def;<rutinaQ=stopC
+def;<$ataca=playC
+def;<$ataca2=stopC
=C
;Rtempo7;N7G==FaitC
;
*ynt!;<ruido=C
+def;<rutinaM=stopC
+def;<rutinaA=playC
+def;<rutinaQ=playC
+def;<rutina1=stopC
+def;<rutina2=stopC
+def;<$ataca2=playC
+def;<$ataca=stopC
=C
;Rtempo7;Q7N==FaitC
;
+def;<rutinaM=playC
+def;<rutina1=playC
+def;<rutina2=playC
+def;<rutinaA=stopC
+def;<rutinaQ=stopC
+def;<$ataca=playC
+def;<$ataca2=stopC
=C
;Rtempo7;Q7N==FaitC
;
*ynt!;<ruido2=C
+def;<rutina1=stopC
+def;<rutina2=stopC
+def;<rutinaA=stopC
+def;<rutinaQ=stopC
+def;<$ataca=stopC
11
+def;<$ataca2=stopC
+def;<rutinaM=stopC
=C
M=&uantS;0=C
=C
37
+def;<general=play
+def;<general=stop
73
=
33 fin del do.!en/ooted
M=
Aleatoriedad y Estocstica
4leatorio es todo a&uello &ue tiene &ue 'er con el a(ar :o aleatorio a$arca lo pro$a$ilstico y lo
no pro$a$ilstico
Estoc#stico o pro$a$ilstico se refiere a a&uellos e'entos &ue tienen una pro$a$ilidad
determinada, especialmente interesantes son las com$inaciones de e'entos cuyas
pro$a$ilidades son distintas
4&u tenemos un e%emplo de aleatoriedad :os e'entos tienen la misma pro$a$ilidad de &ue
ocurran por&ue estamos usando el mensa%e c!oose +enemos tres frecuencias, la pro$a$ilidad
de cada una es de T
~freq=[10,500,1500];
(
Tdef(\prob, {
inf.do{
Synth(\ruido, [\freq, ~freq.chooe.pot!n]";
1.#$it;
%
%".qu$nt&(0";
";
'(
Tdef(\prob".p!$y;
Tdef(\prob".top;
('
12
Dodemos asignar diferentes pro$a$ilidades a las tres distintas frecuencias con el mensa%e
Fc!oose :a F significa Feig!t Esto es el peso pro$a$ilstico 4 cada o$%eto de un array le
asignamos un peso El total de los pesos de$en de sumar uno
[10,500,1500].#chooe([0.),0.*,0.1]"
En la lnea anterior el 10 tiene un peso de 0L Esto es e&ui'alente a decir &ue !ay un L0U de
pro$a$ilidad de &ue se esco%a El B00 tiene un peso de 02 y el 1B00 un peso de 01
(
Tdef(\prob, {
inf.do{
Synth(\ruido, [\freq,
~freq.#chooe([0.),0.*,0.1]".pot!n]";
1.#$it;
%
%".qu$nt&(0";
";
'(
Tdef(\prob".p!$y;
Tdef(\prob".top;
('
Con el mensa%e normali(a*um podemos !acer &ue los elementos de un arreglo sumen uno y
de esta forma podemos usarlos como pesos en un Fc!oose
Rpesos@O1000,100,2Pnormali(e*um
Dodemos cam$iar en tiempo real los 'alores de los pesos
~peo=[100,100,*000].nor+$!i,eSu+
~peo=[1000,1000000,*].nor+$!i,eSu+
(
Tdef(\prob, {
inf.do{
1A
Synth(\ruido, [\freq,
[*0,~f500.-$!ue,1500].#chooe(~peo".pot!n]";
*.#$it;
%
%".qu$nt&(0";
";
+am$i)n podemos usar el mensa%e coin para determinar una pro$a$ilidad de &ue occurra un
e'ento Eunciona como una moneda &ue se lan(a al aire pero &ue puede tener diferentes
pro$a$ilidades de &ue caiga cada lado +am$i)n funciona con n2meros del 0 al 1 El mensa%e
coin solo nos arro%a true o false como los lados de la moneda El n2mero al &ue le en'iemos el
mensa%e coin determinar# la pro$a$ilidad de &ue caiga en true
1.coin '' Sie+pre no $rro.$r/ true
0.5.coin '' 500 de prob$bi!id$d de que $!1$ true
0.1.coin '' 100 de prob$bi!id$d de que $!1$ true
Dodemos usar coin para determinar una condici"n
if(0.*.coin, {Synth(\ruido"%, {2no $!io2.pot!n%"
Dodemos 'er un e%emplo del uso de coin con la $atera del +def;<$ataca= Este +def es muy
repetiti'o, pero podemos agregarle un caract)r impro'isatorio si de%amos &ue la tarola suene a
'eces El 10U de las 'eces, por e%emplo
(
Tdef(\b$t$c$, {
inf.do{
*.do{Synth(\bo+bo";
Synth(\hi";
(~te+po'*".#$it;
%;
Synth(\t$ro!$";
Synth(\hi";
(~te+po'*".#$it;
Synth(\hi";
(~te+po'*".#$it;
%
%".qu$nt&(0";
";
1Q
(
Tdef(\t$ro!$3oin, {
inf.do{
if(0.1.coin,{Synth(\t$ro!$";%";
(~te+po'4".#$it;
%
%".qu$nt&(0";
";
'(
(
Tdef(\t$ro!$3oin".p!$y;
Tdef(\b$t$c$".p!$y;
"
(
Tdef(\t$ro!$3oin".top;
Tdef(\b$t$c$".top;
"
('
1B
Esta o$ra est# su%eta a la licencia 4ttri$ution69onCommercial6*!are4li,e A0 Unported de
Creati'e Commons Dara 'er una copia de esta licencia, 'isite
!ttpK33creati'ecommonsorg3licenses3$y6nc6sa3A03 o en'ie una carta a Creati'e Commons, QQQ
Castro *treet, *uite I00, Mountain VieF, California, IQ0Q1, U*4
1G