Android背景音乐游戏在循环播放之前暂停
问题描述:
我正在开发Android游戏,并且我正在使用标准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!
答
不幸的是,它的工作原理就是这样。
问题是他重新启动播放器,在完成后。
如果您使用API 16或更高版本,则可以使用setNextMediaPlayer(MediaPlayer)-方法。然后他试图以一种方式开始下一个MediaPlayer
,即没有停顿。
如果您正在开发API小于16,我不知道如何处理这与MediaPlayer
。
您可能会尝试使用2 MediaPlayers
并在第一个停止之前开始第二个。但我不知道它有多好,因为你不知何时必须知道何时开始新玩家。
编辑:
后一些谷歌的工作,我发现this。
有人建议将mp3
-File转换为ogg
-File,什么可以让它在没有暂停的情况下进行循环。但我没有尝试过。
根据意见,这对一个人有效,但不适用于另一个人。
答
我想我找到了一种方法,使这项工作...
我已经改变了代码如下:
/** 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();
}
}
现在循环罚款...问题是,我不我真的明白为什么...
希望这会对一些与我有同样问题的人有所帮助。
干杯!
好,很烂。 – Veljko 2013-03-21 16:48:31
对不起,给你坏消息:/ – MalaKa 2013-03-21 17:03:20
我试着用wav,mp3和ogg文件...同样的事情发生 – Veljko 2013-03-21 17:23:13