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
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