2013-11-24 235 views
0

我最近一直在学习如何在java中添加声音。目前,我有这样的代码,但它并不总是在正确的时间播放,有时根本不能播放。每当在正确的时机触发play()方法时,我怎样才能播放声音?顺便说一下,我每次都在component上发生这种情况。Java:多次播放声音

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); 
    } 
} 
+0

只需重新启动Type.STOP。 http://stackoverflow.com/questions/557903/how-can-i-wait-for-a-java-sound-clip-to-finish-playing-back –

+0

@MichaelD。这很奇怪,如果我快速点击组件或剪辑结束后,声音将重新启动,否则如果它位于中间某处,它将不会执行任何操作。我将播放代码更改为:http://pastebin.com/KNAmd9Mc – CoderMusgrove

+0

如果它已经播放,您想重新启动它?这是一个停止()重置()和一个播放()左右...不知道 –

回答

0

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

+0

这是重复播放声音的唯一方法吗? –

+0

这可能是一个不太合适的做法。我不会推荐这样做。第三方库可能更适合。 – CoderMusgrove

+0

好的。这种方法适用于我,直到我有很多连续的声音(自动枪射击),然后我得到一个内存不足的崩溃。 –