一个 Android MediaPlayer 对象一次播放多个声音
Posted
技术标签:
【中文标题】一个 Android MediaPlayer 对象一次播放多个声音【英文标题】:One Android MediaPlayer Object plays several sounds at once 【发布时间】:2011-08-10 13:47:09 【问题描述】:我有一个对象 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;
有时效果很好。但有时这两种声音会同时播放。并且在媒体播放器应该已经被释放并且等于 null 的位置。
感谢您的帮助。
【问题讨论】:
【参考方案1】:如果我是你,我会为此使用 SoundPool 类。使用 SoundPool,您可以设置同时播放的流数,因此通过将其设置为 1,您可以一遍又一遍地调用 play(),而最近一次调用 play() 将是您听到的唯一声音。
不久前看看my post。它在问题中有一个 SoundPool 类的示例。
编辑: 您是否尝试过创建一个新实例并在每次想要开始新声音时调用 prepare()?
mediaplayer = new MediaPlayer();
mediaplayer.setDataSource(path);
mediaplayer.prepare();
mediaplayer.start();
虽然实际上现在我考虑了一下,但我很确定您只需要在使用来自 sdcard 的文件而不是来自您的资源的文件时才需要这样做......嗯。
【讨论】:
感谢您的快速答复。我第一次使用 soundpool,我仍然使用一些简短的、经常使用的声音。但对于音乐文件,声音池效果不佳(可能存在内存问题)。我想播放的文件有 30 - 60kb 的 ogg 格式。 是的,SoundPool 并不是真的适合播放更长的声音,我也有这个问题。我用一个建议编辑了我的答案,你试过了吗? 我试过了。仍然会出现同样的问题。有时,现在它根本不播放。我也试过mediaplayer.setOnPreparedListener ... start()
。但后来问题就和上面一样了。以上是关于一个 Android MediaPlayer 对象一次播放多个声音的主要内容,如果未能解决你的问题,请参考以下文章
android:使用单个 mediaplayer 对象播放音频文件并显示图像