如何解决JFrame - 使用 JSlider 更改正在播放的音频文件的音量
我想尝试使用 JSlider 作为音量控制,但不太知道如何继续。
JSlider、AudioInputStream & FloatControl 部分:
public static JSlider slider;
public static JMenuBar bar;
public static Clip mii;
// JMenu Sound
JMenu sound = new JMenu("Sound");
sound.setFont(new Font("Courier New",Font.BOLD,12));
bar.add(sound);
slider = new JSlider(JSlider.HORIZONTAL,100,50);
slider.setMinorTickSpacing(10);
slider.setMajorTickSpacing(20);
slider.setPaintTicks(true);
slider.setPaintLabels(true);
slider.addChangeListener(new Sound_BackgroundAudio());
sound.add(slider);
// Background audio
try {
File audio_mii = new File("src/main/resources/mii.wav");
AudioInputStream mii_audioInputStream = AudioSystem.getAudioInputStream(audio_mii);
mii = AudioSystem.getClip();
mii.open(mii_audioInputStream);
mii_floatControl = (FloatControl) mii.getControl(FloatControl.Type.MASTER_GAIN);
mii.loop(Clip.LOOP_CONTINUOUSLY);
} catch (UnsupportedAudioFileException | IOException | LineUnavailableException ex) {
String[] options = {"Continue"};
JOptionPane.showOptionDialog(frame,ex,eE,JOptionPane.YES_OPTION,JOptionPane.ERROR_MESSAGE,null,options,options[0]);
}
Sound_BackgroundAudio 类:
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Sound_BackgroundAudio implements ChangeListener {
@Override
public void stateChanged(ChangeEvent e) {
//Main.mii_floatControl.setValue(20f * (float) Math.log10(Main.slider.getValue()) / 10);
Main.mii_floatControl.setValue(Main.slider.getValue() / 10);
System.out.println("" + Main.mii_floatControl.getValue());
}
}
在转换为 Main.mii_floatControl.setValue() 时,我已经尝试了很多 计算出合适的值,但体积既没有改变,也不知道正确的公式。也许我必须以完全不同的方式来做?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。