使用两个 MediaPlayer 对象时 MediaPlayer 错误 100 和 38

MediaPlayer error 100 & 38 while using two MediaPlayer objects

我正在尝试构建一个播放某些声音的游戏对点击产生影响,同时在背景中播放音乐

我尝试使用 两个 MediaPlayer 对象 来实现它。 第一个,用于点击效果的效果很好。

然而,第二个有时会记录 错误 100,有时会记录错误 38。完全没有声音。

变量

private MediaPlayer mEffects;
private MediaPlayer mpSoundBackground;

声音媒体播放器的实现:

mpSoundBackground = MediaPlayer.create(MainActivity.this, R.raw.soundbackground1small);
        mpSoundBackground.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                Logger.d("prepared");
                musicPrepared = true;
            }
        });
        mpSoundBackground.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {
                Logger.d("error "+what);
                return false;
            }
        });

 if (musicPrepared) {
            mpSoundBackground.start();
            Logger.d("music is prepared");
        } else {
            Logger.d("music is not prepared");
        }

效果媒体播放器的实现:

   stopPlaying();
   mEffects= MediaPlayer.create(MainActivity.this, R.raw.soundhit);
   mEffects.start();


private void stopPlaying() {
    if (mEffects!= null) {
        mEffects.stop();
        mEffects.release();
        mEffects= null;
    }
}

更新

To add to the confusion: It does seem to work in emulator (Genymotion), but does not work on my OnePlus One, running Lollipop

双方玩家都需要使用setOnPreparedListener方法。另外,如果您想在点击时播放声音,请考虑使用 SoundPool.

同样在 public void onPrepared(MediaPlayer mp) 方法中,您可以使用 mp.start 不需要那个标志,因为一旦到达那个准备好的标志,您就无法确定它是否准备就绪

我无法消除错误,直到我将声音文件重新转换为 MP3。 现在它可以在设备和模拟器上播放,没有任何问题。

这个故事的寓意:如果您 运行 遇到错误,请尝试对同一文件进行几种编码(也可能是几种文件大小!),这可能是解决方案。