Sonido en JAVA.
Escrito por:
Escrito por:
Carlos Prades del Valle.
Carlos Prades del Valle.
Versión 1.0.0.
Versión 1.0.0.
Enero de 2001.
Enero de 2001.
Sonido en Java.
Versión 1.0.1 Enero 2000
Historial del documento.
Versión Autor
Resumen de la modificación.
1.0.0.
1.0.1.
CPV
CPV
Guía para el programador de sonido con Java.
Revisión de estilos para subirlo a la web.
Fecha
19−12−2000
31−01−2001
Autores del documento.
CPV:
Carlos Prades del Valle.
Resumen.
e−mail:
[email protected]
Sitio web: http://cprades.eresmas.com/
Este documento es una guía para el programador que quiere empezar a utilizar el
sonido que le proporciona el sistema multimedia que utiliza.
Palabras relacionadas.
Java, programación, sonido, procesado, voz, señal, api.
Carlos Prades del Valle.
Pag 2 de 19
Sonido en Java.
Índice.
Versión 1.0.1 Enero 2000
1INTRODUCCIÓN.
___________________________________________________________7
2CLASES PRINCIPALES.
_____________________________________________________8
2.1FORMATOS DE AUDIO.________________________________________________________8
2.2ARQUITECTURA DE LOS SISTEMAS.________________________________________________9
2.3MIXERS__________________________________________________________________9
2.4LINES__________________________________________________________________10
2.5CLASES DATALINE_________________________________________________________11
3ACCESO A LOS COMPONENTES DEL SISTEMA
_____________________________12
3.1OBTENCIÓN DE LOS RECURSOS._________________________________________________13
4REPRODUCCIÓN DE SONIDO.
______________________________________________15
4.1REPRODUCCIÓN DEL SONIDO MEDIANTE SOURCEDATALINE_____________________________15
4.2SINCRONIZACIÓN DE LÍNEAS.__________________________________________________17
4.3CAPTURA DE SONIDO._______________________________________________________17
4.4PROCESADO DE LA SEÑAL.____________________________________________________18
Carlos Prades del Valle.
Pag 3 de 19
Sonido en Java.
Versión 1.0.1 Enero 2000
Glosario.
API: Application Program Interface. Es la interfaz proporcionada por un sistema al
programador para poder acceder a los servicios de ese sistema.
Array: Es un grupo de datos de un tipo determinado puestos uno a continuación de
otro. Coincide con los tipos de datos array de Java.
Java: Lenguaje de programación orientado a objetos.
JDK: Java Development Kit. Es el entorno de desarrollo para Java proporcionado por
Sun.
MIDI: Estándar para el almacenamiento y transporte de música para o desde un
sintetizador.
Package: Paquete. Agrupamiento especificado por el programador de clases con
características comunes.
Sun: Empresa norteamericana que desarrolló el lenguaje de programación Java.
Thread: Hilo de ejecución.
Carlos Prades del Valle.
Pag 4 de 19
Sonido en Java.
Versión 1.0.1 Enero 2000
Ámbito y alcance del documento.
Este documento pretende mostrar cómo utilizar las herramientas del API de Java
para la adquisición el manejo y la reproducción de sonido, el texto se limita a esta
función quedando fuera del propósito el almacenamiento, la síntesis de sonido, el
tratamiento de secuencias MIDI, el tratamiento (reconocimiento y síntesis) de la señal
de voz, etc. No es una descripción detallada de todos las clases, métodos y variables que
proporciona el sistema sino una guía útil para el programador que pretenda iniciarse en
el procesado de sonido con Java o cómo texto de referencia para el programador más
experto.
La versión de Java que soporta este API como aquí se cuenta es la 2 y el entono
de desarrollo utilizado es el JDK 1.3.
Este documento presupone que el lector tiene un conocimiento medio sobre el
lenguaje Java siendo recomendable un conocimiento básico del API más común. Por
otro lado el lector deberá tener un conocimiento mínimo sobre las características de la
señal de sonido y el tratamiento digital de la señal.
Carlos Prades del Valle.
Pag 5 de 19
Sonido en Java.
Versión 1.0.1 Enero 2000
Convenciones del documento.
En este documento se intentará traducir los términos en inglés siempre que sea
posible, exceptuando aquellos términos en inglés que, por el uso común en nuestro
idioma, no necesitan tal traducción. Estos vocablos están escritos en cursiva. Por otro
lado los nombres propios de las compañías comerciales o de las marcas de sus
productos también son puestos en cursiva.
La parte de código y los ejemplos están escritos con fuente de letra Curier.
Cuando se habla de una clase o de un objeto se considera un nombre propio por lo que
no se traduce, aún así en determinados casos se especifica la traducción de forma
aclaratoria. Los nombre de paquetes y ficheros también se consideran nombres propios,
pero al no pertenecer exclusivamente al código se muestran con fuente de letra normal
en cursiva (como productos software que son).
Carlos Prades del Valle.
Pag 6 de 19
Sonido en Java.
Versión 1.0.1 Enero 2000
1 Introducción.
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.midi.spi proporcionan una
interfaz para los desarrolladores de servicios basados en las interfaces anteriores.
Carlos Prades del Valle.
Pag 7 de 19
Sonido en Java.
Versión 1.0.1 Enero 2000
2 Clases principales.
Como paso previo es necesario contar cómo funcionan algunos de los objetos de
javax.sound.sampled necesarios para
comprender después
cada uno de
los
procedimientos a seguir.
2.1 Formatos de audio.
Los objetos de la clase AudioFormat 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 µ,
clase
PCM). Para guardar
codificación hay un objeto de
la
el
tipo de
AudioFormat.Encoding con esta información. Obteniendo este objeto se puede
mirar si es igual (función boolean equals(Object) ) a una de las constantes
definidas en la clase AudioFormat.Encoding (ALAW, ULAW, PCM_SIGNED,
PCM_UNSIGNED). La clase AudioFormat aparte del constructor, al que hay que
pasarle los parámetros para la iniciación de las variables, tiene los siguientes métodos:
int getChanels();
AudioFormat.Encoding getEncoding(); /* Devuelve objeto con información
/* Devuelve el número de canales. */
sobre el tipo de codificación.*/
/* Devuelve la frecuencia de trama de la señal.
float getFrameRate();
*/
int getFrameSize();
float getSampleRate();
int getSampleSizeInBits(); /* Devuelve el tamaño en bits de cada
/* Devuelve tamaño de la trama en bytes. */
/* Devuelve la frecuencia de muestreo. */
muestra de sonido. */
boolean isBigEndian(); /* Devuelve true alineamiento big endian y
false little endian. */
Además de los métodos boolean maches(AudioFormat) y String
toString() y los heredados de la clase Object.
Por otro lado existe la clase AudioFileFormat para definir el formato de un
fichero de audio, esta clase permite utilizar las clases AudioImputStream y
AudioOutputStream, que heredan de ImputStream y OutputStream
respectivamente, permitiendo usar los métodos estándar para la lectura y escritura del
audio en ficheros. El funcionamiento de estas clases se escapa al ámbito de este
documento.
Carlos Prades del Valle.
Pag 8 de 19
Sonido en Java.
Versión 1.0.1 Enero 2000
2.2 Arquitectura de los sistemas.
La arquitectura de los sistemas de audio de audio se basa en mezcladores, clase
Mixer, que son dispositivos a los que llegan líneas, objetos de clase Line, procesan
los datos y salen otros objetos de clase Line.
La jerarquía de estas clases es la siguiente:
Object
Line
Port
Mixer
DataLine
SourceDataLine
TargetDataLine
Clip
2.3 Mixers
Como se puede ver los Mixer (mezcladores) son unos casos particulares de los
Lines. Estos Mixer son dispositivos hardware o software por lo que pueden ser
proporcionados por el sistema. Los objetos Mixer contienen un objeto de la clase
Mixer.Info con información del tipo de Mixer. Los métodos de la clase Mixer
son los siguientes:
Line getLine(Line.Info); /* Obtiene, si exixte, un Line del tipo
indicado en el parámetro. */
int getMaxLines(Line.Info);
/* Indica el numero de lineas que se
Mixer.Info getMixerInfo();
/* Obtiene el objeto que indica el
pueden tener de un tipo dado.*/
tipo de Mixer que es. */
Line.Info [] getSourceLineInfo(); /* Obtiene array con información de
los SourceLines disponibles. */
Line.Info [] getSourceLineInfo(Line.Info); /* Array con información de
los SourceLines de un tipo. */
Line [] getSourceLines(); /* Obtiene array con los SouceLines
disponibles. */
Line.Info [] getTargetLineInfo(); /* Obtiene array con información de
los TargetLines disponibles. */
Line.Info [] getTargetLineInfo(Line.Info); /* Array con información de
Line [] getTargetLines(); /* Obtiene
Comentarios de: Sonido en Java. (0)
No hay comentarios