首页 > 解决方案 > AudioKit 节拍器与时间音调的音频循环同步

问题描述

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

还有一个节拍器的声音tick.m4a,我用它来演奏AKSamplerMetronome

我需要以任意速度播放它们,所以我AKTimePitcherAKAudioFiles 上使用(所以以 90bpm 播放,我会bass_60bpm.m4a以 1.5x 播放)。

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

我怀疑我需要做的是手动重新实现部分或全部AKSamplerMetronome,但根据AKTimePitcher的输出播放节拍器刻度,但我无法从 API、文档和示例中拼凑足够的信息来实现它。

标签: audiokit

解决方案


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

Apple 的 MusicSequence 是 AKSequencer 在引擎盖下使用的,它在你调用 play 后立即显示它的时间有点不稳定,但在那之后它就相当稳定了。如果您在它的循环点之前启动音序器(即,如果您有一个 1 小节的循环,则在第一个小节结束之前启动它的十六分之一音符),那么您可以在实际循环开始之前通过该片状。


推荐阅读