我有一个游戏的音效。当游戏框架打开时,第一个声音会滞后。在那个声音播放后,不会再有延迟。这是我的剪辑播放器:
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() 命名为“声音效果”时,它总体上可以很好地播放,但是第一次播放时,会出现巨大的延迟峰值。我能做些什么来解决这个问题,最好还是使用剪辑?
使用单独的线程
Thread music = new Thread(new Runnable() {
@Override public void run() { your code }
};
music.start();
好吧,标题说明了一切,我尝试使用javax播放wav文件。声音,什么也没有发生。我试过很多不同的文件,但没有任何运气。
我有一个计划线程,大约每半秒运行一次,每次播放一个音频剪辑,在每个循环之前对剪辑调用,以便再次: 但第一次之后就不再播放了。代码运行,但声音不播放。有什么想法吗?
我在带有的游戏中播放音效(WAV文件)。但是,有2秒的效果并没有完全播放,只是其中的一部分。如果我添加,那么声音会正确播放多次,即整个2秒。出了什么问题,如何修复?
我需要制作一个音频播放器,每当这个子例程运行时,它都会播放一个声音剪辑。在播放新的之前,它还必须停止以前的声音剪辑。 我遇到的问题是,剪辑从来没有注册为运行。检查它是否正在运行的两个if语句都没有使用过。这意味着剪辑只有在完成时才会停止,它们可能会重叠,从而破坏程序。 我会使用剪辑停止();在其他子例程中,但它会告诉我找不到“剪辑”符号。我不知道如何使其可供其他子例程使用。 我唯一能得到剪辑的方法
问题内容: 我编写了一个简单的类,可以在一个简单的游戏中播放音频文件。它适用于诸如枪声或爆炸声之类的小声音,但是当我尝试将其用于背景音乐时,出现以下错误:“未能分配剪辑数据:请求的缓冲区太大。” 我假设这意味着文件太大,但是如何解决呢?资源: 问题答案: 使用。这是我玩12-18分钟(或更多1分钟)的MP3的课堂。 它要求在运行时类路径上实际加载MP3格式的声音,但这不是重点。重点是: 会将声音文
问题内容: 我正在使用以下代码使用java sound API播放声音文件。 对Clip.start()方法的方法调用将立即返回,并且系统在后台线程中播放声音文件。我希望我的方法暂停直到播放完成。 有什么好办法吗? 编辑:对于所有对我最终解决方案感兴趣的人,根据Uri的回答,我使用了以下代码: 问题答案: 声音剪辑是类型或线路,因此支持线路监听器。 如果使用addLineListener,则应该在