我正在开发Android游戏,我正在使用标准的Android组件。
我有媒体播放器对象应该一遍又一遍地播放背景音乐。 我已经创作了一些音乐,然后渲染它......它完美地循环播放。
现在当我将我的音乐文件添加到游戏中...之前每个循环音乐停止片刻......但它非常烦人。为什么会这样?
我已经在2.3.3手机设备和ICS模拟器上测试了......每次都会发生同样的事情。
这是我的代码:
/** Play background music */
public static void playMusic() {
if (backgroundMusic == null) {
backgroundMusic = new MediaPlayer();
backgroundMusic.setVolume(0.5f, 0.5f);
try {
backgroundMusic.setDataSource(activity.getAssets()
.openFd("background_music.ogg")
.getFileDescriptor());
backgroundMusic.prepare();
backgroundMusic.setAudioStreamType(AudioManager.STREAM_MUSIC);
backgroundMusic.setLooping(true);
backgroundMusic.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
当我在PC上的某个播放器中播放相同的文件时,它会循环播放,听起来非常不错...... 如何解决这个问题? TNX!
答案 0 :(得分:0)
嗯,不幸的是,它就是这样的 问题是他重启了播放器, 完成后。
如果您使用的是API 16或更高版本,则可以使用setNextMediaPlayer(MediaPlayer) - 方法。然后他尝试以某种方式开始下一个MediaPlayer
,没有停顿。
如果您正在为小于16的API进行开发,我不知道如何使用MediaPlayer
处理此问题。
您可以尝试使用2 MediaPlayers
并在第一个停止之前启动第二个mp3
。但是我不知道它有多好,因为你不知何故必须找出,何时开始新玩家。
修改强>
经过一些谷歌工作后,我找到了this
有人建议将ogg
- 文件转换为{{1}} - 文件,这样就可以在没有暂停的情况下循环它。但我没试过。
根据评论,这适用于一个人,但不适用于另一个人。
答案 1 :(得分:0)
我想我找到了一种方法让这项工作......
我已将代码更改为:
/** Play background music */
public static void playMusic() {
if (backgroundMusic == null) {
backgroundMusic = new MediaPlayer();
backgroundMusic.setVolume(0.5f, 0.5f);
AssetFileDescriptor afd;
try {
afd = activity.getAssets().openFd(
"background_music.ogg");
backgroundMusic.setDataSource(afd.getFileDescriptor(),
afd.getStartOffset(), afd.getLength());
backgroundMusic.setLooping(true);
backgroundMusic.prepare();
} catch (IOException e1) {
e1.printStackTrace();
}
backgroundMusic.start();
}
}
现在循环很好......问题是我真的不明白为什么......
希望这对一些与我有同样问题的人会有所帮助。
干杯!