Escribir Applets

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.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO