教程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类型的对象,该对象不会公知。
如果我使用mixer.getTargetLines(),我会得到一个空数组。
如果我创建自己的DataLine.Info并将其传递给混合器的getLine,我会得到不支持的异常。
那么,该怎么办呢?
发布于 2011-06-07 21:37:04
左外野建议。
在组件中沿着AudioPlotPanel或更简单的RMS volume的线条提供每个声音线条的可视呈现。这应该不会花费用户太长的时间来确定他们正在通过哪条发音线。;)
发布于 2013-04-17 21:08:33
我也在尝试做同样的事情。我还没有找到一个很好的解决方案,但我可以告诉你,这是行不通的,因为你正试图从Port mixer获得一个DataLine。如果我弄清楚了,我一定会让你知道的。
https://stackoverflow.com/questions/6261094
复制相似问题