Top Banner
Audio Audio
23

Audio en Java

Jun 11, 2015

Download

Documents

husac

Programacion en Java Audio
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Audio en Java

AudioAudio

Page 2: Audio en Java

SonidoSonido

JavaJava también posee métodos también posee métodos predefinidos para reproducir sonido. predefinidos para reproducir sonido. El ordenador remoto no necesita El ordenador remoto no necesita tener un reproductor de audio; Java tener un reproductor de audio; Java realizará la reproducción realizará la reproducción (evidentemente, el ordenador remoto, (evidentemente, el ordenador remoto, en donde se ejecuta el applet, en donde se ejecuta el applet, necesitará disponer de hardware de necesitará disponer de hardware de sonido).sonido).

Page 3: Audio en Java

VentajasVentajas

El Java API de sonido es un bajo nivel de API, El Java API de sonido es un bajo nivel de API, para la realización y el control de la entrada y para la realización y el control de la entrada y salida de sonido de los medios de salida de sonido de los medios de comunicación, incluidos los de audio y de comunicación, incluidos los de audio y de Interfaz digital de instrumentos musicales (MIDI) Interfaz digital de instrumentos musicales (MIDI) de datos. The Java Sound de datos. The Java Sound

El Java API de sonido ofrece explícita el control El Java API de sonido ofrece explícita el control sobre las capacidades que normalmente se sobre las capacidades que normalmente se exige para una buena entrada y salida, en un exige para una buena entrada y salida, en un marco que promueva la flexibilidad y marco que promueva la flexibilidad y extensibilidad. extensibilidad.

Page 4: Audio en Java

Posibles áreas de aplicación Posibles áreas de aplicación

Marcos de comunicación, tales como Marcos de comunicación, tales como conferencias y telefonía conferencias y telefonía

Los usuarios finales sistemas de entrega de Los usuarios finales sistemas de entrega de contenido, tales como reproductores multimedia contenido, tales como reproductores multimedia y la música mediante streaming de contenidos y la música mediante streaming de contenidos

Aplicación de programas interactivos, como Aplicación de programas interactivos, como juegos y sitios Web que utilizan contenido juegos y sitios Web que utilizan contenido dinámico dinámico

La creación de contenidos y edición La creación de contenidos y edición Herramientas, manuales y utilidades Herramientas, manuales y utilidades

Page 5: Audio en Java

En java es posible la aplicación de En java es posible la aplicación de sonidos por medio de dos paquetes, el sonidos por medio de dos paquetes, el java.applet y el interface AudioClip para la java.applet y el interface AudioClip para la aplicación en applets.aplicación en applets.

Y el paquete javax.sound y la interface Y el paquete javax.sound y la interface Clip de API Sound de Java para Clip de API Sound de Java para aplicaciones.aplicaciones.

Page 6: Audio en Java

API SoundAPI Sound

Java acepta 2 diferentes tipos de datos de Java acepta 2 diferentes tipos de datos de audio son soportados por la API Java de audio son soportados por la API Java de sonido: sonido:

Archivos Archivos MIDIMIDI ( (Musical Instrument Digital Musical Instrument Digital Interface) Interface)

muestra de datos de audio (.wav)muestra de datos de audio (.wav)

Page 7: Audio en Java

API Sonido JavaAPI Sonido Java

El API de Java dedicada al sonido es la El API de Java dedicada al sonido es la llamada llamada Java Sound APIJava Sound API proporcionado ya  proporcionado ya con el entorno de desarrollo de con el entorno de desarrollo de SunSun. Este . Este API se compone de 4 API se compone de 4 packagespackages (paquetes): (paquetes):

javax.sound.sampled.javax.sound.sampled. javax.sound.sampled.spi.javax.sound.sampled.spi. javax.sound.midi.javax.sound.midi. javax.sound.midi.spi.javax.sound.midi.spi.

Page 8: Audio en Java

El primero, El primero, javax.sound.sampledjavax.sound.sampled, contiene , contiene las clases necesarias para el manejo del las clases necesarias para el manejo del sonido muestreado, esto incluye la sonido muestreado, esto incluye la captura, la mezcla y la reproducción de captura, la mezcla y la reproducción de audio, proporcionando además algún audio, proporcionando además algún control y efecto sobre el sonido así como control y efecto sobre el sonido así como interfaces para el almacenamiento, será interfaces para el almacenamiento, será el el packagepackage estudiado en este documento. estudiado en este documento.

Page 9: Audio en Java

El El package javax.sound.midipackage javax.sound.midi proporciona  proporciona las interfaces de síntesis, las interfaces de síntesis, secuenciamiento y transporte MIDI. secuenciamiento y transporte MIDI. Los Los packages packages javax.sound.sampled.spijavax.sound.sampled.spi y  y javax.sound.mijavax.sound.midi.spidi.spi proporcionan una interfaz para los  proporcionan una interfaz para los desarrolladores de servicios basados en desarrolladores de servicios basados en las interfaces anteriores.las interfaces anteriores.

Page 10: Audio en Java

Los objetos de la clase AudioFormat parte Los objetos de la clase AudioFormat parte del paquete javax.sound.sampled definen del paquete javax.sound.sampled definen el formato de una señal de audio, esto es, el formato de una señal de audio, esto es, el número de canales, el número de bits el número de canales, el número de bits por muestra, frecuencia de muestreo, el por muestra, frecuencia de muestreo, el tamaño de la trama de voz y su frecuencia, tamaño de la trama de voz y su frecuencia, formato de almacenamiento de los datos formato de almacenamiento de los datos en memoria (en memoria (big endianbig endian o  o little endianlittle endian) y el ) y el tipo de codificación (ley a, ley m, PCM)tipo de codificación (ley a, ley m, PCM)

Page 11: Audio en Java

AudioFormatAudioFormat

int getChanels(); /* Devuelve el número de canales. */ int getChanels(); /* Devuelve el número de canales. */ AudioFormat.Encoding getEncoding(); /* Devuelve objeto con AudioFormat.Encoding getEncoding(); /* Devuelve objeto con

información sobre el tipo de codificación. */ información sobre el tipo de codificación. */ float getFrameRate(); /* Devuelve la frecuencia de trama de la float getFrameRate(); /* Devuelve la frecuencia de trama de la

señal. */ señal. */ int getFrameSize(); /* Devuelve tamaño de la trama en bytes. */ int getFrameSize(); /* Devuelve tamaño de la trama en bytes. */

float getSampleRate(); /* Devuelve la frecuencia de muestreo. */ float getSampleRate(); /* Devuelve la frecuencia de muestreo. */

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

boolean isBigEndian(); /* Devuelve true alineamiento big endian y boolean isBigEndian(); /* Devuelve true alineamiento big endian y false little endian. */false little endian. */

Page 12: Audio en Java

Class DataLineClass DataLine

Los objetos de la clase DataLine son las Los objetos de la clase DataLine son las conexiones entre los Mixer y nuestro conexiones entre los Mixer y nuestro sistema.sistema.

Mixer: Mezclador que representa un Mixer: Mezclador que representa un dispositivo hardware o software del dispositivo hardware o software del sistema.sistema.

Estos objetos tienen un buffer de datos, un Estos objetos tienen un buffer de datos, un proceso de control interno, y una interfaz proceso de control interno, y una interfaz con el usuario.con el usuario.

Page 13: Audio en Java

DataLineDataLine int available(); /* Indica el número de bytes que que están libres en el buffer interno. 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 void drain(); /* Este método sirve bloquea el objeto hasta que quede limpio el

buffer. */ buffer. */ void flush(); /* Este metodo limpia el buffer. */ void flush(); /* Este metodo limpia el buffer. */ int getBufferSize(); /* Devuelve el tamaño del buffer en bytes. */ AudioFormat int getBufferSize(); /* Devuelve el tamaño del buffer en bytes. */ AudioFormat

getFormat(); /* Devuelve el formato del audio. manejado. */ getFormat(); /* Devuelve el formato del audio. manejado. */ int getFramePosition(); /* Devuelve la posición de la trama. */int getFramePosition(); /* Devuelve la posición de la trama. */ float getLevel(); /* Devuelve el nivel de la señal. */ float getLevel(); /* Devuelve el nivel de la señal. */ long getMicrosecondPosition(); /* Obtiene la posición actual de los datos de audio long getMicrosecondPosition(); /* Obtiene la posición actual de los datos de audio

en microsegundos. */ en microsegundos. */ boolean isActive(); /* Devuelve true si estan pasando datos (ejecutado el comando boolean isActive(); /* Devuelve true si estan pasando datos (ejecutado el comando

start) */ start) */ boolean isRunning(); /* Devuelve true si está abierto. */ boolean isRunning(); /* Devuelve true si está abierto. */ void start(); /* Comienza la reproducción. */ void start(); /* Comienza la reproducción. */ void stop(); /* Termina la reproducción. */void stop(); /* Termina la reproducción. */

Page 14: Audio en Java

Clase AudioSystemClase AudioSystem

Para acceder a los componentes del Para acceder a los componentes del sistema la clase AudioSystem proporciona sistema la clase AudioSystem proporciona a la aplicación un punto de entrada a los a la aplicación un punto de entrada a los componentes instalados en el sistema.componentes instalados en el sistema.

Proporciona métodos para realizar las Proporciona métodos para realizar las conversiones de formato y métodos para conversiones de formato y métodos para trasladar el sonido a objetos Stream o trasladar el sonido a objetos Stream o File para el transporte, comunicación o File para el transporte, comunicación o almacenamiento.almacenamiento.

Page 15: Audio en Java

AudioSystemAudioSystem

getAudioFileFormat (  ( File file) o(  file) o( InputStream stream) o (  stream) o ( URL url)  url) 

////Obtiene el formato de archivo de audio de la Obtiene el formato de archivo de audio de la especificada File, de una entrada o flujo o de una especificada File, de una entrada o flujo o de una direccion URL o de internet.direccion URL o de internet.

getAudioInputStream (  ( File file) o(  file) o( InputStream stream) o (  stream) o ( URL url)  url) Obtiene un flujo de entrada de audio de la prevista File , Obtiene un flujo de entrada de audio de la prevista File , de una entrada o flujo o de una direccion URL o de de una entrada o flujo o de una direccion URL o de internet.internet.

Page 16: Audio en Java

Interface ClipInterface Clip

   La interfaz Clip representa un tipo La interfaz Clip representa un tipo especial de línea de datos cuyos especial de línea de datos cuyos datos de audio pueden ser cargados datos de audio pueden ser cargados antes de la reproducción, en lugar de antes de la reproducción, en lugar de streaming en tiempo real.streaming en tiempo real.

Page 17: Audio en Java

Interfaz ClipInterfaz Clip

Porque los datos se cargan previamente y Porque los datos se cargan previamente y tiene una longitud conocida, se puede tiene una longitud conocida, se puede establecer un clip para empezar a reproducir establecer un clip para empezar a reproducir en cualquier posición en sus datos de en cualquier posición en sus datos de audio. También puede crear un loop, para audio. También puede crear un loop, para que el clip se reproduzca varias veces. El que el clip se reproduzca varias veces. El loop se especifican con un inicio y loop se especifican con un inicio y finalización el marco de muestreo, junto con finalización el marco de muestreo, junto con el número de veces que el loop debe ser el número de veces que el loop debe ser reproducido.reproducido.

Page 18: Audio en Java

Interfaz ClipInterfaz Clip

getFrameLength() ()           Obtiene la longitud en muestras de frames del clip.          Obtiene la longitud en muestras de frames del clip.

getMicrosecondLength() ()           Obtiene la duracion in microsegundos          Obtiene la duracion in microsegundos

loop (int count)  (int count)  Comienza un bucle de reproduccion por n veces.Comienza un bucle de reproduccion por n veces. openopen ( AudioInputStream stream)  ( AudioInputStream stream) 

Abre el clip con el formato de audio y los datos presentes en el flujo Abre el clip con el formato de audio y los datos presentes en el flujo de entrada de audiode entrada de audio

Page 19: Audio en Java

Reproducción RepetitivaReproducción Repetitiva Una vez que se carga el clip de sonido, se pueden utilizar tres Una vez que se carga el clip de sonido, se pueden utilizar tres

métodos:métodos:

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

sonido.loop();sonido.loop(); para iniciar la reproducción del clip de sonido y que entre en para iniciar la reproducción del clip de sonido y que entre en

un bucle de reproducción, es decir, en una repetición un bucle de reproducción, es decir, en una repetición automática del clip.automática del clip.

sonido.stop();sonido.stop(); para detener el clip de sonido que se encuentre en ese para detener el clip de sonido que se encuentre en ese

instante en reproducción.instante en reproducción.

Page 20: Audio en Java

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); } }}

Page 21: Audio en Java

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();

Page 22: Audio en Java

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();

Page 23: Audio en Java