根据我的研究,Java的sound不能很好地与OsX配合使用。它很难确定活动输入,因此它通常默认为第一个系统输入。
我的解决方案是迭代通过一组输入端口,录制几毫秒的音频并比较这些片段。无论哪一个具有最大的振幅,我都会使用它作为我的输入。
我的问题是,生成Java可用的所有输入端口数组的最佳方法是什么?
发布于 2011-06-22 02:45:42
可以使用以下命令列出所有可用的混合器对象:
Mixer.Info[] mixers = AudioSystem.getMixerInfo();
for (Mixer.Info mixerInfo : mixers){
System.out.println(mixerInfo);
}在我的系统Mac上,结果是:
Java Sound Audio Engine 1.0版
内置输入,版本未知版本
内置麦克风,版本未知
编辑
以下是如何提取有效目标行的列表,您可以从中获取音频输入:
Mixer.Info[] mixers = AudioSystem.getMixerInfo();
List<Line.Info> availableLines = new ArrayList<Line.Info>();
for (Mixer.Info mixerInfo : mixers){
System.out.println("Found Mixer: " + mixerInfo);
Mixer m = AudioSystem.getMixer(mixerInfo);
Line.Info[] lines = m.getTargetLineInfo();
for (Line.Info li : lines){
System.out.println("Found target line: " + li);
try {
m.open();
availableLines.add(li);
} catch (LineUnavailableException e){
System.out.println("Line unavailable.");
}
}
}
System.out.println("Available lines: " + availableLines);一旦拥有了Line.Info对象,就可以通过调用AudioSystem.getLine()并使用该Line.Info作为参数来获取与Line.Info对象相关联的Line.Info。
发布于 2011-06-24 04:27:01
有关如何确定可用资源的基础知识可在此处找到:Accessing Audio System Resources
在Java Sound教程中,我发现这一节在示例代码方面最有帮助:http://download.oracle.com/javase/tutorial/sound/converters.html
https://stackoverflow.com/questions/6429914
复制相似问题