iOS:音频单元RemoteIO AudioBuffer操作(即麦克风的声音效果)

tom*_*tom 6 iphone signal-processing core-audio ipad ios4

我一直在玩Apple的aurioTouch演示,这是他们的音频单元教程的示例代码.该应用程序允许从麦克风同时输入/输出.发言者.它还呈现来自麦克风的输入声音的立体图.

在这个低级进程的真正高级别,示例代码定义了一个AudioComponent(在这种情况下,RemoteIO允许同时输入/输出),并且该音频单元有一个渲染回调.在回调中,他们根据来自麦克风的AudioBuffer声音数据进行一些音频过滤(DC拒绝过滤器)和立体图的可视化.

我的最终目标是根据麦克风的输入创建我自己的自定义声音失真音频单元.我认为基于音频单元教程的正确方法是制作第二个音频单元并将它们与音频处理图连接起来.但是,我已经读过iOS不允许您注册自己的自定义音频单元.我的问题是:

  1. 我可以对来自remoteIO音频单元的渲染回调中可访问的AudioBufferList进行直接操作(因为他们似乎已经这样做并在其上应用音频过滤器)并在那里创建我自己的自定义声音失真?
  2. 我已经尝试将AudioBufferList数据分配给一个常量(我看到它从样本运行和记录AudioBufferList中看到的值),但它似乎什么都不做.

小智 5

你的第一个问题的答案是肯定的。一般情况下就是这样完成的。

我相信您需要直接操作指针中的数据,而不是重新分配。您可能想查看 openframeworks 中处理分配缓冲区并将其传递给回调的代码: https: //github.com/openframeworks/openFrameworks/blob/master/addons/ofxiPhone/src/sound/ofxiPhoneSoundStream.mm

您还可以查看其他代码,尼克·柯林斯有一个基本应用程序,用于从麦克风和扬声器中获取声音,并在其间进行处理:http ://www.cogs.susx.ac.uk/users/nc81 /code.html。他还提供了从 iPod 曲目中获取样本缓冲区的代码,这可能对您有用。