使用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);
这是什么?错误消息?如果您有其他代码,请[编辑](https://stackoverflow.com/posts/30073121/edit)您的问题。 –
我已经使用过您的代码,但出现错误。 java.lang.ClassCastException:com.sun.media.sound.PortMixer $ FloatCtrl无法转换为javax.sound.sampled.CompoundControl – Rafiq
为什么要这样做:'final CompoundControl cc =(CompoundControl)lineIn.getControls()[ 0];'? –