AudioKit 节拍器与时间音调的音频循环同步

标签 audiokit

我正在制作一个使用节拍器播放同步音频循环的应用程序。例如,我可能有 3 个这样的文件:

  • bass_60bpm.m4a
  • drums_60bpm.m4a
  • guitar_60bpm.m4a

还有节拍器声音 tick.m4a,我用 AKSamplerMetronome 播放它。

我需要以任意速度播放它们,因此我在 AKAudioFile 上使用 AKTimePitcher(因此以 90bpm 播放,我会播放 bass_60bpm。 m4a 1.5x)。

这几乎可以工作,但是在 3-5 个循环之后,节拍器与音频循环不同步。我想我明白为什么会发生这种情况(audio_sample_length * float_point_number 不等于 AKSamplerMetronome 的节奏计算),但我不知道如何解决它。

我怀疑我需要做的是手动重新实现部分或全部 AKSamplerMetronome,但根据 AKTimePitcher 的输出播放节拍器滴答声,但我不能从 API、文档和示例中拼凑足够的信息来实现这一目标。

最佳答案

另一种方法可能是使用 AKSequencer 而不是 AKSamplerMetronome。音序器轨道的 MIDI 输出可以发送到 AKCallbackInstrument,音序器的事件可以获取回调函数来触发时间拉伸(stretch)样本和节拍器刻度(作为奖励,您还可以从那里触发同步 UI 事件) 。这将保证它们保持同步。

Apple 的 MusicSequence(AKSequencer 在后台使用的就是它)在调用播放后立即计时有点不稳定,但在那之后就非常稳定了。如果您在其循环点之前启动音序器(即,如果您有一个 1 小节循环,请在第一个小节结束之前的十六分之一音符处启动它),那么您可以在实际循环开始之前通过该片状声音。

关于AudioKit 节拍器与时间音调的音频循环同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51228198/

相关文章:

swift - 我无法在 swift Playground 文件中导入 AudioKit 或 AudioKitPlaygrounds

ios - 管理 AudioKit 生命周期的正确方法是什么?

swift - 在 AKNodeOutputPlot (AudioKit) 上选择波形

ios - AVAudioRecorder、AudioKit 问题、iOS 13.1.2

ios - AudioKit 崩溃

ios - AudioKit - 无法让 AKClipRecorder 工作

ios - Swift 4.0编译的模块无法导入Swift 3.2.2 : AudioKit

ios - Xcode 11.2.1 错误 - Swift 5.1.2 编译器无法导入使用 Swift 5.1 编译的模块

swift - 当我尝试在 AudioKit 播放器之间切换时遇到问题

swift - AudioKit:在 Swift 框架中嵌入 AudioKit