我有一个音频应用程序,其中所有声音生成工作都是通过纯数据(使用libpd)完成的。
我在swift中编写了一个特殊的音序器,它控制多个序列的开始/停止播放,由合成引擎在纯数据中播放。
到目前为止,我完全避免在我的应用程序的任何方面使用Core Audio或AVFoundation,因为我对它们一无所知,而且它们似乎都需要C或Objective C编码,我几乎一无所知。< / p>
然而,我从之前的q&amp; a中被告知,我需要使用Core Audio或AVFoundation来获得准确的计时。没有它,我已经尝试了其他一切,时间完全搞砸了(迟钝,紧张)。
关于Core Audio的所有教程和书籍对我来说都非常广泛和深刻。如果我从其中一个框架中获得的所有内容都是我的音序器的准确时间,那么你如何建议我作为Core Audio和Objective-C的新手,但其他人拥有95%完成的音频应用?
答案 0 :(得分:4)
如果您的音序器是Swift代码,它依赖于即时调用来推送音频,那么它将无法以良好的时序精度工作。例如你无法得到你需要的时间。
Core Audio使用实时拉模型(不包括任何有趣复杂性的Swift代码)。 AVFoundation可能需要您提前创建音频,并安排缓冲区。对于这两种解决方案中的一种,iOS应用程序需要从头开始设计。
补充:如果您现有的代码可以提前生成音频样本,足以统计覆盖使用抖动的OS计时器,您可以安排此预生成的输出在几毫秒之后播放(例如,当拉到正确的采样时间)。
答案 1 :(得分:1)
AudioKit是一个开源音频框架,可让您快速访问Core Audio服务。它包括一个基于Core Audio的音序器,并且有许多示例代码以Swift Playgrounds的形式提供。
AudioKit AKSequencer类具有您需要的传输控件。您可以以编程方式将MIDI事件添加到音序器实例,或从文件中读取它们。然后,您可以将音序器连接到AKCallbackInstrument,后者可以在接收到MIDI noteOn和noteOff命令后执行代码,这可能是触发生成的音频的一种方式。