结合多个音频文件,在iOS上实时播放

时间:2015-03-02 21:35:52

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

我试图在我的iOS应用程序中构建一个功能,它将需要四个.WAV音频文件,将它们组合并实时播放。基本上我只想设置某种回调循环,将数据提供给输出音频缓冲区。我已经在CoreVideo上做了类似的事情,我在其中设置了一个合成器,然后得到一个startVideoCompositionRequest回调,它会给我一个框架,我可以操作然后输出到渲染器......我希望有类似的方式操纵音频流。

我试图做这样的事情:

Output Sample = A*sampleA + B*sampleB + C*sampleC + D*sampleD

其中A,B,C和D只是可以通过面向用户的控件实时更新的缩放系数。我一直在寻找解决方案,似乎我应该能够通过Core Audio实现这一目标,但我还没有找到许多做类似事情的例子,而且我发现的任何例子都是多年并且充斥着不赞成的电话。

我已经查看了开源iOS音频库Novocaine(https://github.com/alexbw/novocaine),它声称抽象了很多低级CoreAudio设置代码,但在玩完它之后我就没有&# 39;能够达到我所希望的目标,文档似乎有点薄。

我是iOS初学者,所以任何提示都会受到赞赏!

1 个答案:

答案 0 :(得分:0)

您可以使用AVAssetReader API从所有4个.wav文件中提取样本,计算结果样本值并将结果样本放在循环缓冲区中。然后将RemoteIO Audio Unit回调拉出循环缓冲区以进行播放。或者,您可以在输出音频单元前使用kAudioUnitType_Mixer节点音频单元,并从.wav资产样本中提供混音器回调。然后让混音器单元使用缩放系数进行所有数学运算。

Apple的核心音频文档和指南中提供了更多信息。