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 - 输入音频线没有任何控件的主要内容,如果未能解决你的问题,请参考以下文章