当前位置: 首页 > 知识库问答 >
问题:

Java剪辑在第一次播放时滞后

印成天
2023-03-14

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

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() 命名为“声音效果”时,它总体上可以很好地播放,但是第一次播放时,会出现巨大的延迟峰值。我能做些什么来解决这个问题,最好还是使用剪辑?

共有1个答案

阳兴文
2023-03-14

使用单独的线程

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,则应该在