Libgdx:声音循环中的滞后

时间:2016-08-30 14:31:00

标签: java android libgdx

我在libgdx中遇到音乐循环问题。我知道之前有一个simmilair主题,但它根本没有帮助我。问题是当你在我的游戏(link)中进入主菜单时,下雨的声音就会响起。不幸的是,每场比赛之间都有一段短暂的沉默,我不知道为什么 - 你可以下载游戏,看看我的意思。我已经在使用.ogg格式,所以我在这里找到的其他主题的解决方案并没有真正帮助。

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

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

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

1 个答案:

答案 0 :(得分:2)

问题在于libGDX处理音乐的方式。我将引用GitHub issue 1654上的badlogic帖子。

  Android的情况有点复杂和悲伤。在Android上,我们使用系统工具来播放音频,即MediaPlayer。这些Android软件使用引擎盖下的设备依赖驱动程序(音频驱动程序,自定义编解码器实现等)。这意味着我们受三星等硬件供应商及其驱动程序实施的支配。

问题不仅限于libGDX,而是Android issue 18756

<强>解决方案

你的音轨在内存大小方面很短很小,所以在这种情况下使用libGDX声音实际上更好,它没有这个间隙错误。

音乐 - &gt;长文件和大文件,未加载到内存中

声音 - &gt;短文件和小文件,加载到内存中

使用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();
}