当我需要自定义音频效果时,我是不是需要处理音频单元,或者我可以依赖音频队列服务?

Posted

技术标签:

【中文标题】当我需要自定义音频效果时,我是不是需要处理音频单元,或者我可以依赖音频队列服务?【英文标题】:Do I need to deal with Audio Units when I need custom audio effects or can I rely on Audio Queue Services?当我需要自定义音频效果时,我是否需要处理音频单元,或者我可以依赖音频队列服务? 【发布时间】:2012-01-20 16:24:27 【问题描述】:

据我了解,音频队列服务是比使用音频单元的音频单元更高级别的 API。 OpenAL 也使用音频单元。所以 Audio Units 是 ios 中最底层的音频 API。

我需要录制声音,然后将自定义过滤器应用于音频流并播放。音频队列服务似乎很适合录制,也可以用来播放。但我仍然不确定他们是否允许将自己的算法应用于音频流,就像 AURemoteIO 音频单元一样。

【问题讨论】:

【参考方案1】:

根据我个人的(有时是痛苦的)经验,我会说将 AudioQueue 用于流式应用程序。对于其他任何事情,请使用 AudioUnit。后者可能较低级别,但我没有看到复杂性有太大差异。

说实话,AudioUnit 似乎更易于使用。

理论上,使用 AudioUnit,您应该能够使用其他插件来应用效果。然而,直到 iOS 5 AURemoteIO 是唯一可用的 AudioUnit。显然,iOS 5 的功能更多。我还没有机会检查。

如果您通过对缓冲区运行算法手动执行此操作,您应该能够找到相当多的开源 DSP 代码。还有商业应用程序。一个非常好的库是用于音高转换和时间拉伸的 Dirac DSP 库。

这是一个关于在回答其他问题时使用 AURemoteIO 的精彩教程:

Stopping and Quickly Replaying an AudioQueue

【讨论】:

+1。我一直很高兴地使用 AudioUnit。完成样板 AU 设置代码后,您无需再查看它。几乎所有事情都发生在回调方法中,完全在您的控制之下。【参考方案2】:

如果您录制并保存未压缩的音频,您可以在不使用任何音频 API 的情况下将自己的自定义音频效果直接应用于捕获的音频缓冲区或文件。然后使用任何 iOS 音频 API 播放结果。

【讨论】:

以上是关于当我需要自定义音频效果时,我是不是需要处理音频单元,或者我可以依赖音频队列服务?的主要内容,如果未能解决你的问题,请参考以下文章

音频单元主机需要做啥才能使用非 Apple 音频单元?

vue3 自定义 audio音频播放效果

带有自定义音频会话的 IOS 系统声音

Core Audio(音频单元)音频会话和 MPVolumeView

iOS:啥是音频单元? [关闭]

音频单元从麦克风捕获声音,添加混响,然后发送到扬声器