Programación en castellano
-Tutoriales

Escribir Applets


Ejecutar Sonidos

En el paquete (java.applet), la clase Applet y el interface AudioClip proporcionar un soporte básico para ejecutar sonidos. Actualmente, el API sólo soporta un formato de sonido: ficheros de 8 bit, µlaw, 8000 Hz, one-channel, Sun ".au". Podemos crearlos en una estación Sun usando la aplicación audiotool. Podemos convertir ficheros desde otras fuentes de datos usando un programa de conversión de formatos de audio.

. Métodos Relacionados por el Sonido

Abajo tenemos los métodos de Applet relacionados con el sonido. El formato de dos argumentos de cada método toma una URL base, que normalmente es devuelto por un getDocumentBase o un getCodeBase, y la localización del fichero de sonido en relación a la URL base. Deberíamos usar el code base para sonidos que son integrales en el applet. El document base se usa para sonidos especificados por el usuario del applet, a través de los parámetros del applet.

getAudioClip(URL)
Devuelve un objeto que implementa el interface AudioClip.
play(URL)
Ejecutar el AudioClip correspondiente a la URL especificada.

El interface AudioClip define los siguientes métodos:

loop
Empieza la ejecución del clip repetidamente.
play
Ejecuta el sonido una vez.
stop
Para el clip.

Funciona con ambos sonidos, el de bucle y el de una sola vez.

. Un Ejemplo

Aquí tenemos un applet llamado SoundExample que ilustra unas cuantas cosas sobre los sonidos. Observa que, para propósitos de isntrucción, el appler añade 10 segundos al tiempo de carga para cada sonido. Si el sonido fuera más largo o la conexión del usuario más lenta que la neustra, estos retardos podrían ser realistas.

Pulsa sobre la imagen para ejecutar el applet...

Nota:

Como algunos viejos navegadores no soportan 1.1, el applet anterior es una versión 1.0 (aquí está el código 1.0; y aquí está el código 1.1). Para ejecutar una versión 1.1 del applet, puedes ir a la página example-1dot1/SoundExample.html.

El applet SoundExample proporciona una arquitectura para cargar y ejecutar múltiples sonidos en un applet. Por esta razón, es más complejo de lo necesario. Esencialmente, el código de carga y ejecución de sonidos se cuece aquí:

AudioClip onceClip, loopClip;
onceClip = applet.getAudioClip(getCodeBase(), "bark.au");
loopClip = applet.getAudioClip(getCodeBase(), "train.au");
onceClip.play();     //Play it once.
loopClip.loop();     //Start the sound loop.
loopClip.stop();     //Stop the sound loop.

Como no hay nada más aburrido que un applet que contínuamente hace ruido; después de dejar su página, el applet SoundExample deja de ejecutar el bucle de sonidos, y empieza la ejecución cuando el usuario vuelve a la página. Hace esto implementando sus métodos stop y start de esta forma:

public void stop() {
    //If one-time sound were long, we'd stop it here, too.  
    //looping is a boolean instance variable that's initially
    //false. It's set to true when the "Start sound loop" button
    //is clicked and to false when the "Stop sound loop" or "Reload
    //sounds" button is clicked.
    if (looping) {
        loopClip.stop();    //Stop the sound loop.
    }
}
 
public void start() {
    if (looping) {
        loopClip.loop();    //Restart the sound loop.
    }
}    

El applet SoundExample usa tres clases:

  • Una subcalse Applet, SoundExample, que controla la ejecución del applet.
  • Una subclase Hashtable, SoundList, que contiene los AudioClips.

    Esto es demasiado para este applet, pero si fueramos a escribir un applet queusara muchos ficheros de sonido, una clase como ésta sería muy útil

  • Una subclase de ThreadSoundLoader, cada uno de cuyos ejemplares carga un AudioClip en segundo plano.

    Durante la inicialización del applet, éste precarga cad sonido creando un SoundLoader para él.

Precargar los sonidos en un thread de segundo plano (con SoundLoader) mejora el rendimiento percivido reduciendo la cantidad de tiempo que el usuario tiene que esperar para poder interactúar con el applet. Hace esto reduciendo la cantidad de tiendo que gasta en el método init. Si simplemente llamamos a getAudioClip en el método init del applet, pasaría bastante tiempo antes de getAudioClip volviera, lo que significa que el applet no podría ejecutar otras sentencias de su método init, y que el método start del applet no podría ser llamado. (Para este applet un retardo en la llamda al método start no importa).

Otra ventana de la carga de sonidos en un thread se segundo plano es que permite al applet responder apropiadamente (e inmediatamente) a las entradas del usuario que normalmente harán que se ejecute el sonido, incluso si el sonido no se ha cargado todavía. Si simplemente usamo los método Applet play, por ejemplo, la primera vez que el usuario hace algo para hacer que el applet ejecute un sonido particular, el dibujo y el manejo de eventos del applet quedarán congelados mientras se carga el sonido. En su lugar, el applet detecta que el sonido no se ha cargado todavía y responde apropiadamente.

Este ejemplo se explica en más detalle en la página Threads en Applets: Ejemplos.

 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad
Mantenida por: Claudio y Dani.

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: jugar gratis | amor | navidad 2009 | registro de dominios | servidores dedicados
más internet: comprar | gratis | posicionamiento en buscadores | decoración libre | gifs animados