【问题标题】:Java - input audio line doesn't have any controlsJava - 输入音频线没有任何控件
【发布时间】:2016-02-15 14:26:07
【问题描述】:

说明

Mac OS X 10.10.3

尝试控制麦克风(基本上,将系统麦克风音量设置为 100% + 希望取消静音并尝试解决此问题https://discussions.apple.com/message/29309845#29309845)。

(代码改进)

import javax.sound.sampled.*;
public class MicMacMax {
    public static void main(String[] args) {
        Mixer.Info microphone = null;
        for (Mixer.Info info : AudioSystem.getMixerInfo()) {
            System.out.println("Potential mixer: " + info.getName());
            if (info.getName().equals("Built-in Input")) {
                microphone = info;
            }
        }
        if (microphone == null) {
            System.out.println("Microphone not found");
            System.exit(-1);
        }
        final Mixer mixer = AudioSystem.getMixer(microphone);
        try {
            mixer.open();
        } catch (LineUnavailableException e) {
            e.printStackTrace();
            System.exit(-1);
        }
        final Line lineIn;
        try {
            lineIn = mixer.getLine(mixer.getTargetLineInfo()[0]);
            lineIn.open();
            if (lineIn.isControlSupported(FloatControl.Type.MASTER_GAIN)) {
                System.out.println("Gain supported");
            }
            final CompoundControl cc = (CompoundControl) lineIn.getControls()[0];
            final Control[] controls = cc.getMemberControls();
            for (final Control c : controls) {
                if (c instanceof FloatControl) {
                    System.out.println("BEFORE LINE_IN VOL = "
                                       + ((FloatControl) c).getValue());
                    ((FloatControl) c).setValue((float) 100 / 100);
                    System.out.println("AFTER LINE_IN VOL = "
                                       + ((FloatControl) c).getValue());
                }
            }
        } catch (final Exception e) {
            e.printStackTrace();
        }
    }
}

这段代码抛出:

java.lang.ArrayIndexOutOfBoundsException: 0 在 MicMacMax.main(MicMacMax.java:24)

这意味着该行没有控件。

需要帮助

  • 我的代码有错误吗?

  • 如果有人可以在他们的机器上测试此代码提供反馈,那就太好了。我想隔离这个问题。

  • 可能与某种权限问题有关吗?

【问题讨论】:

    标签: java macos controls microphone


    【解决方案1】:

    试试这个代码,它对我有用。但是,如果 100 不是麦克风的最大音量,您可能需要将 100 更改为不同的值。

    import javax.sound.sampled.*;
    public class MicMacMax {
    public static void main(String[] args) {
        //pass volume level as parameter
        setMicrophoneVolume(100);
    }
    public static void setMicrophoneVolume(int value) {
        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;
            FloatControl volCtrl = null;
            if (maxLines > 0) {
                try {
                    lineIn = (Port) mixer.getLine(Port.Info.MICROPHONE);
                    lineIn.open();
                    CompoundControl cc = (CompoundControl) lineIn.getControls()[0];
                    Control[] controls = cc.getMemberControls();
                    for (Control c : controls) {
                        if (c instanceof FloatControl) {
                            volCtrl = (FloatControl) c;
                            volCtrl.setValue((float) value / 100);
                        }
                    }
    
                } catch (Exception ex) {
                    continue;
                }
            }
        }
    }
    
    }
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      我已经在我的笔记本电脑上尝试过你的代码并且它工作了(有点)。它没有给出错误,它给出了关于我的电脑的一些规格但是,它找不到麦克风,我知道我的笔记本电脑有麦克风。您在索引 0 处遇到数组越界错误这一事实意味着该数组为空,这使我相信您的计算机没有麦克风或已损坏。

      另外,这是我笔记本电脑上的输出:

      Potential mixer: Primary Sound Driver
      Potential mixer: Speaker/HP (Realtek High Definition Audio)
      Potential mixer: Primary Sound Capture Driver
      Potential mixer: Microphone (Realtek High Defini
      Potential mixer: Stereo Mix (Realtek High Defini
      Potential mixer: Port Speaker/HP (Realtek High Defini
      Potential mixer: Port Microphone (Realtek High Defini
      Potential mixer: Port Stereo Mix (Realtek High Defini
      Microphone not found
      

      希望这会有所帮助。

      【讨论】:

      • 看第24行,不是mic失灵,是Controls失灵。没有麦克风控制。你有什么操作系统?
      • windows 8.1 但也检查了 win 7。所以,我认为这可能是因为您的操作系统不同,因为它可能不支持您的麦克风。尝试更新您的驱动程序
      • 很遗憾,这并没有回答我的问题。
      • 找不到你的麦克风,因为它的名称与我的代码中硬编码的“内置输入”不同(因为我尝试在 Mac 上解决问题)
      • 我认为您的麦克风可能不受支持。在这种情况下,请尝试更新您的驱动程序
      猜你喜欢
      • 2014-10-23
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2021-05-25
      相关资源
      最近更新 更多