0

我正在开发 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 上的某个播放器中播放相同的文件时,它会循环播放并且听起来非常好...如何解决这个问题?天呐!

4

2 回答 2

0

好吧,不幸的是,它就是这样工作的。
问题是他在完成重新启动播放器。

如果您使用 API 16 或更高版本,则可以使用setNextMediaPlayer(MediaPlayer) - 方法。然后他试图以MediaPlayer一种没有停顿的方式开始下一个。

如果您正在为小于 16 的 API 进行开发,我不知道您如何使用MediaPlayer.

您可以尝试使用 2MediaPlayers并在第一个停止之前开始第二个。但我不知道这有多好用,因为您必须以某种方式找出何时启动新播放器。

编辑:
经过更多的谷歌工作,我发现了这个
有人建议将mp3-File转换为ogg-File,这样就可以在没有暂停的情况下循环它。但我没有尝试过。
根据评论,这对一个人有效,但对另一个人无效。

于 2013-03-21T15:20:39.080 回答
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();
    }

}

现在它循环正常......问题是我真的不明白为什么......

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

干杯!

于 2013-03-21T18:17:26.077 回答