【发布时间】:2015-06-01 09:29:17
【问题描述】:
我正在使用 libGDX 并面临背景音乐无法在各种 Android 设备(例如运行 Lollipop 的 Nexus 7)上完美循环的问题。每当轨道循环(即从结尾跳到开头)时,都会听到明显的间隙。现在我想知道如何在没有干扰间隙的情况下循环播放背景音乐?
我已经尝试过各种方法,例如:
- 确保轨道中的样本数量是轨道采样率的精确倍数(如 SO 中某处所述)。
- .ogg、.m4a、.mp3 和 .wav 等各种音频格式(.ogg 似乎是 SO 的首选解决方案,但不幸的是,它不适用于我的情况)。
- 使用带有 setLooping(true) 的 Androids MediaPlayer 而不是 libGDX Music 类。
-
使用 Android 的 MediaPlayer.setNextMediaPlayer()。代码如下所示,它播放两个音轨之间没有间隙,但不幸的是,一旦第二个 MediaPlayer 完成,第一个就不会重新开始!
/* initialization */ afd = context.getAssets().openFd(filename); firstBackgroundMusic.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); firstBackgroundMusic.prepare(); firstBackgroundMusic.setOnCompletionListener(this); secondBackgroundMusic.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); secondBackgroundMusic.prepare(); secondBackgroundMusic.setOnCompletionListener(this); firstBackgroundMusic.setNextMediaPlayer(secondBackgroundMusic); secondBackgroundMusic.setNextMediaPlayer(firstBackgroundMusic); firstBackgroundMusic.start(); @Override public void onCompletion(MediaPlayer mp) { mp.stop(); try { mp.prepare(); } catch (IOException e) { e.printStackTrace(); } }
您知道代码 sn-p 有什么问题吗?
【问题讨论】:
-
ExoPlayer。请参阅此处的重复问题:stackoverflow.com/a/56925333/11533635
-
哇,2021 年,这个问题获得了赞成票。这很令人惊讶。好吧,libGDX 和 RoboVM 在 2015 年很有趣,但在 2021 年,Godot 会更好:godotengine.org
标签: android audio libgdx background-music