首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在iOS中使用OpenAL混响

在iOS中使用OpenAL混响
EN

Stack Overflow用户
提问于 2012-10-08 21:28:01
回答 1查看 2.5K关注 0票数 0

从iOS 5开始,我们在OpenAL中支持混响效果,但我找不到任何使用此功能的好例子。我只找到了一些ObjectAL源代码的链接,但它太复杂了,无法理解混响效果的用法。那么,如何使用OpenAL为iOS应用添加混响效果呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-09 05:30:17

ObjectAL代码库变得相当复杂,但在OpenAL方面,它实际上只是C应用编程接口的一个大包装器。

https://github.com/kstenerud/ObjectAL-for-iPhone/blob/master/ObjectAL/ObjectAL/OpenAL/ALListener.m#L194

https://github.com/kstenerud/ObjectAL-for-iPhone/blob/master/ObjectAL/ObjectAL/OpenAL/ALSource.m#L808

如果您想自己实现它,首先需要绑定扩展函数,就像我在+ALWrapper initialize:https://github.com/kstenerud/ObjectAL-for-iPhone/blob/master/ObjectAL/ObjectAL/OpenAL/ALWrapper.m#L1363中所做的那样

在核心部分,所有混响功能都是通过调用alcASASetListener()和alcASASetSource()来完成的。如果你在ALWrapper中搜索这些函数,你会发现它只是在Objective-C中包装调用(加上一些错误处理),而ALSource & ALListener正在包装它。

代码语言:javascript
复制
alcASASetSource(ALC_ASA_REVERB_SEND_LEVEL, sourceID, &value, sizeof(value));

因此,代码将始终遵循以下两个路径之一:

对alcASASetSource()

  • ALListener的
  • ALSource -> ALWrapper ->原始C调用对alcASASetListener()

的原始C调用

全局控件(通过监听程序控制)包括:

  • 打开/关闭混响(globally)
  • Global混响级别(混响效果有多大)
  • 房间类型(提供各种预置,例如增益、带宽、频率(基本滤波,使用与使用物理均衡器相同的方式-您可能不会使用这些,如果有使用的话)

混响发送级别(混响对此混响遮挡的影响程度(模拟收听者和源之间的物理对象,声音可以部分穿过,如门或薄墙)

(模拟收听者和源之间的不传导声音的物理对象,以便只能听到周围的声音,如混凝土柱子)

我还在这里写了一个小的演示:https://github.com/kstenerud/ObjectAL-for-iPhone/blob/master/ObjectALDemo/Demos/ReverbDemo.m

据我所知,Apple还没有发布太多的文档,所以最好的办法是克隆repo,构建演示,并尝试使用API,直到您对它们如何协同工作有所了解。然后,将您使用ObjectAL做的事情转换成对alcASASetListener()和朋友的实际调用,但这些应该是非常直接的转换,因为它最终只是包装器代码。

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

https://stackoverflow.com/questions/12782758

复制
相关文章

相似问题

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