gpt4 book ai didi

Java 声音 : Getting default microphone port

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:54:11 27 4
gpt4 key购买 nike

使用 Java,我正在尝试从默认麦克风录制声音并显示当前音量和静音状态(在操作系统级别设置,如果可能的话对检查字节不感兴趣)。到目前为止,我可以使用以下代码获取 TargetDataLine 并记录到它:

TargetDataLine line = (TargetDataLine) AudioSystem.getLine(new DataLine.Info(TargetDataLine.class, formato));

这在 Windows 上效果很好,线路是使用操作系统选择的默认麦克风。

现在,要获得音量/静音控制,我有以下代码:

Mixer.Info[] mixerInfos = AudioSystem.getMixerInfo();

for (Mixer.Info mixerInfo : mixerInfos) {
Mixer mixer = AudioSystem.getMixer(mixerInfo);

if (mixer.getMaxLines(Port.Info.MICROPHONE) > 0) {
System.out.println("-------------");
System.out.println(mixerInfo);
Port line = (Port) mixer.getLine(Port.Info.MICROPHONE);
line.open();


Line.Info[] targets = mixer.getTargetLineInfo();

Control[] controls = line.getControls();
for (Control control : controls) {
if (control instanceof CompoundControl) {
Control[] subControls = ((CompoundControl) control).getMemberControls();
for (Control subControl : subControls) {
System.out.println(subControl);
}
} else {
System.out.println(control);
}
}
System.out.println("-----------");
}
}

我的设置中有 2 个麦克风,我还没有找到一种方法来知道哪个是默认麦克风(现在它是阵列中的第二个)。

尝试了 Line port = AudioSystem.getLine(Port.Info.MICROPHONE); 并返回了第一个可用的(在这种情况下它不是默认值)。

那么,有什么方法可以获取与获取的 TargetDataLine 相关的默认麦克风端口?

谢谢!

最佳答案

要获取系统中安装的所有麦克风,您可以按如下方式列出它们:

 package testing;

import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Line;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.Mixer;
import javax.sound.sampled.TargetDataLine;

public class Main {
public static void main(String[] args) {
//Enumerates all available microphones
Mixer.Info[] mixerInfos = AudioSystem.getMixerInfo();
for (Mixer.Info info: mixerInfos){
Mixer m = AudioSystem.getMixer(info);
Line.Info[] lineInfos = m.getTargetLineInfo();
if(lineInfos.length>=1 && lineInfos[0].getLineClass().equals(TargetDataLine.class)){//Only prints out info is it is a Microphone
System.out.println("Line Name: " + info.getName());//The name of the AudioDevice
System.out.println("Line Description: " + info.getDescription());//The type of audio device
for (Line.Info lineInfo:lineInfos){
System.out.println ("\t"+"---"+lineInfo);
Line line;
try {
line = m.getLine(lineInfo);
} catch (LineUnavailableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return;
}
System.out.println("\t-----"+line);
}
}
}
}
}

从那开始你可以识别默认的...例如,在我的 MacBook 中,默认的名称为“内置麦克风”

关于Java 声音 : Getting default microphone port,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48342974/

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