Java检查麦克风输入是否静音

Java检查麦克风输入是否静音,java,audio,microphone,javasound,Java,Audio,Microphone,Javasound,我正在尝试制作一个简单的程序来检查麦克风是否静音。这是我用来确定麦克风是哪一行的代码 private Line getMic() throws LineUnavailableException { Mixer.Info[] mixerInfos = AudioSystem.getMixerInfo(); for (int i = 0; i < mixerInfos.length; i++) { Mixer mixer = AudioSystem.getM

我正在尝试制作一个简单的程序来检查麦克风是否静音。这是我用来确定麦克风是哪一行的代码

private Line getMic() throws LineUnavailableException {

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

    for (int i = 0; i < mixerInfos.length; i++) {
        Mixer mixer = AudioSystem.getMixer(mixerInfos[i]);
        int maxLines = mixer.getMaxLines(Port.Info.MICROPHONE);
        Port lineIn = null;
        if (maxLines > 0) {

            lineIn = (Port) mixer.getLine(Port.Info.MICROPHONE);
            return lineIn;
        }
    }

    return null;
}
但是,我得到了一个错误:

Unsupported control type: Mute
我继续往下看,看看有哪些
控件可用于
,具体操作如下:

BooleanControl muteControl = (BooleanControl)mic.getControl(BooleanControl.Type.MUTE);
System.out.println(muteControl.getValue());
for(Control c : mic.getControls()){
    System.out.println(c.getType());
}    
只有一个
控件
,它是
主卷
。我不确定为什么没有列出
静音
控件


my
getMic()
函数中返回的行正在返回正确的麦克风。我有一个插入的USB耳机,任何应用程序都能识别它。

各种音频控制线路不能保证实现。我不知道为什么,但我认为这与操作系统和本地音频软件有关,它们可能会有很大差异

来自(直接操作音频数据的最后一节):

控制API允许Java声音API的实现,或 混频器的第三方提供商,提供任意种类的信号 通过控件进行处理。但如果没有混音器提供这种 你需要信号处理吗?这需要更多的工作,但你可能 能够在您的程序中实现信号处理。因为 Java Sound API使您能够访问音频数据作为 字节,您可以选择任何方式更改这些字节

出于这个原因,我倾向于避免使用控制行,并且在可能的情况下,编写代码来实现所需的功能。例如,可以手动访问
SourceDataLine
TargetDataLine
的各个帧


IDK如何测试麦克风上的“静音”,但可以在传入PCM数据点上使用RMS算法测试传入音量。

不保证实现各种音频控制线路。我不知道为什么,但我认为这与操作系统和本地音频软件有关,它们可能会有很大差异

来自(直接操作音频数据的最后一节):

控制API允许Java声音API的实现,或 混频器的第三方提供商,提供任意种类的信号 通过控件进行处理。但如果没有混音器提供这种 你需要信号处理吗?这需要更多的工作,但你可能 能够在您的程序中实现信号处理。因为 Java Sound API使您能够访问音频数据作为 字节,您可以选择任何方式更改这些字节

出于这个原因,我倾向于避免使用控制行,并且在可能的情况下,编写代码来实现所需的功能。例如,可以手动访问
SourceDataLine
TargetDataLine
的各个帧


IDK如何测试麦克风上的“静音”,但使用传入PCM数据点上的RMS算法可以测试传入音量。

某些控件仅在线路打开时可用。@greg-449我用
mic.open()
打开了线路,并确认它是用
mic.isOpen()打开的
但我仍然没有静音控件。遗憾的是,无法保证所有控件都可用。有些控件只有在线路打开时才可用。@greg-449我用
mic.open()
打开线路,并用
mic.isOpen()确认线路已打开
但我仍然没有静音控件。遗憾的是,无法保证所有控件都可用。当我“超过”大师时,SO对标记表示的反映很差。很高兴阅读你关于这个问题的答案。谢谢!你已经帮助这里的人很长时间了,比我早就开始了。你的军衔来之不易。但是,我也在想,现在人们对答案的投票是否比几年前少了。“对答案的投票少了”在一般意义上并不确定,但我确实认为现在使用较少的API也是如此。例如,我最近正在开发一个应用程序,并决定使用JavaFX而不是JavaSound。它的缺点是,它是一个更高级别的API,对我用来创建“有趣”动画以配合音乐的数据线的访问较少。但从好的方面来看,它支持MP3的开箱即用,并内置了FFT来提供声谱动画。当我“超过”大师时,它很难反映SO对标签的表示。很高兴阅读你关于这个问题的答案。谢谢!你已经帮助这里的人很长时间了,比我早就开始了。你的军衔来之不易。但是,我也在想,现在人们对答案的投票是否比几年前少了。“对答案的投票少了”在一般意义上并不确定,但我确实认为现在使用较少的API也是如此。例如,我最近正在开发一个应用程序,并决定使用JavaFX而不是JavaSound。它的缺点是,它是一个更高级别的API,对我用来创建“有趣”动画以配合音乐的数据线的访问较少。但从好的方面来说,它支持MP3的开箱即用,并内置了FFT来提供声谱动画。