swift - 如何为我的音频应用程序获得可靠的时序?
问题描述
我有一个音频应用程序,其中所有的声音生成工作都是由纯数据(使用 libpd)完成的。
我用 swift 编写了一个特殊的音序器,它控制多个序列的开始/停止播放,由合成引擎以纯数据形式播放。
到目前为止,我完全避免在我的应用程序的任何方面使用 Core Audio 或 AVFoundation,因为我对它们一无所知,而且它们似乎都需要 C 或 Objective C 编码,而我几乎一无所知。
但是,我在这里之前的问答中被告知,我需要使用 Core Audio 或 AVFoundation 来获得准确的时间。没有它,我已经尝试了其他所有方法,而且时间完全混乱(迟钝,紧张)。
所有关于 Core Audio 的教程和书籍对我来说似乎都非常广泛和深入。如果我需要从其中一个框架中获得的只是我的音序器的准确时序,那么作为一个完全是 Core Audio 和 Objective-C 的新手,但拥有 95% 完成的音频应用程序的人,你如何建议我实现这一点?
解决方案
如果您的音序器是 Swift 代码,它依赖于即时调用来推送音频,那么它将无法以良好的计时精度工作。例如,您无法获得所需的时间。
Core Audio 使用实时拉取模型(不包括任何有趣复杂的 Swift 代码)。AVFoundation 可能需要您提前创建音频并安排缓冲区。iOS 应用程序几乎需要从头开始设计,以适应这两种解决方案中的一种。
补充:如果您现有的代码可以提前一点生成音频样本,足以使用抖动的操作系统计时器在统计上覆盖,您可以安排此预生成的输出在几毫秒后播放(例如,当在正确的采样时间拉)。
推荐阅读
- javascript - 使用 http get 请求获取 javascript 对象的方法?
- javascript - 为什么可扩展列表未显示在选项卡式活动中?
- javascript - bot.sendMessage 不是函数
- mysql - 选择语句:选择引用先前的选择查询
- git - git pull 无密码
- date - 更好地控制 Dialogflow 的日期期间
- javascript - 如何禁用加载页面的具体功能?
- css - “nav nav-pills nav-justified”类不堆叠移动视图的选项卡
- php - 编写 PHP 代码以打印以下数字模式
- angular - 有没有办法清除 rxjs 超时,以便在允许用户再次登录而不会超时后,我可以使用 retrywhen 重试 http 请求?