2011-08-10 62 views
0

我有一个对象MediaPlayer mediaplayer。我用它来接连发出不同的声音。One Android MediaPlayer对象一次播放多个声音

mediaplayer = MediaPlayer.create(context, ResIdMusicONE); 
mediaplayer.start(); 

// some user input 

mediaplayer.release(); 
mediaplayer = null; 

// some other user input 

mediaplayer = MediaPlayer.create(context, ResIdMusicTWO); 
mediaplayer.start(); 

// some user input 

mediaplayer.release(); 
mediaplayer = null; 

有时工作正常。但有时候这两个声音同时播放。在媒体播放器应该已经发布的位置,并且等于空。

感谢您的帮助。

回答

0

如果我是你,我会为此使用SoundPool类。使用SoundPool,您可以设置同时播放的流的数量,因此通过将其设置为1,您可以反复调用play(),最近的play()调用将是您听到的唯一声音。

回头看看my post。它有一个问题中的SoundPool类的例子。

编辑: 您是否尝试过创建一个新的实例,并调用准备()要开始新的一次比一次稳健?

mediaplayer = new MediaPlayer(); 
mediaplayer.setDataSource(path); 
mediaplayer.prepare(); 
mediaplayer.start(); 

虽然实际上现在我想想,我敢肯定,你只需要做的是,如果你使用的是文件从SD卡不是来自你的资源...嗯。

+0

感谢您的快速回答。我第一次使用soundpool,我仍然做一些简短的,经常使用的声音。但对于音乐文件,声音池没有很好的工作(也许存在内存问题)。我想播放的文件有ogg格式的30 - 60kb。 –

+0

Yea SoundPool并非真正用于播放更长时间的声音,我也遇到了问题。我用一个建议编辑了我的答案,你试过了吗? – DRiFTy

+0

我试过了。仍然会发生同样的问题。有时候,现在根本就不玩。我也试着用'mediaplayer.setOnPreparedListener ... start()'。但随后问题变得与上述相同。 –