3 minute read
MULTIMEDIA
from JAVA DESDE CERO
by Ren Elias
Java permite cargar y visualizar archivos GIF o JPEG de imagen y AU de audio (solamente en mono, 8 bits, 8000Hz de muestreo). Para el caso del sonido, un archivo de audio se carga mediante un objeto de la clase AudioClip, mediante el método getAudioClip(URL, archivo), se ejecuta con los métodos play() o loop() y se detiene con stop(). Noten esto! Si bien dijimos que un applet no puede acceder al disco de la máquina cliente, SI puede leer archivos del server desde donde se cargó. Por lo tanto, pasándole el URL de la máquina desde donde se cargó el applet, podemos leer cualquier tipo de archivo a través de la red. La forma más segura de indicar dicho URL es mediante el método getDocumentBase(), que nos da el URL adecuado. Por ejemplo, puedo cargar y reproducir audio con sólo dos líneas:
........ AudioClip sonido = getAudioClip( getDocumentBase(), "sonido.au" ); sonido.play(); .........
Advertisement
Por otra parte, una foto puede cargarse mediante un objeto de clase Image mediante el método getImage(URL, archivo). Luego la mostramos en un objeto Graphics correspondiente al applet (o al área de dibujo) mediante drawImage(imagen, x, y, observador). Observador es un objeto que implementa la interface ImageObserver; los applets, por descender de Component (que implementa dicha interface) también la implementan. Típicamente, la imagen se visualiza en el método paint(...) del applet:
............. algunMetodo(...) { .......... Image imagen = getImage(getDocumentBase(), "imagen.gif"); .......... } ........... public void paint(Graphics g) { g.drawImage(imagen, xOffset, yOffset, this); } ............... // "this" representa al applet
El problema con las imágenes es asegurarse que fue cargada antes de mostrarla. Para eso se utiliza un MediaTracker (también debería servir para los archivos de audio, pero en esta versión aún no está implementado). Mediante addImage( imagen, grupo) se agrega una imagen a la lista del MediaTracker, y hay métodos para esperar que sea cargada (como waitForAll() o waitForID(grupo)), para verificar que se haya cargado correctamente (como checkAll(), checkID(grupo), isErrorAny()...), etcétera. El siguiente applet utiliza estos conceptos para cargar una imagen y un archivo de audio y mostrarlos:
// Ejemplo24.java import java.awt.*; import java.applet.*;
public class Ejemplo24 extends Applet {
MediaTracker String Image supervisor; archImagen, archAudio; imagen;
AudioClip Label Panel audio;
titulo; cuadro;
public void init() { supervisor = new MediaTracker(this); archImagen = "javacero.gif"; archAudio = "tada.au";
// carga imagen imagen = getImage(getDocumentBase(), archImagen); supervisor.addImage(imagen,0); try { supervisor.waitForID(0); se cargue
} catch (InterruptedException e) { System.out.println("Error cargando imagen!"); } showStatus("Imagen cargada");
// carga sonido audio = getAudioClip(getDocumentBase(), archAudio);
// arma layout setLayout(new BorderLayout()); titulo = new Label(archImagen); setFont(new Font("helvetica", Font.BOLD, 18)); add("South", titulo);
public void start() { repaint(); audio.play(); }
public void paint(Graphics g) { if (supervisor.isErrorAny()) { g.setColor(Color.black); g.fillRect(0, 0, size().width, size().height); return; } g.drawImage(imagen, 0, 0, this); }
Para visualizarlo, como siempre, creamos un HTML:
<HTML> <HEAD> <TITLE>Ejemplo 24 - Ejemplo Multimedia</TITLE> </HEAD> <BODY> // espero que
<applet code="Ejemplo24.class" width=150 height=200> </applet> </BODY> </HTML>
Parametrizando un applet
Vamos a aprovechar este ejemplo, modificándolo un poco para indicarle desde el HTML qué archivos debe cargar, mediante parámetros. Nuestro HTML modificado será:
<HTML> <HEAD> <TITLE>Ejemplo 24 - Multimedia</TITLE> </HEAD> <BODY>
<applet code="Ejemplo24.class" width=150 height=200> <param name="imagen" value="javacero.gif"> <param name="sonido" value="tada.au"> </applet> </BODY> </HTML>
Para leer estos parámetros desde el applet, usamos el método getParameter(nombreParámetro), así que podemos modificar nuestro applet simplemente modificando un par de líneas:
archImagen = getParameter("imagen"); archAudio = getParameter("sonido");
Voilá! Pueden probar de cargar este applet en http://www.amarillas.com/rock/java/Ejemplo24.htm. De esta manera podemos pasar cualquier valor como parámetro para un applet, haciéndolo más flexible. Y esto es todo por hoy! Con esto hemos visto una gran parte de lo que es Java. No hemos profundizado demasiado en cada punto, pero hemos hecho ejemplos que funcionan para ilustrar cada cosa. Sin embargo, hemos dejado un punto importante y muy fuerte de Java, que es el de las comunicaciones entre aplicaciones y, especialmente, el uso de sockets y la programación de aplicaciones cliente-servidor.