使用java的麦克风上的麦克风声级控制

问题描述:

我想使用下面的源代码使用java.I控制OSX上的麦克风声级,但不支持在Mac OS上。有什么办法可以控制OSX上使用java的麦克风音量水平吗?使用java的麦克风上的麦克风声级控制

public static void setDeviceSensitivity(final int sensitivity) { 
    final Port lineIn; 
    // Mixer.Info[] mixerInfoPool=AudioSystem.getMixerInfo(); 

    final Mixer mixer = AudioSystem.getMixer(null); 
    try { 
     if (mixer.isLineSupported(Port.Info.LINE_IN)) { 
      lineIn = (Port) mixer.getLine(Port.Info.LINE_IN); 
      lineIn.open(); 
     } else if (mixer.isLineSupported(Port.Info.MICROPHONE)) { 
      lineIn = (Port) mixer.getLine(Port.Info.MICROPHONE); 
      lineIn.open(); 
     } else if (mixer.isLineSupported(Port.Info.HEADPHONE)) { 
      lineIn = (Port) mixer.getLine(Port.Info.HEADPHONE); 
      lineIn.open(); 
     } else { 
      System.out.println("Unable to get Input Port"); 
      return; 
     } 
     lineIn.getControls(); 

     if (lineIn.isControlSupported(FloatControl.Type.MASTER_GAIN)) { 
      System.out.println("kewl"); 
     } 

     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) sensitivity/100); 
       System.out.println("AFTER LINE_IN VOL = " 
         + ((FloatControl) c).getValue()); 
      } 
     } 
    } catch (final Exception e) { 
     System.out.println(e); 
    } 
    } 

获取话筒:

Mixer.Info microphone = null; 
    for (Mixer.Info info : AudioSystem.getMixerInfo()) { 
     System.out.println(info); 
     if (info.getName().equals("Port Built-in Microphone")) { 
      System.out.println("found " + info); 
      microphone = info; 
     }    
    } 

    final Mixer mixer = AudioSystem.getMixer(microphone); 
+0

这是什么?错误消息?如果您有其他代码,请[编辑](https://*.com/posts/30073121/edit)您的问题。 –

+0

我已经使用过您的代码,但出现错误。 java.lang.ClassCastException:com.sun.media.sound.PortMixer $ FloatCtrl无法转换为javax.sound.sampled.CompoundControl – Rafiq

+0

为什么要这样做:'final CompoundControl cc =(CompoundControl)lineIn.getControls()[ 0];'? –