Java:多次播放声音

Posted

技术标签:

【中文标题】Java:多次播放声音【英文标题】:Java: Play a sound more than once 【发布时间】:2013-11-24 22:22:04 【问题描述】:

我最近一直在学习如何在 java 中添加声音。目前,我有这段代码可以工作,但它并不总是在正确的时间播放,或者有时甚至根本不播放。每次在正确的时间触发 play() 方法时,我如何才能播放声音?顺便说一句,每次我在 componentclick 时都会发生这种情况。

public class Sound 

    private File sndFile0;
    private AudioInputStream au;
    private Clip cl;
    private DataLine.Info info;

    public Sound() 
        try 
            sndFile0 = new File(getClass().getResource("/sound/vir1.wav").toURI());
            au = Audiosystem.getAudioInputStream(sndFile0);
            info = new DataLine.Info(Clip.class, au.getFormat());
            cl = (Clip) AudioSystem.getLine(info);
            cl.open(au);
         catch (UnsupportedAudioFileException | IOException | LineUnavailableException | URISyntaxException e) 
            e.printStackTrace();
        
    

    public void play() 
        cl.start();
        cl.setFramePosition(0);
    

【问题讨论】:

只需在 Type.STOP 上重新启动。 ***.com/questions/557903/… @MichaelD。很奇怪,如果我足够快地点击组件或在剪辑结束后,声音会重新开始,否则如果它在中间的某个地方,它不会做任何事情。我将播放代码更改为:pastebin.com/KNAmd9Mc 如果它已经在播放你要重新启动它吗?那是一个 stop() reset() 和一个 play() 左右......不确定 经过一些测试,我发现LineListener 没有做任何事情,唯一允许声音播放不止一次的是cl.setFramePosition(0),它有时会起作用。我什至尝试在播放方法开始时使用cl.stop,它根本没有帮助。所以基本上它让我回到了我原来的play() 方法。 已解决(ish)。我能够做到的是每次他们点击组件时,它都会重新加载文件。 【参考方案1】:

解决了。我所做的是每次单击组件时都继续加载声音文件。

【讨论】:

这是重复播放声音的唯一方法吗? 这可能是一种不太合适的方法。我不建议这样做。第三方库可能更合适。 好的。这种方法对我有用,直到我有很多连续的声音(自动开枪),然后我遇到内存不足的崩溃。

以上是关于Java:多次播放声音的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中混合声音?

防止 Java 7/8 采样声音在播放时点击(适用于 6)

HTML5 JS同时多次播放相同的声音

在单独的线程中播放短声音

java按顺序播放声音

java中的声音 - 播放声音时游戏冻结