一个 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 对象播放音频文件并显示图像

无法使用 MediaPlayer 对象在 Android 中播放许多音频文件

Android MediaPlayer播放视频详细步骤

Android 音乐播放

Android 使用意图播放本地视频

Android MediaPlayer错误码整理