iOS上的自定义EQ AudioUnit

时间:2011-03-16 02:11:32

标签: objective-c ios audio core-audio audiounit

唯一影响iOS上的AudioUnit是“iTunes EQ”,它只允许您使用EQ预设。我想在我的音频图中使用自定义的eq

我遇到了关于这个主题的this question,并看到了一个答案,建议在渲染回调中使用this DSP code。这看起来很有希望,人们似乎在各种平台上有效地使用它。然而,即使平坦的eq,我的实施也有很多噪音。

这是我在Apple的“MixerHost”示例应用程序的“MixerHostAudio”类中的20行集成(一次性提交):

https://github.com/tassock/mixerhost/commit/4b8b87028bfffe352ed67609f747858059a3e89b

关于如何让这个工作的任何想法?用于集成EQ的任何其他策略?

编辑:这是我遇到的失真的一个例子(使用eq flat): http://www.youtube.com/watch?v=W_6JaNUvUjA

2 个答案:

答案 0 :(得分:0)

EQ3Band.c的代码中,使用滤波器系数而不进行初始化。 init_3band_state方法仅初始化增益和频率,但系数本身 - es->f1p0等未初始化,因此包含一些垃圾值。这可能是输出不良的原因。

答案 1 :(得分:0)

这个代码在某种程度上似乎是错误的。

数字滤波器通常由滤波器系数表示,常数,滤波器内部状态历史记录(因为在大多数情况下,输出取决于历史)和滤波器拓扑,这是用于计算给定输入和滤波器(coeffs +状态历史)的输出的算法。在大多数情况下,当然,在过滤音频数据时,如果您将0输入到输入,您希望在输出处获得0。

您链接的代码中的问题:

  • 每次调用处理方法时,滤镜系数更改

      

    es-> f1p0 + =(es-> lf *(sample-es-> f1p0))+ vsa;

  • 输入样本通常乘以滤波器系数,而不是添加到它们。它没有任何物理意义 - 样本和滤波器系数甚至没有相同的物理单位。

  • 如果你输入0,你输出的输入不会是0,只是一些没有任何意义的值。

我建议你寻找另一个代码 - 另一个选择是调试它,它会更难。

此外,您还可以阅读有关数字滤镜的内容:

http://en.wikipedia.org/wiki/Digital_filter

https://ccrma.stanford.edu/~jos/filters/