小编典典

Libgdx:音轨循环中的滞后

java

我在libgdx中的音乐循环时遇到麻烦。我知道以前有一个Simmilair主题,但这完全没有帮助。关键是,当您进入游戏的主菜单(链接)时,雨声就回响了。不幸的是,每场比赛之间只有片刻的沉默,我不知道为什么-
您可以下载游戏,看看我的意思。我已经在使用.ogg格式,因此在这里找到的其他主题的解决方案并没有真正的帮助。

如果我在Audacity中循环播放此声音,则效果很好。

这是我的代码(不过,我认为这不会有所帮助):

rainSoundtrack = Gdx.audio.newMusic(Gdx.files.internal("soundtrack.ogg"));
rainSoundtrack.setLooping(true);

阅读 234

收藏
2020-11-30

共1个答案

小编典典

问题是libGDX处理音乐的方式。我将在GitHub Issue
1654
上引用badlogic文章。

Android的情况更加复杂和令人难过。在Android上,我们使用系统功能来播放音频,即MediaPlayer。这些Android软件在后台使用了设备依赖驱动程序(音频驱动程序,自定义编解码器实现等)。这意味着我们受到三星等硬件供应商及其驱动程序实施的支配。

该问题不仅限于libGDX,它是Android问题18756

您的音轨在内存大小方面既短又小,因此在这种情况下使用libGDX声音实际上更好,并且没有此漏洞。

音乐->长而大的文件,未加载到内存中

声音->大小不一的文件,已加载到内存中

使用Sound类并循环播放。例:

long id;
...
public void create() {
    music = Gdx.audio.newSound(Gdx.files.internal("soundtrack.ogg"));
    id = music.loop(); //Sound may not be ready here!
}

public void render() {
    if(id == -1)
        id = music.loop();
}
2020-11-30