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

Posted

技术标签:

【中文标题】结合多个音频文件在 iOS 上实时播放【英文标题】:Combining multiple audio files for real-time playback on iOS 【发布时间】:2015-03-02 21:35:51 【问题描述】:

我正在尝试在我的 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 设置代码,但在使用它之后我无法达到我的期望,文档似乎有点薄。

我是 iOS 音频的初学者,所以任何提示都将不胜感激!

【问题讨论】:

【参考方案1】:

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

更多信息在 Apple 的 Core Audio 文档和指南中。

【讨论】:

以上是关于结合多个音频文件在 iOS 上实时播放的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 上实时录制、修改音高和回放音频

如何在 iOS 4 中在后台播放多个音频文件?

如何在 iOS 中播放多个 html5 音频文件?

使用JavaScript在物联网设备上实现音频播放

在 iOS 中录制视频时播放音频文件

从数据库播放多个音频文件