Java - 输入音频线没有任何控件

Posted

技术标签:

【中文标题】Java - 输入音频线没有任何控件【英文标题】:Java - input audio line doesn't have any controls 【发布时间】: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)

这意味着该行没有控件。

需要帮助

我的代码有错误吗?

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

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

【问题讨论】:

【参考方案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 上解决问题) 我认为您的麦克风可能不受支持。在这种情况下,请尝试更新您的驱动程序

以上是关于Java - 输入音频线没有任何控件的主要内容,如果未能解决你的问题,请参考以下文章

C语言音频输入/输出[关闭]

如何将 WAVE_MAPPER 音频线与其音频设备相关联

iOS 7:使用 AVAudioPlayer 的简单音频控件?

iOS:如何让我的音频应用程序在多任务控件中注册?

电脑音频接口是啥啊?

使用 JAVA 从线路输入录制音频