我的目标是制作一个程序,通过一个名为play
的按钮显示弹出窗口。我正在使用内部类和 Action 监听器。该按钮实际上会播放音频剪辑。现在我想做的是,每次我按下播放按钮时,它都会从头开始播放,并且在完成时我不会听到超过一个剪辑实例。这是我仅用于内部类的代码:
private class PlaySound implements ActionListener {
public void actionPerformed(ActionEvent e) {
String filename = "/Users/philipgouldman/Desktop/iPhoneRingtones/Dummy_Yeah.wav";
try {
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(new File(filename)));
clip.setFramePosition(0);
clip.start();
} catch (Exception exc) {
exc.printStackTrace(System.out);
}
}
}
对于实现这一目标的任何提示或建议,我将不胜感激。我在 Clip Interface javadoc 上读到,如果用户希望重新启动操作,只需调用 setFramePosition(0)
之后的 stop
即可。我不能说我完全理解这意味着什么。有人可以引导我走向正确的方向吗?
最佳答案
将您的 Clip
对象移到此句柄之外,以便稍后调查其状态。
例如
private class PlaySound implements ActionListener {
private Clip clip = null;
public void actionPerformed(ActionEvent e) {
String filename = "/Users/philipgouldman/Desktop/iPhoneRingtones/Dummy_Yeah.wav";
try {
if (clip == null) {
clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(new File(filename)));
}
clip.setFramePosition(0);
clip.start();
} catch (Exception exc) {
exc.printStackTrace(System.out);
}
}
}
关于java - 在java中播放音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39381760/