Multimedia!

Java permite cargar y visualizar archivos GIFo JPEG de imagen y AUde audio (solamente en mono, 8 bits, 8000Hz de muestreo).

Para el caso del sonido, un archivo de audio se carga medianteun objeto de la clase AudioClip, medianteel 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 aldisco de la máquina cliente, SI puede leer archivos delserver desde donde se cargó. Por lo tanto, pasándoleel 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 elmétodo getDocumentBase(), quenos da el URL adecuado.

Por ejemplo, puedo cargar y reproducir audio con sólo doslíneas:

........AudioClip sonido = getAudioClip( getDocumentBase(), "sonido.au" );sonido.play();.........

Por otra parte, una foto puede cargarse mediante un objeto declase Image mediante el métodogetImage(URL, archivo). Luego la mostramosen un objeto Graphics correspondienteal applet (o al área de dibujo) mediante drawImage(imagen,x, y, observador). Observador es un objeto que implementala 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étodopaint(...) 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 cargadaantes 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) seagrega una imagen a la lista del MediaTracker,y hay métodos para esperar que sea cargada (como waitForAll()o waitForID(grupo)), para verificarque se haya cargado correctamente (como checkAll(),checkID(grupo), isErrorAny()...),etcétera.

El siguiente applet utiliza estos conceptos para cargar una imageny un archivo de audio y mostrarlos:

//	Ejemplo24.javaimport java.awt.*;import java.applet.*;public class Ejemplo24 extends Applet {	MediaTracker	supervisor;	String		archImagen, archAudio;	Image		imagen;	AudioClip	audio;	Label		titulo;	Panel		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);			// espero que 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><applet code="Ejemplo24.class" width=150 height=200></applet></BODY></HTML>

Parametrizando un applet

Vamos a aprovechar este ejemplo, modificándolo un pocopara 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étodogetParameter(nombreParámetro),así que podemos modificar nuestro applet simplemente modificandoun 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ámetropara 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 hemosprofundizado demasiado en cada punto, pero hemos hecho ejemplosque funcionan para ilustrar cada cosa.

Sin embargo, hemos dejado un punto importante y muy fuerte deJava, que es el de las comunicaciones entre aplicaciones y, especialmente,el uso de sockets y la programación de aplicaciones cliente-servidor.En esto nos centraremos en el próximo capítulo.




 

<> Página de tutoriales <> Página Anterior <> Siguiente Capitulo <>