Android背景音乐游戏在循环之前暂停

时间:2013-03-21 14:10:45

标签: android media-player

我正在开发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!

2 个答案:

答案 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();
    }

}

现在循环很好......问题是我真的不明白为什么......

希望这对一些与我有同样问题的人会有所帮助。

干杯!