JLayer在播放时更改音量(JavaZoom)
我构建了一个JLayer,它可以播放网络音乐流,除了音量之外,效果很好。我无法改变它 我已经尝试了以下操作,但音量始终保持不变,没有错误:JLayer在播放时更改音量(JavaZoom),java,audio,audio-player,jlayer,Java,Audio,Audio Player,Jlayer,我构建了一个JLayer,它可以播放网络音乐流,除了音量之外,效果很好。我无法改变它 我已经尝试了以下操作,但音量始终保持不变,没有错误: public synchronized void setVolume(float vol) { Line.Info source = Port.Info.SPEAKER; if (AudioSystem.isLineSupported(source)) { try { Port outline = (
public synchronized void setVolume(float vol) {
Line.Info source = Port.Info.SPEAKER;
if (AudioSystem.isLineSupported(source)) {
try {
Port outline = (Port) AudioSystem.getLine(source);
outline.open();
FloatControl volumeControl = (FloatControl) outline.getControl(FloatControl.Type.VOLUME);
System.out.println("volume: " + volumeControl.getValue());
volumeControl.setValue(vol);
System.out.println("new volume: " + volumeControl.getValue());
} catch (LineUnavailableException ex) {
System.err.println("source not supported");
ex.printStackTrace();
}
}
}
/*public synchronized void setVolume(double vol) {
try {
Mixer.Info[] infos = AudioSystem.getMixerInfo();
for (Mixer.Info info : infos) {
Mixer mixer = AudioSystem.getMixer(info);
if (mixer.isLineSupported(Port.Info.SPEAKER)) {
Port port = (Port) mixer.getLine(Port.Info.SPEAKER);
port.open();
if (port.isControlSupported(FloatControl.Type.VOLUME)) {
FloatControl volume = (FloatControl) port.getControl(FloatControl.Type.VOLUME);
volume.setValue((float) (vol / 100));
}
port.close();
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}*/
我的经验是,Java支持的各种
控件的实现在某种程度上是成功或失败的。我不清楚为什么会这样。也许这与操作系统或特定机器支持的功能有关
在任何情况下,对于数量而言,通常是对数量的最佳选择
文章的结尾部分讨论了如何直接处理音频数据。我建议使用此选项,但是在使用JavaZoom代码时获取数据可能会有问题,并且可能需要调整库的源代码