第一次播放时Java剪辑延迟

4c8rllxm  于 2023-01-07  发布在  Java
关注(0)|答案(2)|浏览(131)

我有一个游戏的声音效果。在游戏帧打开时,第一个声音滞后。在这个声音播放后,没有更多的滞后经验。下面是我的剪辑播放器:

public enum SoundEffect
{
    WALL("ping_pong_8bit_plop"),
    PADDLE("ping_pong_8bit_beeep"),
    POINT("ping_pong_8bit_peeeeeep");
    public static enum Volume
    {
        MUTE, UNMUTE
    }
    public static Volume volume = Volume.MUTE;
    private Clip clip;
    SoundEffect (String file)
    {
        try
        {
            AudioInputStream inputStream = AudioSystem.getAudioInputStream(this.getClass().getResource(file+".wav"));
            AudioFormat format = inputStream.getFormat();
            DataLine.Info info = new DataLine.Info(Clip.class, format);
            clip = (Clip)AudioSystem.getLine(info);
            clip.open(inputStream);

        }
        catch (UnsupportedAudioFileException uae)
        {
            uae.printStackTrace();
        }
        catch (IOException ioe)
        {
            ioe.printStackTrace();
        }
        catch (LineUnavailableException lue)
        {
            lue.printStackTrace();
        }
    }   
    public void play()
    {
        if (volume != Volume.MUTE)
        {
            if (clip.isRunning())
                clip.stop();
            clip.flush();
            clip.setFramePosition(0);
            clip.start();
        }
    }
    static void init()
    {
        values();
    } 
}

例如,当我调用SoundEffect.WALL.play()时,它总体上运行良好,但第一次运行时出现了巨大的滞后尖峰。我该怎么做才能解决这个问题,最好还是使用Clips?

kmbjn2e3

kmbjn2e31#

使用单独的线程

Thread music = new Thread(new Runnable() {
    @Override public void run() { your code }
};
music.start();
fkvaft9z

fkvaft9z2#

我也有同样的错误,第一次播放一个片段会延迟1-2秒,不管什么时候调用play()方法。我所做的是在main()方法中播放一个片段,这个片段只有半秒长,并且不包含任何内容(没有声音)。这意味着实际声音的play()方法不会在第一次被调用,对我来说,它是有效的。希望它能有所帮助。

相关问题