2013-11-24 285 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

好的。這種方法適用於我,直到我有很多連續的聲音(自動槍射擊),然後我得到一個內存不足的崩潰。 –