Sunteți pe pagina 1din 23

Audio

Sonido
 Java también posee métodos
predefinidos para reproducir sonido.
El ordenador remoto no necesita
tener un reproductor de audio; Java
realizará la reproducción
(evidentemente, el ordenador remoto,
en donde se ejecuta el applet,
necesitará disponer de hardware de
sonido).
Ventajas
 El Java API de sonido es un bajo nivel de API,
para la realización y el control de la entrada y
salida de sonido de los medios de
comunicación, incluidos los de audio y de
Interfaz digital de instrumentos musicales (MIDI)
de datos. The Java Sound
 El Java API de sonido ofrece explícita el control
sobre las capacidades que normalmente se
exige para una buena entrada y salida, en un
marco que promueva la flexibilidad y
extensibilidad.
Posibles áreas de aplicación
 Marcos de comunicación, tales como
conferencias y telefonía
 Los usuarios finales sistemas de entrega de
contenido, tales como reproductores multimedia
y la música mediante streaming de contenidos
 Aplicación de programas interactivos, como
juegos y sitios Web que utilizan contenido
dinámico
 La creación de contenidos y edición
 Herramientas, manuales y utilidades
 En java es posible la aplicación de
sonidos por medio de dos paquetes, el
java.applet y el interface AudioClip para la
aplicación en applets.
 Y el paquete javax.sound y la interface
Clip de API Sound de Java para
aplicaciones.
API Sound
 Java acepta 2 diferentes tipos de datos de
audio son soportados por la API Java de
sonido:

 Archivos MIDI (Musical Instrument Digital


Interface)
 muestra de datos de audio (.wav)
API Sonido Java
 El API de Java dedicada al sonido es la
llamada Java Sound API proporcionado
ya con el entorno de desarrollo de Sun.
Este API se compone de
4 packages (paquetes):
 javax.sound.sampled.
 javax.sound.sampled.spi.
 javax.sound.midi.
 javax.sound.midi.spi.
 El primero, javax.sound.sampled, contiene
las clases necesarias para el manejo del
sonido muestreado, esto incluye la
captura, la mezcla y la reproducción de
audio, proporcionando además algún
control y efecto sobre el sonido así como
interfaces para el almacenamiento, será
el package estudiado en este documento.
 El package javax.sound.midi proporciona
las interfaces de síntesis,
secuenciamiento y transporte MIDI.
Los packages
javax.sound.sampled.spi y javax.sound.mi
di.spi proporcionan una interfaz para los
desarrolladores de servicios basados en
las interfaces anteriores.
 Los objetos de la clase AudioFormat parte
del paquete javax.sound.sampled definen
el formato de una señal de audio, esto es,
el número de canales, el número de bits
por muestra, frecuencia de muestreo, el
tamaño de la trama de voz y su
frecuencia, formato de almacenamiento
de los datos en memoria (big
endian o little endian) y el tipo de
codificación (ley a, ley m, PCM)
AudioFormat
 int getChanels(); /* Devuelve el número de canales. */
 AudioFormat.Encoding getEncoding(); /* Devuelve objeto con
información sobre el tipo de codificación. */
 float getFrameRate(); /* Devuelve la frecuencia de trama de la
señal. */
 int getFrameSize(); /* Devuelve tamaño de la trama en bytes. */
float getSampleRate(); /* Devuelve la frecuencia de muestreo. */

 int getSampleSizeInBits(); /* Devuelve el tamaño en bits de cada


muestra de sonido. */

 boolean isBigEndian(); /* Devuelve true alineamiento big endian y


false little endian. */
Class DataLine
Los objetos de la clase DataLine son las
conexiones entre los Mixer y nuestro
sistema.
Mixer: Mezclador que representa un
dispositivo hardware o software del
sistema.
Estos objetos tienen un buffer de datos,
un proceso de control interno, y una
interfaz con el usuario.
DataLine
 int available(); /* Indica el número de bytes que que están libres en el buffer
interno. */
 void drain(); /* Este método sirve bloquea el objeto hasta que quede limpio
el buffer. */
 void flush(); /* Este metodo limpia el buffer. */
 int getBufferSize(); /* Devuelve el tamaño del buffer en bytes. */
AudioFormat getFormat(); /* Devuelve el formato del audio. manejado. */
 int getFramePosition(); /* Devuelve la posición de la trama. */
 float getLevel(); /* Devuelve el nivel de la señal. */
 long getMicrosecondPosition(); /* Obtiene la posición actual de los datos de
audio en microsegundos. */
 boolean isActive(); /* Devuelve true si estan pasando datos (ejecutado el
comando start) */
 boolean isRunning(); /* Devuelve true si está abierto. */
 void start(); /* Comienza la reproducción. */
 void stop(); /* Termina la reproducción. */
Clase AudioSystem
 Para acceder a los componentes del
sistema la clase AudioSystem proporciona
a la aplicación un punto de entrada a los
componentes instalados en el sistema.
 Proporciona métodos para realizar las
conversiones de formato y métodos para
trasladar el sonido a objetos Stream o
File para el transporte, comunicación o
almacenamiento.
AudioSystem
 getAudioFileFormat ( File file) o( InputStream stream) o
( URL url)
 //Obtiene el formato de archivo de audio de la
especificada File, de una entrada o flujo o de una
direccion URL o de internet.

getAudioInputStream ( File file) o( InputStream stream) o


( URL url)
Obtiene un flujo de entrada de audio de la prevista File ,
de una entrada o flujo o de una direccion URL o de
internet.
Interface Clip
La interfaz Clip representa un tipo
especial de línea de datos cuyos
datos de audio pueden ser cargados
antes de la reproducción, en lugar de
streaming en tiempo real.
Interfaz Clip
 Porque los datos se cargan previamente y
tiene una longitud conocida, se puede
establecer un clip para empezar a
reproducir en cualquier posición en sus
datos de audio. También puede crear un
loop, para que el clip se reproduzca varias
veces. El loop se especifican con un inicio
y finalización el marco de muestreo, junto
con el número de veces que el loop debe
ser reproducido.
Interfaz Clip
 getFrameLength()
Obtiene la longitud en muestras de frames del clip.
 getMicrosecondLength()
Obtiene la duracion in microsegundos
 loop (int count)
 Comienza un bucle de reproduccion por n veces.
 open ( AudioInputStream stream)
Abre el clip con el formato de audio y los datos presentes en el flujo
de entrada de audio
Reproducción Repetitiva
 Una vez que se carga el clip de sonido, se pueden utilizar tres
métodos:

sonido.play();
 para reproducir el clip de sonido.

sonido.loop();
 para iniciar la reproducción del clip de sonido y que entre en
un bucle de reproducción, es decir, en una repetición
automática del clip.

sonido.stop();
 para detener el clip de sonido que se encuentre en ese
instante en reproducción.
import java.io.File;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;

public class ReproduceAudio {

public static void main(String[] args) {


try {
Clip sonido = AudioSystem.getClip();
sonido.open(AudioSystem.getAudioInputStream(new File("12 Aunque
no sea conmigo (Flamingos, Madrid 20-12-02)-DeVocalized.wav")));
sonido.start();
while (sonido.isRunning())
Thread.sleep(1000);
sonido.close();
} catch (Exception e) {
System.out.println("" + e);
}
}
}
En primero lugar, con AudioSystem.getClip() obtenemos un Clip de
sonido.

Clip sonido = AudioSystem.getClip();

Este Clip tiene un método open() que admite un AudioInputStream


para poder reproducirlo. Nuevamente, la clase AudioSystem con su
método getAudioInputStream() nos permite obtener este
AudioInputStream a partir de un File normal.

sonido.open(AudioSystem.getAudioInputStream(new File("12
Aunque no sea conmigo (Flamingos, Madrid 20-12-02)-
DeVocalized.wav"));

Una vez abierto, el método start() comenzará la reproducción del


fichero de sonido

sonido.start();
El programa no debe terminar inmediatamente, puesto
que si lo hace la reproducción se parará inmediatamente.
Por ello, esperaremos hasta que termine. El método
isRunning() de la clase Clip nos dice si todavía se está
reproduciendo, así que haremos un bucle hasta que
termine la reproducción.

while (sonido.isRunning())
Thread.sleep(1000);

Una vez que termine, cerramos el Clip.

sonido.close();

S-ar putea să vă placă și