19

Música de fondo en publicaciones

Hola hoy voy a compartir con ustedes un ejemplo (contestando a Jackie en su comentario) de como reproducir música de fondo en sus publicaciones y poder navegar entre las paginas sin que la música se pare.

Las opciones para solucionar esto eran:

Objeto MediaPlayer (al cambiar de página se para)
Objeto Flash (al cambiar de página se vuelve a ejecutar)
Comandos MCI (ésta es la solución)

Pues bien ya antes había tenido un pequeño encuentro con los comandos MCI en la entrada Lista de reproducción y más… la cual recomiendo que le den un vistazo antes, pero en este caso era distinto, pues yo debía investigar como saber si ya se esta reproduciendo un archivo antes de reproducir otro.

Luego de mucho google 😀 di con la solución. Pero vamos por pasos.

Primero le diremos a nuestra publicación (en acciones al cargar la aplicación ) cuales y cuantos archivos queremos reproducir y le diremos que todavía no estamos reproduciendo.

setvar "[temas]" "3"
setvar "[tema1]" "[PubDir]tema1.mp3"
setvar "[tema2]" "[PubDir]tema2.mp3"
setvar "[tema3]" "[PubDir]tema3.mp3"
setvar "[play]" "NO"

Luego en las acciones de la primera página (o la que necesitemos que se inicie la reproducción) pondremos el siguiente código.

If "[play]" "=" "NO"
    :ran
    Random "[temas]" "[random]"
    if "[random]" "=" "0"
        GotoLine "ran"
    endif
    npRutaCortaArchivo "[tema[random]]"
    setvar "[tema]" "[npResultadoAccion]"
    SetVar "[accion]" "MCICommand [#34]play [tema][#34]"
    npEjecutarAccion "[accion]"
    SetVar "[play]" "SI"
EndIf
TimerStart "Timer1" "1000"

Lo que hace el código anterior es generar un numero aleatorio para empezar a reproducir ese archivo, esto para evitar siempre reproduzca el mismo sonido siempre. Todo ésto lo hace solamente una vez al entrar a la página pues si navegamos a otra y volvemos a ésta empezaría a reproducir otro archivo haciendo que se mezclen los sonidos.

En las acciones del Timer

SetVar "[accion]" "MCICommand [#34]STATUS [tema] mode[#34]"
npEjecutarAccion "[accion]"
if "[MCIResponse]" "<>" "playing"
    if "[random]" "=" "3"
        setvar "[random]" "1"
    else
        if "[random]" "<" "3"
            setvar "[random]" "[random]+1"
        endif
    Endif
    npRutaCortaArchivo "[tema[random]]"
    setvar "[tema]" "[npResultadoAccion]"
    SetVar "[accion]" "MCICommand [#34]play [tema][#34]"
    npEjecutarAccion "[accion]"
Endif

El código anterior obtiene el estado del dispositivo MCI y si éste no esta reproduciendo pasa al siguiente tema.

Espero que sea claro, pues me cuesta explicarlo en detalle, cualquier cosa comenten y responderé su consulta.

Plugins Utilizados:

  • NeoDouble (DEC)

Screenshot del ejemplo:

ejemplo_musica_fondo

Descarga:

  ejemplo_musica_fondo.rar (6,9 MiB, 3.544 hits)


Saludos

4

Lista de reproducción y más…

Hoy voy a tratar de aclarar las dudas planteadas en el foro de Hispaneobook por EvilnesS en el post Mas dudas… .

La teoría:

Para poder hacer los botones de play, pause, stop , etc. recurrí a la función MCICommand comando_mci, la cúal nos permite manejar dispositivos multimedia de windows.

.//Algunos ejemplos
MCICommand "play c:\mi_tema.mp3"
MCICommand "pause c:\mi_tema.mp3"
MCICommand "stop c:\mi_tema.mp3"

Hasta acá todo ok…la cosa se complico al momento de pasarle la canción como variable. Si el botón play tenia en sus acciones MCICommand play [variable] me daba un error de MCI. Lo cual lo resolví haciendo uso del Plug-in NeoDouble (DEC) con la función npEjecutarAccion accion_de_neobook lo cual me permitió hacer lo siguiente:

SetVar "[accion]" "MCICommand [#34]play [tema][#34]"
NpEjecutarAccion "[accion]"

Mas información sobre comandos MCI acá.

El tema de la lista de reproducción:

Tenemos que mostrar el cuadro de dialogo Abrir (FileOpenBox). Si el usuario elige sólo 1 archivo lo agregamos al listbox (ListBoxAddItem), si fueran varios tendremos que separar (StrParse) los archivos elegidos y mediante un loop agregarlos uno a uno al listbox. Luego podes mover(ListBoxMoveItem) los temas para acomodarlos en el orden deseado. Luego podrías agregar una función para guardar la lista lo que le permitirá al usuario hacer distintas listas de reproducción. En el .pub incluido esta todo comentado. Espero sirva de ayuda.

La practica (el ejemplo) :

Screnshoot de lista de reproducción
screenshot del ejemplo

Plug-ins utilizados:
– NeoDouble (DEC) disponible en downloads.

NOTA: El ejemplo sólo es para explicar la implementación de una lista de reproducción en neobook, no es un reproductor, por lo cual no contiene funciones avanzadas para comprobar el tiempo transcurrido, el estado (listo,reproduciendo), etc.

  lista_rep.rar (2,2 MiB, 2.246 hits)