簡體   English   中英

Java游戲音效無法正常工作

[英]Java game sound effects isn't working correctly

我正在嘗試做我的學校項目(一個簡單的Java游戲),但我無法完成音效工作。 我正在使用Clip進行操作,現在我的playSound方法看起來像這樣:

public void playSound(File filename) {
    try {
        AudioInputStream sound = AudioSystem.getAudioInputStream(filename);
        Clip clip = AudioSystem.getClip();
        clip.open(sound);

        clip.setFramePosition(0);
        clip.start();
    } 
    catch (UnsupportedAudioFileException ex) {
        ex.printStackTrace();
    } 
    catch (IOException ex) {
        ex.printStackTrace();
    } 
    catch (LineUnavailableException ex) {
        ex.printStackTrace();
    }
}

我有不同的聲音效果作為屬性(文件),當我想播放聲音時調用該方法。

一切正常:例如當玩家吃東西時播放聲音,但有時聲音變得輕松。 播放器沒有吃東西時正在播放吃聲。

你知道怎么了嗎 播放這樣的幾種音效是否有問題? 謝謝! :)

以下建議可能會對您的情況有所幫助,也可能沒有幫助。

每次播放聲音時,您都從磁盤加載剪輯。 剪輯被設計為可以加載一次,並根據需要進行調用。 要重播片段,您可以將其重置為第0毫秒或第0幀,然后像此處一樣調用play。 這樣,它很快就會啟動。 按照您編程的方式,剪輯直到從磁盤完全加載到內存中之前都不會開始播放,並且setFramePosition(0)是多余的,因為新創建的剪輯將始終從頭開始播放(除非您已明確設置移至其他幀位置)。

因此,我建議在游戲開始時,將片段一次加載到將要保留的對象中,並根據需要引用它們,此時您只需要調用setFramePosition(0)和play()方法。

如果聲音是在奇怪的時間播放,那么我會更仔細地研究調用聲音的邏輯。 雖然您的方法不是最佳方法,但它確實有效,並且如果聲音文件的加載由於某種原因而延遲,則只會導致奇怪的播放時間延遲。 但是,如果您的聲音超過幾秒鍾長,則這些加載延遲可能是問題的根源。

另一個想法是,SourceDataLine將比創建,加載和播放新的Clip更快地開始播放。 播放SDL比剪輯要花費更多的CPU,但是如果聲音文件較長,這仍然是一種合理的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM