ios - 合并多个音频文件以在iOS上实时播放

标签 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设置代码,但是玩了之后,我还无法实现自己的目标。希望,文档似乎有点薄。

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

最佳答案

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

有关更多信息,请参阅Apple的Core Audio文档和指南。

关于ios - 合并多个音频文件以在iOS上实时播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28819864/

相关文章:

objective-c - 从 NSXMLElement 获取属性的对应值

ios - 未调用 MFMailComposeViewController 委托(delegate)方法

objective-c - 使用 NSMetadataQuery 或 MDQuery 设置批处理参数

ios - AVFoundation 加载 Google Drive 视频

ios - 刷新 UIwebview 不晃动?

ios - 当 iOS 上的状态栏高度发生变化时,基于约束的布局不会动画化

objective-c - 如何在 iOS 中屏蔽 UILabel - Objective-C

objective-c - 释放指针会导致程序崩溃,即使未使用该变量也是如此

xcode - Flutter 构建 ios 错误预期标识符 Runner_vers.c 上的 RunnerVersionNumber

arrays - 如何在 Swift 中将字符数组转换为字符串数组