Java剪辑首播时滞后

时间:2018-04-01 07:16:00

标签: java audio lag

我有一个游戏的音效。在游戏框架打开时,第一个声音落后。声音播放后,不会再出现滞后现象。 这是我的剪辑播放器:

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?

1 个答案:

答案 0 :(得分:0)

使用单独的线程

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