使用 OpenSL ES Android 同时播放多个音效
Posted
技术标签:
【中文标题】使用 OpenSL ES Android 同时播放多个音效【英文标题】:Play several sound effects simultaneously using OpenSL ES Android 【发布时间】:2012-05-07 08:22:16 【问题描述】:我正在使用 OpenSL ES 在我的项目中播放音乐和声音。我使用 native-audio sample 作为开始,它可以很好地再现背景音乐和单个声音,但是当我尝试同时再现两个或多个声音时,声音不会同时再现,因为播放所有先前的缓冲区时,声音缓冲区将排队等待播放。
然后,经过一番研究,我找到了两种解决方法,简而言之:
使用多个音频播放器(以及缓冲队列)来重现声音。 将音效缓冲区混合到一个缓冲区中,然后加入队列。
我的问题是: 您认为最好的方法是什么?有没有更好的方法被我忽略了?
提前致谢。
【问题讨论】:
【参考方案1】:我也在使用 OpenSL ES。一开始有点复杂...
无论如何,您可以创建任意数量的 ObjectPlayer,请始终记住对象的最大数量是 32。
所以,理想情况下,如果你想同时播放 4 个声音,你需要 4 个 PlayerObject 和 1 个 OutputMixObject
希望你能找到有用的
【讨论】:
【参考方案2】:这是一种完全不同的方法:我正在使用 SoundPool 来执行此操作:它非常简单,而且效果很好。
【讨论】:
首先,感谢您的回复。我在一个旧项目中使用了 SoundPool,是的,它非常简单,即使使用 c++ 也很容易实现,但对我来说,SoundPool 有两个大问题,它在 Galaxy S 设备上崩溃而且非常不稳定(有些声音从未播放过,第一次播放无效...)。以上是关于使用 OpenSL ES Android 同时播放多个音效的主要内容,如果未能解决你的问题,请参考以下文章
Android : 如何使用 OpenSL ES 更改音乐的播放速率
Android 自定义音频播放器,用 libPd 或 OpenSL ES 或 AudioTrack 替换 MediaPlayer
Android 音视频深入 十三 OpenSL ES 制作音乐播放器,能暂停和调整音量(附源码下载)