【问题标题】:iOS: Audio Unit RemoteIO AudioBuffer manipulation (i.e. sound effects from microphone)iOS:Audio Unit RemoteIO AudioBuffer 操作(即来自麦克风的音效)
【发布时间】:2010-06-25 01:14:57
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: iphone ipad core-audio signal-processing ios4


    【解决方案1】:

    第一个问题的答案是肯定的。一般都是这样处理的。

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

    您可以查看其他代码,nick collins 有一个基本应用程序,用于从麦克风和扬声器中获取声音,中间处理:http://www.cogs.susx.ac.uk/users/nc81/code.html。他还有一些代码可以从 iPod 音轨中获取样本缓冲区,这可能对您有用。

    【讨论】:

    【解决方案2】:

    确实,您不能将自己的自定义 AudioUnit 添加到 iPhone。

    它的工作方式是这样的:扬声器通过系统驱动数据的拉链。像您已经完成的那样,向 ioUnit 添加一个渲染回调。

    只要扬声器(总线#0)饿了,回调就会运行,您的工作是在扬声器提供的缓冲区中填充它请求的尽可能多的样本。提供的缓冲区大小将是 2 的幂,尽可能接近您在配置 AudioSession 时指定的首选 IO 缓冲区持续时间。

    最简单的方法是获取您提供的 AudioBufferList 并将其传递给麦克风(总线 #1)上的 AudioUnitRender。在使用 Render() 填充缓冲区之后,但在回调返回之前,您可以以任何您喜欢的方式操作数据。例如,AurioTouch 将其归零以使其静音。

    要记住的重要一点是,扬声器将从它传递给您的实际数据缓冲区中读取。它不会查看 AudioBufferList 描述符并检查您是否指向另一个数据缓冲区。如果您开始更改给定的 AudioBufferList,您将遇到问题。充其量,你会被忽略。在最坏的情况下,您会遇到内存管理问题。

    如果您不想只在 ioData 缓冲区中工作,那么您可以使用自己的 AudioBufferList,以您喜欢的任何方式分配任何大小,然后让麦克风 Render() 进入该缓冲区。然后,您可以进行所有您喜欢的操作,只要最后将结果复制到回调提供的缓冲区中(即 ioData->mBuffers[0].mData,就像调用回调时一样)。

    【讨论】:

      猜你喜欢
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 2020-07-06
      • 2012-01-22
      • 2011-08-09
      • 1970-01-01
      相关资源
      最近更新 更多