使用iOS上的音频单元混合多个信号

ano*_*non 4 audio signal-processing mixing audiounit ios

我正在iPad上为合成器制作一个控制器,我有4或5个信号要混合并发送到remoteIO渲染回调.现在我有两个选择:

我可以使用多声道混音器单元,但我不知道它是如何在内部工作的.它只是简单地将缓冲区加在一起并除以缓冲区的数量吗?因为这意味着每个的体积将大大减少.

我正在阅读http://www.vttoth.com/digimix.htmhttp://atastypixel.com/blog/how-to-mix-audio-samples-properly-on-ios/,以正确的方式混合信号和我现在正考虑在remoteIO回调中手动进行混音.

有什么建议?

Har*_*ngh 9

正如我最近经历过这个问题并且无论如何都有意义,我已经写了一篇关于在渲染回调中手动混合/求和音频时有三个选项的详细帖子:

在iOS中混合音频而不使用剪辑:限制器和其他技术

基本上,您引用的博客文章中概述了第一种方法.然而,如A Tasty Pixel的帖子所述,这种"平均"技术引入了谐波失真.显然,它在某些应用中并不明显,例如当音源是全曲目或基于噪音的打击乐时(例如军鼓).根据A Tasty Pixel的说法,专业级音频工具Loopy app成功地使用了这种技术.

第二个选项,如果您有自然声音和/或高复音音乐可能更好,只需通过将音频数据预先乘以0 <A <1来缩小音量.这可能听起来很滑稽,但我相信由于我的博客文章中概述的原因,OpenAL根据您分配的来源做了类似的事情.比例因子不必像你想象的那么低.我的应用程序Sound Wand将样本标准化为满量程,最大复数为20,我使用的预标度值仅为1/3左右(不是1/20).在你的乐器中,上部是一个非常好的动态范围 - 即柔和的音符是安静的,而硬音符或者它们中的很多音符都要大得多.这通常被认为是质量工具的标志之一.缺点是iPhone/iPad的内置扬声器有时会有点安静,动态范围对于廉价的外置放大器来说太过分了.

第三种选择确实是砖墙限制器,但没有什么简单的.常规砖墙限制器不会阻止削波.你需要一个先行的砖墙限制器,并且这些代码并不容易获得.你需要超前的原因是限制器需要时间来平滑地减小音量,直到剪辑首次发生.当波形开始剪辑时,"立即减小音量"是不够的,因为减小音量使其恢复到1.0 与剪辑为你做的完全相同!其结果是,非限先行只会删除一半剪辑(和只是因为发布时间).

Brickwall限制没有

(Brickwall限制没有"前瞻"踢得太晚,只能阻止一半的剪辑)

前瞻限制器也有缺点.它们引入了自己的谐波失真,尽管比削波要小得多.更糟糕的是,它们通过超前时间增加了延迟,即用户动作和音频结果之间的时间.这意味着响应速度较慢的应用.正如您可能已经猜到的那样,更长的前瞻意味着更透明的结果(更少的失真),因此需要权衡.我仍然相信这是可行的方法,我在帖子的底部略微概述了它.

关于使用AU混音器与在remoteIO中手动混音的最后一个注意事项:如果我的频道像音频"音轨"那样我通常更倾向于使用AU而我希望用户控制通常的音量/声像或者如果你有一个带有几个频道的游戏,也许是为了背景/前景/等.如果你有很多声音,比如键盘上的音符,或者如果你想要对定义进行定制控制(例如不同的平移定律,关于哪些声音开/关的特殊规则等),你可能最好手动操作.如果你只是总结几个音轨而不是任何一个选项都可以.如果你选择上面的选项2,那么一旦你进入Accelerate Framework的vDSP功能,手动执行它实际上只需要几行代码.