目前我正在尝试使用JSlider
in Java
来控制我的 PC 的主音量。到目前为止,我已经能够找到我的 PC 的主扬声器端口。但是,我不知道如何成功调用它并运行 getValue() 或 setValue() 之类的方法。
我使用以下代码在我的电脑中搜索所有音频设备:
Mixer.Info [] mixers = AudioSystem.getMixerInfo();
System.out.println("There are " + mixers.length + " mixer info objects");
for (Mixer.Info mixerInfo : mixers)
{
System.out.println("mixer name: " + mixerInfo.getName());
Mixer mixer = AudioSystem.getMixer(mixerInfo);
Line.Info [] lineInfos = mixer.getTargetLineInfo(); // target, not source
for (Line.Info lineInfo : lineInfos)
{
System.out.println(" Line.Info: " + lineInfo);
Line line = null;
boolean opened = true;
try
{
line = mixer.getLine(lineInfo);
opened = line.isOpen() || line instanceof Clip;
if (!opened)
{
line.open();
}
FloatControl volCtrl = (FloatControl)line.getControl(FloatControl.Type.VOLUME);
System.out.println(" volCtrl.getValue() = " + volCtrl.getValue());
}
catch (LineUnavailableException e)
{
e.printStackTrace();
}
catch (IllegalArgumentException iaEx)
{
System.out.println(" " + iaEx);
}
finally
{
if (line != null && !opened)
{
line.close();
}
}
}
}
如何控制我的扬声器线路并更改值?
到目前为止, 我已经使用这个网站寻求帮助。
更新
好的,所以我想我已经接近了一点。在我的测试 GUI 程序下,我正在尝试使用“获取具有所需控件的行”(您给我的链接)下的 Java 教程代码。我将它粘贴到我的 JSlider 的 Change Listener 下的程序中。
这是它的样子:
Port SPEAKER;
FloatControl volCtrl;
try {
Mixer mixer = AudioSystem.getMixer(null);
SPEAKER = (Port)mixer.getLine(Port.Info.SPEAKER);
SPEAKER.open();
volCtrl = (FloatControl) SPEAKER.getControl(
FloatControl.Type.VOLUME);
} catch (Exception e) {
System.out.println("Failed trying to find LINE_IN"
+ " VOLUME control: exception = " + e);
}
每当我移动滑块时,它都会打印出错误异常消息“尝试查找失败...”。为什么它不能让我在主输出扬声器上获得 volCtrl?如何修复此代码以控制我的 SPEAKER?