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

时间:2018-01-19 14:11:17

标签: java javasound

使用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相关的默认麦克风端口?

谢谢!

1 个答案:

答案 0 :(得分:3)

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

$result = mysql_query("SELECT author_id FROM user");
$sn = [];
while($data = mysql_fetch_array($result)) {
    $sn[] = $data['author_id'];
}

$sn = implode(',',$sn);
$lastresult = mysql_query("SELECT * FROM post WHERE id IN (".$sn.")");

从此开始,您可以识别默认的... 例如,在我的MacBook中,默认值为#34;内置麦克风"