【问题标题】:How Do I Get Reliable Timing for my Audio App?如何为我的音频应用程序获得可靠的时序?
【发布时间】:2018-05-03 20:38:16
【问题描述】:

我有一个音频应用程序,其中所有的声音生成工作都是由纯数据完成的(使用 libpd)。

我用 swift 编写了一个特殊的音序器,它控制多个序列的开始/停止播放,由合成引擎以纯数据形式播放。

到目前为止,我完全避免在我的应用程序的任何方面使用 Core Audio 或 AVFoundation,因为我对它们一无所知,而且它们似乎都需要 C 或 Objective C 编码,而我几乎一无所知。

但是,我从之前的问答中被告知,我需要使用 Core Audio 或 AVFoundation 来获得准确的计时。没有它,我已经尝试了其他所有方法,但时间完全一团糟(迟钝,紧张)。

所有关于 Core Audio 的教程和书籍对我来说似乎都非常广泛和深入。如果我需要从其中一个框架中获得的只是我的音序器的准确时序,那么作为一个完全是 Core Audio 和 Objective-C 的新手,但拥有 95% 完成的音频应用程序的人,你如何建议我实现这一点?

【问题讨论】:

  • 定时器具体有什么用途?

标签: swift audio avfoundation core-audio libpd


【解决方案1】:

如果您的音序器是依赖于即时调用来推送音频的 Swift 代码,那么它将无法以良好的计时精度工作。例如您无法获得所需的时间。

Core Audio 使用实时拉取模型(不包括任何有趣复杂的 Swift 代码)。 AVFoundation 可能需要您提前创建音频并安排缓冲区。 iOS 应用几乎需要从头开始针对这两种解决方案之一进行设计。

添加:如果您现有的代码可以提前一点生成音频样本,足以使用抖动的操作系统计时器在统计上覆盖,您可以安排此预生成的输出在几毫秒后播放(例如,当在正确的采样时间)。

【讨论】:

  • 感谢您的回答!我只是想知道,你认为是否可以使用 Core Audio 来生成一个精确的时钟或音序器,然后可以用 midi 触发我的纯数据补丁(通过 libpd)?
  • 此外,由于我的应用程序已经完成了 95% 并且我花了一年的时间在纯数据中对它的综合方面进行编程,对于如何解决这个时序问题,您有什么一般性建议吗? ?
  • 《Learning Core Audio》一书中是否有专门针对计时的章节?或任何您可以指导我的网络教程或 SO Q&A?
  • 如果您的 PD 代码可以使用坏/抖动计时器提前足够多地生成音频,请参阅更新
【解决方案2】:

AudioKit 是一个开源音频框架,提供对 Core Audio 服务的 Swift 访问。它包括一个基于 Core Audio 的音序器,并且有大量以 Swift Playgrounds 形式提供的示例代码。

AudioKit AKSequencer 类具有您需要的传输控件。您可以以编程方式将 MIDI 事件添加到您的音序器实例,或从文件中读取它们。然后,您可以将您的音序器连接到 AKCallbackInstrument,它可以在接收到 MIDI noteOn 和 noteOff 命令时执行代码,这可能是触发您生成的音频的一种方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多