java - 任意一次播放单个音频文件

标签 java audio javasound

如何一次只播放 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/

相关文章:

audio - 使用offlineAudioContext重新采样捕获的音频流

java - 使用 Java 混音器混合两个音频流

java - 我试图从 3 个字符串数组中随机选择元素?

audio - 需要帮助使用 ffmpeg 到 "concat"多个音频文件(webm、mp4)以制作更长的 MP3 音频

file - 如何使用 sox 合并多个音频文件

具有端口和数据线的 JavaSound 混音器?

java - 播放大型 wav 文件的特定部分

java - 如何忽略不重要的节点?

java - 在运行时更改 Tomcat 中的日志记录级别?

java - 使用 JAXB 解码具有相同名称的 XML 标签