【发布时间】:2017-02-02 21:52:01
【问题描述】:
我正在尝试编写一个小程序来更改给定设备的主音量。目前看起来是这样的
import java.util.*;
import javax.sound.sampled.*;
public class VolumeControl {
public static void main(String[] args) throws Exception {
Mixer mixer = findMixer(args[0]);
changeVolume(mixer, Integer.valueOf(args[1]));
}
private static Mixer findMixer(String name) {
Mixer.Info mixerInfo = Arrays.stream(AudioSystem.getMixerInfo())
.filter(info -> name.equals(info.getName()))
.findFirst()
.orElseThrow(() -> new IllegalArgumentException(String.format("no mixer with the name '%s' found", name)));
return AudioSystem.getMixer(mixerInfo);
}
private static void changeVolume(Mixer mixer, int level) throws LineUnavailableException {
for(Line.Info info : mixer.getSourceLineInfo()) {
try(Line line = mixer.getLine(info)) {
if (!line.isOpen()) line.open();
FloatControl control = (FloatControl) line.getControl(FloatControl.Type.MASTER_GAIN);
control.setValue(limit(control.getMinimum(), control.getMaximum(), (float) level));
}
}
}
private static float limit(float min, float max, float level) {
return Math.min(max, Math.max(min, level));
}
}
当我使用我的设备名称编译和运行它时,我总是得到以下异常
Exception in thread "main" java.lang.IllegalArgumentException: illegal call to open() in interface Clip
at com.sun.media.sound.DirectAudioDevice$DirectClip.implOpen(Unknown Source)
at com.sun.media.sound.AbstractDataLine.open(Unknown Source)
at com.sun.media.sound.AbstractDataLine.open(Unknown Source)
at VolumeControl.changeVolume(VolumeControl.java:23)
at VolumeControl.main(VolumeControl.java:9)
我做错了吗?我在互联网上搜索了这个错误,但没有发现任何有用的东西。
我怎样才能摆脱这个异常和/或理解这实际上意味着什么?
【问题讨论】:
-
答案已经是here。您的例外的第一个 Google 结果。 (我会标记,但我不小心删除了我的标记)
-
我也看到了那个帖子..但是这家伙想播放音频文件。我只想改变声音界面的主音量
-
上下文无关紧要,答案中提供了您的异常的解决方案..