如何一次只播放1个音频文件?
所以我创建了一个具有多个按钮的GUI,并为每个按钮附加了一个动作监听器。按下按钮时,它将播放音频文件(.wav)。这很好用。 问题是我希望它在任何时候只播放一个文件,所以声音不重叠,我不知道该怎么办。
我是否需要使用线程和同步?任何和所有的建议将不胜感激。
编辑
声明为类变量:
String soundName;
AudioInputStream audioInputStream;
Clip clip;
的ActionListener:
@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();
}
答案 0 :(得分:1)
在重新分配剪辑并开始新剪辑之前停止剪辑。
@Override
public void actionPerformed(ActionEvent e) {
if (clip != null) {
if (clip.isActive()) clip.stop();
if (clip.isOpen()) clip.close();
}