Red de conocimiento informático - Material del sitio web - ¿Cómo utilizar la programación Java para extraer funciones de sonido?

¿Cómo utilizar la programación Java para extraer funciones de sonido?

Hola, 1 Conexión de red entre las dos partes

Java tiene sus ventajas únicas en este sentido. Java proporciona un rico soporte de biblioteca de clases de red y puede escribir fácilmente una variedad de tipos de comunicación de red. programa. En el siguiente ejemplo, utilizo el protocolo TCP/IP y programo a través de la clase Java Socket.

2 Recopilación y reproducción de señales de audio y codificación y decodificación de señales de audio digitales

Al resolver estos dos problemas, tuve la suerte de encontrar algunos artículos en Internet. del programa de demostración Answer Machine (escrito por Florian Bomers y Matthias Pfisterer de jsresources.org, sitio web munications) es el formato de compresión utilizado en nuestros ejemplos a continuación. El formato GSM puede convertir flujos de datos de audio de 128 kbps (muestreo de audio de 16 bits a 8 kHz). comprimido en un flujo de datos de audio de 13 kbps, que es muy adecuado para la transmisión de señales de voz, por lo que se puede decir que mata dos pájaros de un tiro.

He analizado el código fuente de estas clases y tengo que admirar a su autor. El código fuente de cada clase es muy conciso y puedes analizarlo tú mismo. Bien, hablemos de estas clases por usted y demos una breve introducción a las clases y funciones que utilizan en la API de Java Sound, para que todos puedan tener una comprensión general de las clases de uso común en la API de Java Sound. Porque hay muchas clases en la API de sonido de Java. Debido a limitaciones de espacio, es imposible dar una explicación detallada de todas las clases utilizadas. El siguiente contenido solo menciona brevemente el propósito y las especificaciones de uso de cada clase. Para obtener una introducción detallada a las clases de Java Sound API, visite aquí. /j2se/1.4.2/docs /api/, busque contenido relacionado de javax.sound.sampled.

Los archivos mencionados a continuación se extraen del código fuente del programa de demostración de Answer Machine. Dado que es un programa de código abierto, preste atención a los acuerdos públicos relevantes al usarlo.

① Clase AMAudioFormat (encapsulada en el archivo AMAudioFormat.java)

La clase AMAudioFormat encapsula los parámetros de los cuatro formatos de audio de calidad: CD, FM, TELÉFONO y GSM. fácil de usar. Es muy simple, por lo que no tenemos que escribir códigos complicados cuando usamos Java Sound API. Pero para comprender los principios de Java Sound API, debemos analizar su código. Utiliza la clase AudioFormat en la API de sonido de Java. Esta clase es muy importante. El uso de cualquier dato de audio en Java debe implementarse a través de ella para especificar el formato de audio que debe usarse. La clase AudioFormat tiene una clase AudioFormat anidada. Codificación De hecho, la mayoría de los usos de la clase AudioFormat utilizan esta clase anidada.

Métodos importantes de la clase AMAudioFormat:

Nombre: getLineAudioFormat

Formato de llamada: getLineAudioFormat (código de formato de audio entero)

Valor de retorno : Objeto AudioFormat generado en función del código de formato de audio pasado.

Quizás quieras preguntar aquí: ¿se puede utilizar el formato GSM directamente a través de Java Sound API? La respuesta es más complicada, pero también hay una solución. El autor aquí utiliza otra biblioteca de clases de programas de código abierto: la biblioteca de codificación y decodificación GSM de Tritonus. Debe descargar los dos archivos tritonous_share.jar y tritonus_gsm.jar de www.tritonus.org/plugins.html y hacer referencia a ellos en la clase AMAudioFormat, completando así la configuración del formato GSM.

Lo que necesito decirles es que después de compilar la clase AMAudioFormat.java, nuestro programa no necesita el soporte de los dos archivos tritonous_share.jar y tritonus_gsm.jar cuando ejecuta nuestro programa.

② Clase AudioCapture (encapsulada en el archivo AudioCapture.java)

La clase AudioCapture encapsula el proceso de captura de datos de audio del hardware de audio y los codifica automáticamente en datos de compresión de audio GSM, y a través de él El método getAudioInputStream () nos proporciona un flujo de entrada de datos de audio y podemos enviar este flujo directamente a la red.

Métodos importantes de la clase AudioCapture:

Nombre: getAudioInputStream

Formato de llamada: getAudioInputStream()

Valor de retorno: objeto AudioInputStream

p>

La clase AudioCapture utiliza las clases AudioInputStream, AudioFormat y AudioSystem en Java Sound API y las interfaces TargetDataLine y LineListener. Además de la clase AudioFormat, presentaré brevemente otras clases:

La clase AudioInputStream es una clase InputStream con formato y longitud de audio especiales. Tiene dos métodos de construcción, a saber, AudioInputStream (flujo de InputStream, formato AudioFormat, larga) y AudioInputStream (TargetData -Line line).

La interfaz TargetDataLine es un tipo de interfaz DataLine. A través de ella, puede obtener datos directamente desde el hardware de audio. Tiene varios métodos de uso común, a saber: open (formato AudioFormat), void open (formato AudioFormat). , int bufferSize), int read(byte[] b, int off, int len).

La clase AudioSystem es el punto de entrada del sistema de audio estándar de Java. Utilice su método getLine() en la clase AudioSystem para crear un objeto TargetDataLine.

La interfaz LineListener se utiliza para monitorear el momento en que cambia el estado de la línea. Su método importante es el método de actualización (evento LineEvent).

③ Clase AudioPlayStream (encapsulada en el archivo AudioPlayStream.java)

La clase AudioPlayStream es todo lo contrario de la clase AudioCapture. Encapsula la decodificación de datos de audio comprimidos GSM y la reproducción. proceso de la señal de audio. Proporcionarnos un flujo de salida de señal de audio. También utiliza básicamente las clases de la API de sonido de Java utilizadas por la clase AudioCapture, excepto que utiliza la interfaz SourceDataLine en lugar de la interfaz TargetDataLine

④ Clase Debug (encapsulada en el archivo Debug.java)

La clase Debug se utiliza principalmente para generar mensajes durante la depuración. Hay muy poco código. Más tarde, bloqueé todas las declaraciones que generan información, por lo que no tiene ningún impacto en la ejecución del programa.

Para facilitar el uso de las clases anteriores, necesitamos compilarlas y empaquetarlas. Al compilar, debemos configurar el entorno de compilación relevante. La siguiente es la línea de comando que debemos usar. /p>

set CLASSPATH=%CLASSPATH%;.;tritonus_gsm.jar;tritonus_share.jar

javac am*.java amaudio*.java

jar cmf packagingmanifest.mf am.jar am*. class

amaudio*.class

Explicación, coloqué el archivo de código fuente de Java mencionado anteriormente en el directorio am. Después de la compilación, puede obtener 8k am. .jar. Todo lo que tenemos que hacer a continuación es hacer referencia a este paquete en nuestro programa.