一次播放单个音频文件

时间:2013-11-28 00:14:19

标签: java audio javasound

如何一次只播放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();
}

1 个答案:

答案 0 :(得分:1)

在重新分配剪辑并开始新剪辑之前停止剪辑。

@Override
public void actionPerformed(ActionEvent e) {
    if (clip != null) {
        if (clip.isActive()) clip.stop();
        if (clip.isOpen()) clip.close();
    }