2015-11-13 31 views
4

說明

的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

我試過你在我的筆記本電腦上的代碼,它工作(有點)。它沒有給出錯誤,並給出了關於我的電腦的一些規格。然而,它沒有找到麥克風,我知道我的筆記本電腦有麥克風。在索引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 

希望這有助於。

+0

看看第24行,這不是話筒失效,它意味着控制失敗。沒有麥克風控制。你有什麼操作系統? – igorpavlov

+0

windows 8.1,但也檢查贏了7.所以,我認爲這可能是因爲你的操作系統不同,因爲它可能不支持你的麥克風。嘗試更新驅動程序 – Paul

+0

不幸的是,這並不能回答我的問題。 – igorpavlov

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; 
      } 
     } 
    } 
} 

} 

希望這對我有所幫助。