As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center作为指导。
7年前关闭。
从iOS 5开始,我们在OpenAL中支持混响效果,但是我找不到使用此功能的良好示例。我仅找到一些与ObjectAL源代码的链接,但是它太复杂了,无法理解混响效果的用法。
那么,如何使用OpenAL向iOS应用添加混响效果?
因此,代码将始终遵循以下两个路径之一:
ALSource-> ALWrapper->对alcASASetSource()的Raw C调用
ALListener-> ALWrapper->对alcASASetListener()的原始C调用
全局控件(通过侦听器控制)是:
全局打开/关闭混响
全局混响水平(混响效果有多响)
房间类型(各种预设可用,例如ALC_ASA_REVERB_ROOM_TYPE_Cathedral)
均衡器增益,带宽,频率(基本滤波,使用的方式与您使用物理均衡器的方式相同-可能根本不会使用太多)
本地控件(通过源进行控制)是:
混响发送电平(多少混响会影响此信号源)
混响闭塞(模拟听者和声源之间的物理对象,声音可以部分通过,例如门或薄壁)
混响障碍(在听众和声源之间模拟不传导声音的物理对象,这样您只能听到围绕它的声音,例如混凝土柱)
我还在这里写了一个小演示:
https://github.com/kstenerud/ObjectAL-for-iPhone/blob/master/ObjectALDemo/Demos/ReverbDemo.m
据我所知,Apple并没有发布太多文档,所以最好的选择是克隆存储库,构建演示并使用API,直到您了解它们如何协同工作为止。然后,将将使用ObjectAL所做的工作转换成对alcASASetListener()和朋友的实际调用即可,但是这些应该是非常直接的转换,因为最后只是包装代码。
7年前关闭。
从iOS 5开始,我们在OpenAL中支持混响效果,但是我找不到使用此功能的良好示例。我仅找到一些与ObjectAL源代码的链接,但是它太复杂了,无法理解混响效果的用法。
那么,如何使用OpenAL向iOS应用添加混响效果?
最佳答案
ObjectAL代码库已经变得相当复杂,但是在OpenAL方面,实际上大部分时间只是C API的一个大包装。混响的主要Objective-C API入口点是:
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则将其包装。在最低级别,它只是这些调用中的一堆:
alcASASetSource(ALC_ASA_REVERB_SEND_LEVEL, sourceID, &value, sizeof(value));
因此,代码将始终遵循以下两个路径之一:
ALSource-> ALWrapper->对alcASASetSource()的Raw C调用
ALListener-> ALWrapper->对alcASASetListener()的原始C调用
全局控件(通过侦听器控制)是:
全局打开/关闭混响
全局混响水平(混响效果有多响)
房间类型(各种预设可用,例如ALC_ASA_REVERB_ROOM_TYPE_Cathedral)
均衡器增益,带宽,频率(基本滤波,使用的方式与您使用物理均衡器的方式相同-可能根本不会使用太多)
本地控件(通过源进行控制)是:
混响发送电平(多少混响会影响此信号源)
混响闭塞(模拟听者和声源之间的物理对象,声音可以部分通过,例如门或薄壁)
混响障碍(在听众和声源之间模拟不传导声音的物理对象,这样您只能听到围绕它的声音,例如混凝土柱)
我还在这里写了一个小演示:
https://github.com/kstenerud/ObjectAL-for-iPhone/blob/master/ObjectALDemo/Demos/ReverbDemo.m
据我所知,Apple并没有发布太多文档,所以最好的选择是克隆存储库,构建演示并使用API,直到您了解它们如何协同工作为止。然后,将将使用ObjectAL所做的工作转换成对alcASASetListener()和朋友的实际调用即可,但是这些应该是非常直接的转换,因为最后只是包装代码。
关于ios - 在iOS中使用OpenAL进行混响,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12782758/
10-10 20:38