如何在libgdx中循环播放音乐?

8
我在onCreate中创建音乐,代码如下:

music_background = Gdx.audio.newMusic(Gdx.files.internal("background_music.mp3"));
music_background.setLooping(true);

问题是音频文件无法循环播放。我试过去掉循环并注册setOnCompletionListener,但它仍无法播放。当我像这样重新加载文件:
music_background = Gdx.audio.newMusic(Gdx.files.internal("background_music.mp3"));在事件内它工作了,但只有一次。
我认为问题在于当文件播完后自动释放了...
如何让音乐循环播放?我做错了什么?

1
方法名是 setLooping 而不是 SetLoop。 此外,在音乐结束后,您可以尝试使用 isLooping()getPosition() 方法进行调试。 - Rara
是的,我自己写的,没有从我的代码中复制。我尝试了isLooping()和getPosition()方法。第一个方法返回true,第二个方法返回0.. 我该怎么处理它? - Alex K
我在我的应用程序中尝试了你的“Music”资产加载方法。它可以正常循环播放。我还尝试使用OnCompletionListener获取isLooping()getPosition()值与你的进行比较,但是当音乐重新开始时该方法没有被调用。可能只有在音乐停止时才会被调用,而这在我的情况下从未发生过。还有几个想法:
  1. 你能否尝试一些其他的mp3文件?也许你当前的文件已经损坏了?
  2. 你的“music_background”字段是否声明为“static”?
- Rara
还有一个问题。你在哪些后端上运行你的应用程序进行测试? - Rara
我尝试了另一个mp3文件,但它并没有很好地工作(循环不起作用)。你关于OnCompletionListener的说法是正确的,它只在循环设置为false时才起作用。music_background不是静态的。我在Android上运行它。 你能给我测试用的那个文件吗? - Alex K
这是我的mp3。我在Android、iOS和Linux上重新检查了它。在任何地方,它都能正常工作。尝试编写一个简单的应用程序,只加载音乐、设置循环并播放。也许这可以帮助定位问题。您还可以在其他后端进行测试。 - Rara
1个回答

12
你做得很正确,但是MP3不适合循环播放,应该使用OGG。MP3在开头会添加一个短暂的静音,而OGG或WAV没有这个限制。
这是我的代码,完美运行:
menuMusic = Gdx.audio.newMusic(Gdx.files.internal("data/sounds/music_menu.ogg"));
menuMusic.setLooping(true);
menuMusic.play();

如果你的所有文件都是MP3格式,只需下载Audacity软件,导入你的MP3文件,删除空白音频并导出为OGG格式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接