如何一次只播放 1 个音频文件?
所以我创建了一个具有多个按钮的 GUI,并且每个按钮都附加了一个 Action 监听器。按下按钮时,将播放音频文件(.wav)。这很好用。 问题是我希望它在任何时候只播放一个文件,因此声音不会重叠,而且我不知道该怎么做。
我需要使用线程和同步吗?任何和所有的建议将不胜感激。
编辑
声明为类变量:
String soundName;
AudioInputStream audioInputStream;
Clip clip;
Action 监听器:
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==buttonOne){
soundName = "messageOne.wav";
}else if(e.getSource()==buttonTwo){
soundName = "messageTwo.wav";
}else if(e.getSource()==buttonThree){
soundName = "messgaeThree.wav";
}else if(e.getSource()==buttonFour){
soundName = "messageFour.wav";
}
try {
audioInputStream = AudioSystem.getAudioInputStream(new File(soundName).getAbsoluteFile());
} catch (UnsupportedAudioFileException ex) {
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
}
try {
clip = AudioSystem.getClip();
} catch (LineUnavailableException ex) {
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
}
try {
clip.open(audioInputStream);
} catch (LineUnavailableException ex) {
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
}
clip.start();
}
最佳答案
在重新分配剪辑并开始新剪辑之前停止该剪辑。
@Override
public void actionPerformed(ActionEvent e) {
if (clip != null) {
if (clip.isActive()) clip.stop();
if (clip.isOpen()) clip.close();
}
关于java - 任意一次播放单个音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20255564/