Java Sound:获取默认麦克风端口

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

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

这在Windows上运行良好,line是使用OS选择的默认麦克风.

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

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个麦克风,我还没有找到一种方法可以知道哪个是默认麦克风(现在它是阵列中的第二个).

Tried 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 Sound:获取默认麦克风端口 - 代码日志