Java Sound API – 捕获麦克风

我已经阅读了Sound API for Java几天了,我无法理解它。 我是一个不错的程序员,我只是很难理解API。

我一直试图从麦克风中捕获音频并实时显示波形图。

我在捕获音频方面遇到了麻烦,他们在教程中说这样做,但我似乎无法让它工作。

任何建议和帮助将不胜感激,逐行回答将是理想的。

谢谢,麻烦您了。

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 ... } } } 

这将为您提供操作系统设置的默认值。

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

要选择特定的输入设备(TargetDataLine),最好枚举混音器并过滤所需的混音器名称。

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