HTMLpointHTMLpoint HTMLpoint.com


 El sonido en jdk1.3: javax.swing.sampled



Los paquetes que se han añadido al lenguaje son 4:

  1. javax.sound.midi
  2. javax.sound.midi.spi
  3. javax.sound.sampled
  4. javax.sound.sampled.spi
Las partes que acaban por spi sirven para leer archivos sonoros, convertirlos o leer los archivos de instrumentos en el caso de midi. Nosotros no vamos a ver estás partes, sin embargo veremos javax.sound.sampled y javax.sound.midi.
El paquete javax.swing.sampled permite grabar, tocar y modificar datos sonoros.
El contenido del paquete es:

Interfaces
  • Clip
  • DataLine
  • Line
  • LineListener
  • Mixer
  • Port
  • SourceDataLine
  • TargetDataLine
Clases
  • AudioFileFormat
  • AudioFileFormat.Type
  • AudioFormat
  • AudioFormat.Encoding
  • AudioInputStream
  • AudioPermission
  • AudioSystem
  • BooleanControl
  • BooleanControl.Type
  • CompoundControl
  • CompoundControl.Type
  • Control
  • Control.Type
  • DataLine.Info
  • EnumControl
  • EnumControl.Type
  • FloatControl
  • FloatControl.Type
  • Line.Info
  • LineEvent
  • LineEvent.Type
  • Mixer.Info
  • Port.Info
  • ReverbType
Excepciones
  • LineUnavailableException
  • UnsupportedAudioFileException
Vamos a ver cómo utilizar este paquete sólo para tocar un archivo sonoro, por ejemplo, el archivo llamado italian.wav.

En primer lugar, tenemos que buscar el archivo y esto lo hacemos, como siempre, introduciendo un objeto de la clase File (de java.io)

File sf=new File("italian.wav");

Llegados a este punto, empezamos una try{} catch, en la que incluimos todo lo que tiene que ver con el sonido. Después capturaremos las excepciones:

catch(UnsupportedAudioFileException ee){}
catch(IOException ea){}
catch(LineUnavailableException LUE){};


Para usar el motor sonoro de Java tenemos que empezar por la clase AudioSystem y de ésta obtendremos dos objetos de tipo AudioFileFormat y AudioInputStream

AudioFileFormat aff=AudioSystem.getAudioFileFormat(sf);
AudioInputStream ais=AudioSystem.getAudioInputStream(sf);


que representan el contenido del archivo italian.wav

tenemos que crear un objeto AudioFormat de AudioFileFormat para que se pueda tocar

AudioFormat af=aff.getFormat();

Nuestro objetivo es crear un objeto que implemente la interfaz Clip, que incluye los métodos play. Para hacer esto escribiremos:

DataLine.Info info = new DataLine.Info(
Clip.class,
ais.getFormat(),
((int) ais.getFrameLength() *
af.getFrameSize()));

Clip ol = (Clip) AudioSystem.getLine(info);
De ol, que es el tipo Clip, podemos tocar y esto se consigue abriendo una línea e invocando los métodos para tocar:

ol.open(ais); <-(ABRIR l'input stream, es decir, el archivo italian.wav)

y, por lo tanto

ol.loop(NÚMERO);

en el que NÚMERO indica el número de repeticiones del archivo, en nuestro caso, Clip. LOOP_CONTINUOUSLY para indicar que se tiene que repetir infinitas veces.

El ejemplo completo, editado en sonido.java es:

import javax.swing.*;
import javax.sound.sampled.*;
import java.io.*;

public class sonido extends JFrame
{


public sonido()
{

File sf=new File("italian.wav");
AudioFileFormat aff;
AudioInputStream ais;


try
{
aff=AudioSystem.getAudioFileFormat(sf);

ais=AudioSystem.getAudioInputStream(sf);


AudioFormat af=aff.getFormat();


DataLine.Info info = new DataLine.Info(
Clip.class,
ais.getFormat(),
((int) ais.getFrameLength() *
af.getFrameSize()));

Clip ol = (Clip) AudioSystem.getLine(info);

ol.open(ais);

ol.loop(Clip.LOOP_CONTINUOUSLY);

System.out.println("reprodución empezada, apretar CTRL-C para interrumpir");

}
catch(UnsupportedAudioFileException ee){}
catch(IOException ea){}
catch(LineUnavailableException LUE){};

}

public static void main(String[] ar)
{
new sonido();

}

}

Parece un poco trabajoso, sin embargo, siguiendo estos pasos es posible leer y tocar cada archivo wav. Para hacer otras operaciones, el paquete es bastante complejo y actualmente no hay manuales que expliquen el funcionamiento (excepto la documentación del JDK que, como habéis tenido la oportunidad de ver, no explica cómo utilizar las cosas, sino que las describe y punto).


  Volver al inicio de la página