我目前正在通过 OpenSL 在 Android 上实现音效混合。我有一个初始实施,但我遇到了一些问题。
我的实现如下:
1) 对于每个音效,我创建了几个 AudioPlayer 对象(每个同步声音一个),这些对象使用一个 SLDataLocator_AndroidFD 数据源,该数据源又引用一个 OGG 文件。例如,如果我有一个快速连续播放的开枪声音(我们称之为 gun.ogg),我使用大约 5 个 AudioPlayer 对象,它们引用相同的 gun.ogg 音频源和相同的 outputmix 对象。
2) 当我需要播放该音效时,我会搜索我创建的所有 AudioPlayer 对象,并找到一个当前不处于 SL_PLAYSTATE_PLAYING 状态的对象并使用它来播放效果。
3) 在播放剪辑之前,我使用 SLPlayItf::SetPosition 寻找它的开头。
到目前为止,这一切正常,但是在快速连续播放声音时会出现一些噼啪声。我在 Android NDK 新闻组上读到,Android 上的 OpenSL 在切换数据源方面存在问题。有没有人遇到过这个问题?
我还想知道是否有其他人看到或想出了在 Android 上用于 OpenSL 的混音方法。如果是这样,您的方法与我的不同吗?关于噼啪声有什么建议吗?
我已经在 Internet 上搜索 OpenSL 文档和示例代码,但是关于混音的内容并不多(仅加载我已经弄清楚的内容)。任何帮助将不胜感激。