我有一个游戏的声音效果。在游戏帧打开时,第一个声音滞后。在这个声音播放后,没有更多的滞后经验。下面是我的剪辑播放器:
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?
2条答案
按热度按时间kmbjn2e31#
使用单独的线程
fkvaft9z2#
我也有同样的错误,第一次播放一个片段会延迟1-2秒,不管什么时候调用play()方法。我所做的是在main()方法中播放一个片段,这个片段只有半秒长,并且不包含任何内容(没有声音)。这意味着实际声音的play()方法不会在第一次被调用,对我来说,它是有效的。希望它能有所帮助。