首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓系统下的OpenSL音效混音

安卓系统下的OpenSL音效混音
EN

Stack Overflow用户
提问于 2011-09-12 01:58:44
回答 1查看 2.4K关注 0票数 3

我目前正在通过OpenSL在Android上实现音效混音。我有一个初步的实现,但我遇到了一些问题。

我的实现如下:

1)对于每个声音效果,我创建了几个使用SLDataLocator_AndroidFD数据源的AudioPlayer对象(每个对象对应一个同时发出的声音),而这个数据源又引用了一个OGG文件。例如,如果我有一个快速连续播放的枪声(让我们称之为gun.ogg),我使用大约5个AudioPlayer对象,它们引用相同的gun.ogg音频源和相同的outputmix对象。

2)当我需要播放声音效果时,我搜索我创建的所有AudioPlayer对象,找到一个当前不处于SL_PLAYSTATE_PLAYING状态的对象,并使用它来播放效果。

3)在播放剪辑之前,我使用SLPlayItf::SetPosition查找到它的开头。

到目前为止,这是正常的,但在快速连续播放声音时会出现一些爆裂声。我在Android NDK新闻组上看到,Android上的OpenSL在切换数据源方面有问题。有没有人遇到过这个问题?

我还想知道有没有人看到过或者想出了安卓系统上OpenSL的混音方法。如果是这样,你的方法与我的不同吗?对于爆裂的噪音有什么建议吗?

我已经在互联网上搜索了OpenSL文档和示例代码,但关于混合(只有我已经弄清楚的加载)的内容并不多。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2012-02-08 09:41:08

这可能不是最好的方法(创建许多音频播放器实例)。不幸的是,OpenSL ES的安卓版本(2.3)不支持SLDynamicSourceItf。这将类似于OpenAL的源代码绑定接口。一种方法是创建多个流播放器。然后,您可以搜索当前未播放的流播放器,并开始将您的声音效果从内存中流式传输到它。这不是理想的,但它是可行的。

您可能也不应该使用ogg格式的声音效果。你最好使用WAV (PCM),因为它不需要解码。

Ogg可以很好地播放流媒体背景音乐。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7380209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档