gpt4 book ai didi

java - 如何使用 javax.sound.sampled.* 列出所有可用(输入)端口?

转载 作者:行者123 更新时间:2023-11-29 06:12:06 24 4
gpt4 key购买 nike

根据我的研究,Java 的声音 api 不能很好地与 OsX 兼容。它很难确定 Activity 输入,因此通常默认为第一个系统输入。

我的解决方案是遍历输入端口数组,记录几毫秒的音频并比较这些片段。无论哪个振幅最大,我都会将其用作我的输入。

我的问题是,生成 Java 可用的所有输入端口数组的最佳方法是什么?

最佳答案

您可以使用以下方法列出所有可用的 Mixer 对象:

Mixer.Info[] mixers = AudioSystem.getMixerInfo();
for (Mixer.Info mixerInfo : mixers){
System.out.println(mixerInfo);
}

在我的 Mac 系统上,结果如下:

Java Sound 音频引擎,版本 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 对象关联的 TargetDataLine。

关于java - 如何使用 javax.sound.sampled.* 列出所有可用(输入)端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6429914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com