!% -G !% -~S~D !% +language_name=Spanish !% !=============================================================================== ! DAMUSIX DEMO: UN EJEMPLO DE USO DE LA LIBRERIA DAMUSIX ! Codigo Fuente !=============================================================================== ! ! Archivo : damusix_demo.inf ! Fecha : 2008/05/08 ! Version : 2.0 ! Autor : Eliuk Blau ! e-Mail : eliukblau (AT) gmail.com ! ! Descripcion: Sencillo ejemplo de las funcionalidades que provee la ! extension Damusix para gestionar el soporte de audio en la ! maquina virtual Glulx. Es una demostracion de las capacidades ! de Damusix. ! ! Se insta al programador a no dejarse intimidar por la aparente ! complejidad del codigo de la demostracion. El programa en si ! es muy simple; la mayor parte del codigo "complejo" solo se ! utiliza para manejar correctamente los textos que se ! imprimiran en la pantalla. ! ! Si modificas este programa, estare muy agradecido si me mandas ! el codigo fuente por e-Mail. ! ! If you modify this program, I would be grateful if you send me ! the source code by e-Mail. ! ! Copyright (c) 2008 Nicolas Merino Quezada (aka Eliuk Blau). ! ! This program is free software: you can redistribute it and/or ! modify it under the terms of the GNU Lesser General Public ! License as published by the Free Software Foundation, either ! version 3 of the License. ! ! This program is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General ! Public License along with this program. If not, see ! . ! !=============================================================================== ! ! Log: ! 2007/09/01 Eliuk Blau - Se crea el archivo. ! 2007/09/02 Eliuk Blau - Se termina de programar y corregir BUGs. ! Lista la version 1.0 de esta demostracion. ! 2008/03/15 Eliuk Blau - IMPORTANTE!! Se cambia la licencia de Damusix Demo. ! Ahora esta licenciada bajo los terminos de LGPLv3. ! - Se agrega una nueva musica de fondo en formato Ogg ! Vorbis. Ahora se permite al usuario seleccionar ! la musica de fondo en formato MOD o en Ogg Vorbis. ! (Gracias a Urbatain por la sugerencia.) ! - Cambios en las musicas en Ogg Vorbis y MOD. Se ! utilizan nuevos temas (ambos de libre descarga). ! - Se agregan los siguientes comandos: ! * MUSICA MOD (selecciona musica en formato MOD) ! * MUSICA OGG (selecciona musica en formato Ogg) ! * VOLUMEN x (cambia el volumen del efecto-sonido1) ! * VOLUMEN GLOBAL (muestra % de Vol.Global actual) ! * VOLUMEN GLOBAL x (setea el % Vol.Global actual) ! - Se agregan las siguiente variable globales: ! * musica (guarda seleccion del formato de la musica) ! * volglobal (guarda volumen global actual) ! - Se agregan y/o modifican las siguientes rutinas ! para que actuen en consecuencia con los cambios ! registrados arriba: ! * MusicaOnSub() [asignamos canal dentro de ella] ! * MusicaModSub() [gestiona la accion MUSICA MOD] ! * MusicaOggSub() [gestiona la accion MUSICA OGG] ! * EstadoVolumenGlobalSub() [accion VOLUMEN GLOBAL] ! * CambiarVolumenGlobalSub() [salva en volglobal] ! - Ahora en la demostracion de los Fades de tiempo ! real se usan intervalos de 100ms para que el ! efecto sea mas lento y notorio. ! - Debido a los cambios, se incrementa el numero de ! version para esta demostracion. Ahora la version ! de Damusix Demo es la v1.2. ! 2008/04/07 Eliuk Blau - Ahora la barrita animada de los fades se dibuja ! en la barra de estado (para corregir Bug en ! Gargoyle que no la dibujaba correctamente). ! Sin duda ahora el efecto es mucho mas bonito. ! - Rutina LimpiarPantalla() ya no es necesaria y se ! elimina del codigo de la demo. ! - Se agregan las siguientes rutinas: ! * AnchoBarraEstado() ! * CursorA() ! 2008/04/21 Eliuk Blau - Agregado nuevo comando: 'VIRTUAL'. Este comando ! lanza la reproduccion del efecto de sonido "extra" ! en alguno de los canales virtuales. Asi, puede ! usarse repetidas veces, una tras otra, y el sonido ! del efecto se tocara siempre sin ser interrumpido ! (por supuesto, "no interrumpido" siempre dentro del ! limite de canales virtuales que existen [son 10.]) ! 2008/05/08 Eliuk Blau - Agregados dos nuevos comandos: ! * LISTA (crea lista de reprod. de sonidos al azar) ! * FADE X (realiza varios Fades en "tiempo-no-real") ! - Como ahora en la nueva version de Damusix se cambia ! el algoritmo para los Fades en "tiempo-real" (ya ! no se tiene que especificar un 'intervalo' entre ! cada incremento, sino un 'tiempo de duracion total ! del efecto'), se aplican 10 segundos de duracion ! a los efectos de FadeIn y FadeOut en "tiempo-real" ! de esta demostracion. ! - IMPORTANTE!! Se incrementa el numero de version de ! esta demostracion. Ahora la version corresponde a ! v2.0 (compatible con Damusix v1/080716 o superior). ! !------------------------------------------------------------------------------- !=============================================================================== ! (1) Constantes; Variables Globales; Replaces; Propertys; Incluir Parser.h !------------------------------------------------------------------------------- Constant Story "Damusix Demo"; Constant Headline "^Un ejemplo de las funcionalidades de Damusix.^^"; Constant VersionNum "2.0"; ! para implementar un "fin del programa" con FadeOut de la musica de fondo Replace QuitSub; ! para imprimir nuestro propio mensaje de version Replace VersionSub; ! para imprimir nuestra propia barra de estado Replace DrawStatusLine; ! formato de musica (MOD/Ogg Vorbis) que debe tocarse (al inicio, siempre Ogg) Global musica = MUSICA_OGG; ! volumen global de todos los sonidos de la demo (al inicio, siempre 100%) Global volglobal = 100; Include "Parser"; !=============================================================================== ! (2) Puntos de Entrada para Glk [solo en Glulx]: ! - InitGlkWindow(), IdentifyGlkObject(), HandleGlkEvent() !------------------------------------------------------------------------------- [ InitGlkWindow winrock; if (winrock == GG_STATUSWIN_ROCK) { ! StatusWindow ! ESTILO Normal para la Barra de Estado glk($00B0,4,0,9,1); ! stylehint_set [stylehint_ReverseColor] } rfalse; ! necesario para que todo funcione bien ]; Global fade_aux; ! es un contador para la barrita [ HandleGlkEvent ev contexto abortres; contexto = contexto; ! evitar el warning de variable no usada abortres = abortres; ! evitar el warning de variable no usada ! Notificar el Efecto Fade (In, Out) en "tiempo-real" Damusix.NotificarFade(ev); ! Este bloque imprime la barrita de avance del Fade switch (ev-->0) { evtype_Timer: DrawStatusLine(); ! redibujamos la barra de estado fade_aux++; ! incrementamos el movimiento de la barrita } ]; !=============================================================================== ! (3) Modificar Mensajes de la Libreria; Otros Includes; Incluir VerbLib.h !------------------------------------------------------------------------------- Object LibraryMessages with before [ ; Prompt: print (f)"^|DAMUSIX>"," "; rtrue; Restart: if (lm_n == 1) { print "¿Realmente quieres reiniciar la demostración? "; rtrue; } Quit: if (lm_n == 2) { print "¿Realmente quieres abandonar la demostración? "; rtrue; } Miscellany: switch(lm_n) { ! mensaje "¿Perdón?" 10: "Escribe un comando válido."; ! mensaje "No conozco ese verbo." 38: "Comando incorrecto."; } ], ; ! DreamBytes Adventures: ! Ad(M)inistrador (U)nificado de (S)on(I)do en Glul(X) Include "Damusix"; Include ">damusix_demo.bli"; ! el archivo de recursos multimedia Include "VerbLib"; !=============================================================================== ! (4) Rutina Initialise() !------------------------------------------------------------------------------- [ Initialise ; ! Comportamientos del Parser location = Loc_ZonaDemo; ! lugar de comienzo lookmode = 2; ! mira la localidad en todos los turnos ! INICIALIZACIONES DE DAMUSIX Damusix.AsignarCanal(musica,0,volglobal,-1); ! canal 0 para musica-fondo Damusix.AsignarCanal(MUSICA_VER,1,100,-1); ! canal 1 para musica-version Damusix.AsignarCanal(FX_PRINCIPAL,2,volglobal,1); ! canal 2 para fx "principal" ! Asignamos canal para FX_PRINCIPAL inmediatamente, solo por ser practicos, ! porque nunca vamos a cambiar el sonido dado a ese canal. Para la musica, ! como puede variar entre formato (MOD u Ogg Vorbis), asignamos el canal 0 ! en la rutina de accion MusicaOnSub() en el momento oportuno, segun la ! musica que corresponda seleccionada por el usuario. De todas formas, le ! asignamos el canal tambien aqui para que funcione correctamente la rutina ! de demostracion encargada de los Fades si es llamada la primera vez sin ! haber comenzado a reproducir la musica todavia [una insignificancia ! tecnica =P] ! tocamos un sonido de Intro en algun canal virtual [caprichos! =D] Damusix.TocarV(FX_INTRO); ! y finalmente retornamos 2 para que no muestre el Banner de Version return 2; ]; !=============================================================================== ! (5) Rutinas de la Libreria Implementadas, Reemplazadas o Ampliadas !------------------------------------------------------------------------------- ! linea de estado personalizada para la demo (muestra titulo y barra animada) [ DrawStatusLine aux; glk($002F, gg_statuswin); ! set_window glk($002A, gg_statuswin); ! window_clear aux = (AnchoBarraEstado() - 17) / 2; ! titulo completo tiene 17 caracteres CursorA(1,aux); print "DAMUSIX DEMO v",(string)VersionNum; if (Damusix.EnFade()) { CursorA(1,2); print "> En Fade "; if (Damusix.HayAudio() == 0) { print "[NO AUDIO] "; } print (barrita)fade_aux; ! el incremento se realiza en HandleGlkEvent() } glk($002F, gg_mainwin); ! set_window ]; ! truquito para gestionar la musica durante el mensaje de "version" [ GamePreRoutine ; if (action ~= ##Version) { if (Loc_ZonaDemo has general) { ! si estamos en mensaje de "version" Loc_ZonaDemo.parar_version(); ! detenemos la musica de "version" } } rfalse; ]; !=============================================================================== ! (6) Incluir SpanishG.h; Otros Includes !------------------------------------------------------------------------------- Include "SpanishG"; !=============================================================================== ! (7) Clases del Juego !------------------------------------------------------------------------------- !=============================================================================== ! (8) Objetos del Juego !------------------------------------------------------------------------------- Object Loc_ZonaDemo "En la Zona de Demostración" has light, with volaux 0, description [ ; "Bienvenido a la demostración de funcionalidades de la extensión ", (b)"Damusix", " para Inform. El presente programa es un sencillo ejemplo de algunas de las cosas que esta útil extensión te permite hacer con el audio soportado por la máquina virtual Glulx. ^^ Escribe el comando ",(f)"AYUDA"," para obtener información sobre los distintos comportamientos de ",(b)"Damusix"," que puedes probar en esta demostración. Cuando quieras salir, por favor escribe el comando ", (f)"TERMINAR"," para finalizar correctamente la ejecución de este programa."; ], parar_version [ ; give self ~general; Damusix.FadeOutX(MUSICA_VER,50); Damusix.Parar(MUSICA_VER); if (Damusix.SonandoDeFondo(musica) == 1) { Damusix.FadeInX(musica,50); } Damusix.VolumenV(self.volaux); Damusix.VolumenLista(self.volaux); Damusix.Volumen(FX_PRINCIPAL,self.volaux); ], iniciar_version [ ; if (Damusix.SonandoDeFondo(MUSICA_VER) == 0) { give self general; self.volaux = volglobal; ! la siguiente linea corrige un simple Bug con los Fades... if (Damusix.EnFade()) { Damusix.AbortarFade(); } ! correccion Damusix.VolumenV(0); Damusix.VolumenLista(0); Damusix.Volumen(FX_PRINCIPAL,0); Damusix.Volumen(MUSICA_VER,100); if (Damusix.SonandoDeFondo(musica) == 1) { Damusix.FadeOutX(musica,50); } Damusix.Tocar(MUSICA_VER); } ], ; !=============================================================================== ! (9) Otras Rutinas Reemplazadas; Rutinas Propias del Juego !------------------------------------------------------------------------------- ! averigua el ancho de la pantalla [ AnchoBarraEstado ; glk($0025,gg_statuswin,gg_arguments,0); ! window_get_size if (gg_arguments-->0 == 0) { return 80; } else { return gg_arguments-->0; } ]; ! mueve el cursor a una posicion especifica en la grilla de la barra de estado [ CursorA lin col; glk($002B,gg_statuswin,col-1,lin-1); ! window_move_cursor ]; ! cuenta hacia atras una cierta cantidad segundos y luego continua ejecucion [ ContarHaciaAtras aux; glk($00D6, 1000); ! request_timer_events (iniciar timer) for (::) { glk($00C0, gg_arguments); ! glk_select(gg_arguments) if (aux <= 0) { break; } else if (gg_arguments-->0 == 1) { ! 1 = evtype_Timer print aux--,"... "; } } glk($00D6, 0); ! request_timer_events (detener timer) ]; ! de un rango de 1 a 5, selecciona un valor al azar sin repetir el resultado ! devuelto hasta un nuevo ciclo (tomado de Shuffle.h y levemente modificado) Array sonidos_lista_flags -> 2; ! aux. para Shuffle() [sirve para 8 valores] Array flagBit -> $01 $02 $04 $08 $10 $20 $40 $80; ! uso propio en Shuffle() [ Shuffle range flags n x y z; range = 5; flags = sonidos_lista_flags; while (true) { n = random(range); x = (n-1) % 8; y = 1 + (n-1) / 8; if ((flags->y & flagBit->x) == 0) { break; } } if (flags->0 == range-1) { for (z = 1+(range-1)/8 : z>=0 : z--) { flags->z = 0; } } flags->0 = flags->0 + 1; flags->y = (flags->y | flagBit->x); return n; ]; ! para imprimir una barrita animada dependiendo del valor se le pase [ barrita aux; switch (aux % 4) { 0: print "( - )"; 1: print "( @@92 )"; 2: print "( | )"; 3: print "( / )"; } ]; ! para imprimir solo una porcion del texto en Negrita [ b txt; glk($0086, 1); ! set emphasized style print (string)txt; glk($0086, 0); ! set normal style ]; ! para imprimir solo una porcion del texto en cursiva [ c txt; glk($0086, 6); ! set note style print (string)txt; glk($0086, 0); ! set normal style ]; ! para imprimir solo una porcion del texto en Ancho Fijo [ f txt; glk($0086, 2); ! set preformatted style print (string)txt; glk($0086, 0); ! set normal style ]; ! para imprimir solo una porcion del texto en Negrita (solo en VersionSub) [ bv txt; b(txt); glk($0086, 2); ! set preformatted style ]; !=============================================================================== ! (10) Verbos y Gramaticas Propias del Juego !------------------------------------------------------------------------------- Verb 'ayuda' 'ayudarme' 'ayudame' * -> Ayuda; VerboIrregular "mostrar la ayuda de comandos de la demostración" with imperativo 'ayuda' 'ayudarme' 'ayudame'; Verb 'audio' * -> AudioOn * 'on' -> AudioOn * 'off' -> AudioOff ; VerboIrregular "establecer la reproducción de audio" with imperativo 'audio'; Verb 'musica' * -> MusicaOn * 'on' -> MusicaOn * 'off' -> MusicaOff * 'mod' -> MusicaMod * 'ogg' -> MusicaOgg ; VerboIrregular "establecer la música de fondo" with imperativo 'musica'; Verb 'efecto' * -> TocarEfecto ; VerboIrregular "reproducir el efecto de sonido ~principal~ en su canal propio" with imperativo 'efecto'; Verb 'virtual' * -> TocarVirtual ; VerboIrregular "reproducir el efecto de sonido ~extra~ en un canal virtual" with imperativo 'virtual'; Verb 'lista' * -> TocarListaReproduccion ; VerboIrregular "crear al azar la Lista de Reproducción de sonidos y luego tocarla" with imperativo 'lista'; Verb 'volumen' * -> CambiarVolumen * number -> CambiarVolumen * 'global' -> EstadoVolumenGlobal * 'global' number -> CambiarVolumenGlobal ; VerboIrregular "cambiar el volumen del sistema de audio de Damusix" with imperativo 'volumen'; Verb 'repeticion' * -> CambiarRepeticion * number -> CambiarRepeticion ; VerboIrregular "cambiar el número de repeticiones del efecto de sonido ~principal~" with imperativo 'repeticion'; Verb 'fade' * 'x' -> FadesX * 'in' -> FadeInMusica * 'out' -> FadeOutMusica ; VerboIrregular "realizar efectos de Fade a la música de fondo" with imperativo 'fade'; !=============================================================================== ! (11) Rutinas de Acciones Propias del Juego !------------------------------------------------------------------------------- ! para "fin del programa" [ QuitSub; L__M(##Quit, 2); if (YesOrNo() ~= 0) { print (b)"^¡Gracias por probar Damusix! =D^^"; ! capricho: despedida! =P ! si el audio esta activado... if (Damusix.HayAudio() == 1) { ! ... y si la musica de fondo esta sonando y no hay Fades activos... if ((Damusix.SonandoDeFondo(musica)==1) && (Damusix.EnFade()==0)) { ! hacemos FadeOutX (tiempo-no-real) a la musica de fondo Damusix.FadeOutX(musica); ! usa valor por defecto: 100ms. } } quit; ! finalmente terminamos la ejecucion } ]; ! para la version [ VersionSub ; Loc_ZonaDemo.iniciar_version(); new_line; glk($0086, 3); ! set header style print (string) Story; print " v", (string) VersionNum; glk($0086, 0); ! set normal style if (Headline ~= 0) print (string) Headline; print " (c) 2008 ",(b)"Eliuk Blau ",(f)"[eliukblau@@64gmail.com]^"; print " ",(c)"Este programa puede usarse bajo los términos de la licencia LGPL versión 3."; new_line; print "^ ",(bv)"(D)reamBytes (A)dventures:"; print "^ Ad",(bv)"(M)","inistrador ",(bv)"(U)","nificado de ", (bv)"(S)","on",(bv)"(I)","do en Glul",(bv)"(X)"; print "^ Versión de la extensión: ",(string)_DAMUSIX_VERSION_; new_line; glk($0086, 0); ! set normal style print "^ ",(b)"Las dos melodías de esta demostración pueden descargarse libremente de Internet:"; print "^ ",(f)"* Música MOD: ",(c)"Pot-boiled Lunch",", de Keith Baylis ", (c)"(alegre chiptune en formato ProTracker)"; print "^ ",(f)"* Ogg Vorbis: ",(c)"First Flight",", de Vincent Diamante ", (c)"(espectacular BSO del juego libre ~Cloud~)."; new_line; ]; ! imprime la ayuda de comandos de la demostracion [ AyudaSub ; new_line; print (b)"= AYUDA DE COMANDOS DE LA DEMOSTRACIÓN ="; print "^^"; print (f)" VERSION - ","Muestra la versión de ",(b)"Damusix"," y de esta demostración.^", (f)" AUDIO ON - ","Activa la salida de audio.^", (f)" AUDIO OFF - ","Desactiva la salida de audio.^", (f)" MUSICA ON - ","Inicia la reproducción de la música de fondo.^", (f)" MUSICA OFF - ","Detiene la reproducción de la música de fondo.^", (f)" MUSICA MOD - ","Selecciona la música de fondo en formato MOD.^", (f)" MUSICA OGG - ","Selecciona la música de fondo en formato Ogg Vorbis.^", (f)" EFECTO - ","Reproduce el efecto de sonido ~principal~ en su canal propio.^", (f)" REPETICION n - ","Cambia el número de repeticiones del efecto de sonido ~principal~.^", (f)" VOLUMEN n - ","Cambia el porcentaje de volumen del efecto de sonido ~principal~.^", (f)" VOLUMEN GLOBAL - ","Muestra el porcentaje de volumen global para todo el audio.^", (f)" VOLUMEN GLOBAL n - ","Cambia el porcentaje de volumen global para todo el audio.^", (f)" VIRTUAL - ","Reproduce el efecto de sonido ~extra~ en un canal virtual.^", (f)" LISTA - ","Crea al azar la Lista de Reproducción de sonidos y luego la toca.^", (f)" FADE X - ","Realiza varios Fades en ~tiempo-no-real~ a la música de fondo.^", (f)"*FADE IN - ","Realiza un FadeIn en ~tiempo-real~ a la música de fondo.^", (f)"*FADE OUT - ","Realiza un FadeOut en ~tiempo-real~ a la música de fondo.^", "^",(b)"*AVISO:"," Sólo se puede realizar UN TRABAJO DE FADE por vez. En la línea de estado aparecerá una ",(c)"barrita animada"," girando mientras el efecto de Fade esté en progreso. Puedes usar algún otro comando de esta Ayuda mientras tanto. (Unos cuantos comandos podrían interrumpir los efectos de Fade: esto es completamente normal y ha sido programado así intencionalmente en esta demostración.)^"; ]; !=============================================================================== ! Acciones relacionadas con el Audio !------------------------------------------------------------------------------- ! activa el sonido de Damusix [ AudioOnSub ; if (Damusix.HayAudio() == 1) { "[La reproducción de música y sonidos ya había sido activada]"; } Damusix.ActivarAudio(); "[Activando la reproducción de música y sonidos]"; ]; ! desactiva el sonido de Damusix [ AudioOffSub ; if (Damusix.HayAudio() == 0) { "[La reproducción de música y sonidos ya había sido desactivada]"; } Damusix.DesactivarAudio(); "[Desactivando la reproducción de música y sonidos]"; ]; ! inicia la reproduccion de la musica de fondo [ MusicaOnSub ; if (Damusix.SonandoDeFondo(musica) == 1) { print "[La música de fondo ya está sonando"; if (Damusix.HayAudio() == 0) { print " (pero el audio está DESACTIVADO)"; } print "]^"; return; } print "[Reproduciendo la música de fondo"; if (Damusix.HayAudio() == 0) { print " (pero el audio está DESACTIVADO)"; } print "]^"; Damusix.AsignarCanal(musica,0,volglobal,-1); ! asignamos canal 0 para musica-fondo seleccionada Damusix.Tocar(musica); ! y comenzamos a tocarla ]; ! detiene la reproduccion de la musica de fondo [ MusicaOffSub ; if (Damusix.SonandoDeFondo(musica) == 0) { "[La música de fondo ya había sido detenida]"; } Damusix.Parar(musica); "[Deteniendo la música de fondo]"; ]; ! cambia la musica de fondo para que toque la melodia en formato MOD [ MusicaModSub ; if (musica == MUSICA_MOD) { print "[La música de fondo en formato MOD ya había sido seleccionada"; if (Damusix.SonandoDeFondo(musica) == 1) { print " (y está SONANDO)"; } print "]^"; return; } if (Damusix.EnFade()) { print_ret "[No se cambiará la música de fondo mientras un Fade está en progreso]"; } musica = MUSICA_MOD; ! recordamos formato seleccionado de musica-fondo Damusix.AsignarCanal(musica,0,volglobal,-1); ! asignamos canal 0 para que se reproduzca la musica if (Damusix.SonandoDeFondoCanal(0) == 1) { ! el canal 0 esta tocando musica? (no importa formato) Damusix.Tocar(musica); ! si estaba tocando la musica al momento del cambio, la re-lanzamos } "[Se ha seleccionado la música de fondo en formato MOD]"; ]; ! cambia la musica de fondo para que toque la melodia en formato Ogg Vorbis [ MusicaOggSub ; if (musica == MUSICA_OGG) { print "[La música de fondo en formato Ogg Vorbis ya había sido seleccionada"; if (Damusix.SonandoDeFondo(musica) == 1) { print " (y está SONANDO)"; } print "]^"; return; } if (Damusix.EnFade()) { print_ret "[No se cambiará la música de fondo mientras un Fade está en progreso]"; } musica = MUSICA_OGG; ! recordamos formato seleccionado de musica-fondo Damusix.AsignarCanal(musica,0,volglobal,-1); ! asignamos canal 0 para que se reproduzca la musica if (Damusix.SonandoDeFondoCanal(0) == 1) { ! el canal 0 esta tocando musica? (no importa formato) Damusix.Tocar(musica); ! si estaba tocando la musica al momento del cambio, la re-lanzamos } "[Se ha seleccionado la música de fondo en formato Ogg Vorbis]"; ]; ! reproduce el efecto de sonido "principal" en su canal propio, antes ya dado [ TocarEfectoSub ; print "[Reproduciendo el efecto de sonido ~principal~ en su canal propio"; if (Damusix.HayAudio() == 0) { print " (pero el audio está DESACTIVADO)"; } print "]^"; Damusix.Tocar(FX_PRINCIPAL); ]; ! reproduce el efecto de sonido "extra" en algun canal virtual [ TocarVirtualSub ; print "[Reproduciendo el efecto de sonido ~extra~ en un canal virtual"; if (Damusix.HayAudio() == 0) { print " (pero el audio está DESACTIVADO)"; } print "]^"; Damusix.TocarV(FX_VIRTUAL); ]; ! crea al azar la lista de reproduccion de sonidos y luego la toca [ TocarListaReproduccionSub i aux; if (Damusix.EnFade()) { print_ret "[Imposible tocar la Lista de Reproducción mientras un Fade está en progreso]"; } print "[Creando la Lista de Reproducción con el orden de sus sonidos al azar]^"; for (i=1 : i<=5 : i++) { print (f)"<> ",i,") efecto de sonido: escala de pizzicato "; switch (Shuffle()) { 1: print "I"; aux = FX_LISTA1; 2: print "II"; aux = FX_LISTA2; 3: print "III"; aux = FX_LISTA3; 4: print "IV"; aux = FX_LISTA4; 5: print "V"; aux = FX_LISTA5; } print "^"; Damusix.CrearLista(aux); ! agrega elemento seleccionado (sonido) a la lista } ! para evitar que se puedan repetir sonidos en una proxima llamada a Shuffle() sonidos_lista_flags->0 = 0; ! aqui limpiamos el array con los flags de la sonidos_lista_flags->1 = 0; ! llamada a Shuffle() simplemente por seguridad print "[Tocando ahora la Lista de Reproducción de sonidos"; if (Damusix.HayAudio() == 0) { print " (pero el audio está DESACTIVADO)"; } print "]^"; Damusix.TocarLista(); ]; ! muestra el porcentaje de volumen global establecido actualmente [ EstadoVolumenGlobalSub ; "[El volumen global para todos los sonidos está establecido en ",volglobal,"%]"; ]; ! establece el volumen del efecto de sonido "principal" [ CambiarVolumenSub ; ! si el volumen no tiene dato numerico o si es menor a 0% o mayor a 100% if ( (inp1 ~= 1) || ((noun < 0) || (noun > 100)) ) { "[El volumen debe ser un valor correcto entre 0 y 100]"; } Damusix.Volumen(FX_PRINCIPAL,noun); "[Estableciendo el volumen del efecto de sonido ~principal~ en ",noun,"%]"; ]; ! establece el volumen global para la salida de audio de Damusix (todos los sonidos) [ CambiarVolumenGlobalSub ; ! si el volumen no tiene dato numerico o si es menor a 0% o mayor a 100% if ( (inp1 ~= 1) || ((noun < 0) || (noun > 100)) ) { "[El volumen global debe ser un valor correcto entre 0 y 100]"; } volglobal = noun; Damusix.VolumenGlobal(noun); "[Estableciendo el volumen global para todo el audio ",noun,"%]"; ]; ! establece el numero de repeticiones del efecto de sonido "principal" [ CambiarRepeticionSub ; ! si la repeticion no tiene dato numerico o si es menor a 1 if ( (inp1 ~= 1) || (noun < 1) ) { "[El número de repeticiones debe ser un valor correcto mayor a 0]"; } Damusix.Repeticion(FX_PRINCIPAL,noun); print "[Estableciendo la repetición del efecto de sonido ~principal~ en ",noun; if (noun == 1) { print " vez"; } else { print " veces"; } print "]^"; ]; ! realiza un FadeIn a la musica de fondo [ FadeInMusicaSub ; if (Damusix.EnFade()) { print_ret "[Imposible realizar FadeIn mientras otro Fade está en progreso]"; } print "[Realizando FadeIn en ~tiempo-real~ a la música desde 0% hasta % de vol. global actual]^"; fade_aux = 0; Damusix.Volumen(musica,0); ! solo si la musica no esta en reproduccion, la tocamos if (Damusix.SonandoDeFondo(musica) == 0) { Damusix.Tocar(musica); } print (f)"<> ","Lanzando efecto de FadeIn en ~tiempo-real~ en "; ContarHaciaAtras(5); new_line; Damusix.FadeIn(musica,10000); ]; ! realiza un FadeOut a la musica de fondo [ FadeOutMusicaSub ; if (Damusix.EnFade()) { print_ret "[Imposible realizar FadeOut mientras otro Fade está en progreso]"; } print "[Realizando FadeOut en ~tiempo-real~ a la música desde % de vol. global actual hasta 0%]^"; fade_aux = 0; Damusix.Volumen(musica,volglobal); ! solo si la musica no esta en reproduccion, la tocamos if (Damusix.SonandoDeFondo(musica) == 0) { Damusix.Tocar(musica); } print (f)"<> ","Lanzando efecto de FadeOut en ~tiempo-real~ en "; ContarHaciaAtras(5); new_line; Damusix.FadeOut(musica,10000); ]; ! realiza un conjunto de efectos de Fade en "tiempo-no-real" a la musica de fondo [ FadesXSub ; if (Damusix.EnFade()) { print_ret "[Imposible realizar Fades en ~tiempo-no-real~ mientras otro Fade está en progreso]"; } print "[Realizando efectos de Fade en ~tiempo-no-real~ a la música de fondo"; if (Damusix.HayAudio() == 0) { print " (pero el audio está DESACTIVADO)"; } print "]^"; Damusix.Volumen(musica,volglobal); ! solo si la musica no esta en reproduccion, la tocamos if (Damusix.SonandoDeFondo(musica) == 0) { Damusix.Tocar(musica); } print (f)"<> ","Lanzando efectos de Fade en ~tiempo-no-real~ en "; ContarHaciaAtras(5); new_line; print (f)"<> ","Realizando efecto FadeOutX^"; Damusix.FadeOutX(musica,500); print (f)"<> ","Realizando efecto FadeInX^"; Damusix.FadeInX(musica,500); print (f)"<> ","Realizando efecto FadeOutX^"; Damusix.FadeOutX(musica,500); print (f)"<> ","Realizando efecto FadeInX^"; Damusix.FadeInX(musica,500); print (f)"<> ","Realizando efecto FadeOutX^"; Damusix.FadeOutX(musica,500); print (f)"<> ","Realizando efecto FadeInX^"; Damusix.FadeInX(musica,500); ];