如何使用java声音API从麦克风捕获声音?

时间:2011-06-07 05:52:00

标签: java audio capture microphone javasound

教程http://download.oracle.com/javase/tutorial/sound/capturing.html 不包括如何选择麦克风。

我使用以下代码枚举混音器

System.out.println("Searching for microphones");
for(Mixer.Info mixerinfo : AudioSystem.getMixerInfo()) {
    mixer = AudioSystem.getMixer(mixerinfo); 

    //System.out.println(mixerinfo.toString());
    if( mixer.isLineSupported(Port.Info.MICROPHONE) ) {
        mixers.add(mixer);
        System.out.println(Integer.toString(mixers.size()) + ": " + mixerinfo.toString());
    }
}

即。通过麦克风输入的预告。但接下来,有一台调音台,我无法阅读。

如果我使用mixer.getTargetLineInfo(),我会收到一个Info的数组,当传递给mixer.getLine时会返回com.sun.media.sound.PortMixer$PortMixerPort类型的对象,该对象不会被删除。< / p>

如果我使用mixer.getTargetLines(),我会得到一个空数组。

如果我创建自己的DataLine.Info并将其传递给调音台的getLine,我将获得不受支持的例外。

那么,该怎么办?

2 个答案:

答案 0 :(得分:2)

左栏建议。

AudioPlotPanel或更简单RMS volume的线条组件中提供每条声线的视觉渲染。它不应该让用户太长时间来确定他们正在通过哪条声线。 ;)

答案 1 :(得分:0)

我正在尝试做同样的事情。我还没有找到一个好的解决方案,但我可以告诉你,因为你试图从端口混音器中获取DataLine,所以没有成功。如果我发现它,我一定会让你知道。