使用两个 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。
现在它可以在设备和模拟器上播放,没有任何问题。
这个故事的寓意:如果您 运行 遇到错误,请尝试对同一文件进行几种编码(也可能是几种文件大小!),这可能是解决方案。
我正在尝试构建一个播放某些声音的游戏对点击产生影响,同时在背景中播放音乐。
我尝试使用 两个 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。 现在它可以在设备和模拟器上播放,没有任何问题。
这个故事的寓意:如果您 运行 遇到错误,请尝试对同一文件进行几种编码(也可能是几种文件大小!),这可能是解决方案。