2010-09-14 11 views
24

He estado leyendo en la API de sonido para Java durante un par de días. No puedo encontrarle sentido. Soy un programador decente, tengo dificultades para entender la API.Java Sound API - micrófono de captura

He intentado capturar audio de mi micrófono y mostrar un gráfico de onda en tiempo real.

Tengo problemas para capturar audio, dicen en el tutorial para hacer esto, pero parece que no puedo hacer que funcione.

Cualquier sugerencia y ayuda sería muy apreciada, una respuesta línea por línea sería ideal.

Por favor y gracias.

import javax.sound.sampled.AudioFormat; 
import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.DataLine; 
import javax.sound.sampled.LineUnavailableException; 
import javax.sound.sampled.TargetDataLine; 

public class FindLine { 

public static void main (String[] args){ 

    AudioFormat format = new AudioFormat(22000,16,2,true,true); 
    TargetDataLine line; 
    DataLine.Info info = new DataLine.Info(TargetDataLine.class, 
     format); // format is an AudioFormat object 
    if (!AudioSystem.isLineSupported(info)) { 
     // Handle the error ... 
    } 
    // Obtain and open the line. 
    try { 
     line = (TargetDataLine) AudioSystem.getLine(info); 
     line.open(format); 
    } catch (LineUnavailableException ex) { 
     // Handle the error ... 
    } 
} 

} 
+4

Seguí este tutorial. Es un gran artículo sobre este tema: [http://www.developer.com/java/other/article.php/2105421/Java-Sound-Capturing-Microphone-Data-into-an-Audio-File.htm] (http://www.developer.com/java/other/article.php/2105421/Java-Sound-Capturing-Microphone-Data-into-an-Audio-File.htm) –

Respuesta

33

Esto le dará el predeterminado establecido por su sistema operativo.

AudioFormat format = new AudioFormat(8000.0f, 16, 1, true, true); 
TargetDataLine microphone = AudioSystem.getTargetDataLine(format); 

Para seleccionar un dispositivo de entrada en particular (TargetDataLine) es mejor para enumerar los mezcladores y filtrar el nombre del mezclador que desea.

Mixer.Info[] mixerInfos = AudioSystem.getMixerInfo(); 
for (Mixer.Info info: mixerInfos){ 
    Mixer m = AudioSystem.getMixer(info); 
    Line.Info[] lineInfos = m.getSourceLineInfo(); 
    for (Line.Info lineInfo:lineInfos){ 
    System.out.println (info.getName()+"---"+lineInfo); 
    Line line = m.getLine(lineInfo); 
    System.out.println("\t-----"+line); 
    } 
    lineInfos = m.getTargetLineInfo(); 
    for (Line.Info lineInfo:lineInfos){ 
    System.out.println (m+"---"+lineInfo); 
    Line line = m.getLine(lineInfo); 
    System.out.println("\t-----"+line); 

    } 

} 
+0

+1 Sé que esta publicación es antigua , pero me gustaría saber si el código que proporcionó anteriormente es todo lo que se necesita para leer desde un micrófono – samayo

+1

Hola simon, Este código solo enumera los dispositivos disponibles. Después de seleccionar la línea que desea (donde está disponible la lectura). puede hacer lo sugerido en http://docs.oracle.com/javase/tutorial/sound/capturing.html – DannyM