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.

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