1

通过单击播放按钮重复播放音频时,MediaPlayer 给出错误(-38,0)。我正在尝试制作一个像音乐垫这样的应用程序,它第一次播放正常,但是当你点击多次时,它进入挂起模式并显示错误。

4

2 回答 2

0

媒体播放器缓冲区已满。SoundPool改为使用

 int SoundArr[] = { R.raw.birds_whistling, R.raw.come_bye,
            R.raw.cute_whistle, R.raw.kill_bill_whistle, R.raw.look_back,
             };

SoundPool mSoundPool;
HashMap<Integer,Integer> mSoundPoolMap;
AudioManager  mAudioManager;

 mSoundPool=(SoundPool) SoundImageAdaptor.mSoundPool;
 mSoundPoolMap =SoundImageAdaptor.mSoundPoolMap;//i'm using a grid view adaptor
 mAudioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
/* code to that ensures the sound plays even when media player buffer gets full*/
                 if(!(mSoundPoolMap.containsKey(position)))
                 addSound(position, SoundArr[position]);
                 playSound(position);

您还可以查看此链接如何在游戏中正确使用 SoundPool?

于 2012-10-13T10:40:35.783 回答
0

我假设您再次单击时只需再次准备具有相同来源的媒体播放器。您需要释放旧数据

mMediaPlayer.release();

或者如果它是相同的音频,最好使用

mMediaPlayer.seekTo(0)

再次跳到起点,无需另一轮准备。

Soundpoool 非常适合小文件,但不能处理更大的音频文件。

更新:

实际上只是在我的一个应用程序中遇到了同样的错误:所以我的错误是

mMediaPlayer.stop();
mMediaPlayer.seekTo(0);

这是不正确的,因为停止后您必须再次准备。正确的方法是

mMediaPlayer.pause();
mMediaPlayer.seekTo(0);

官方文档一如既往的很好

http://developer.android.com/reference/android/media/MediaPlayer.html

于 2012-10-14T02:53:49.427 回答