从 AKSequencer 中删除速度事件

Deleting tempo events from AKSequencer

我需要从 AKSequencer 实例中删除所有速度事件,但找不到执行此操作的方法。

我尝试使用如下所示的 clearRange() 方法,但我不确定它是否正确,因为它不起作用:

var sequencer = AKSequencer()

// successfully adding a few tempo events with addTempoEventAt(tempo bpm: Double, position: AKDuration)

...

// trying to remove them

let sequenceLength = sequencer.length
sequencer.clearRange(start: AKDuration(beats: 0.0), duration: sequenceLength)

有什么我遗漏的吗?

不幸的是,clearRange() 删除了音符事件和元事件,但正如您所观察到的,它 不会 删除速度事件(下一版本的文档将明确说明这一点- 谢谢你抓住这个)。 AKSequencer 有一个私有的 clearTempoEvents 方法,由 setTempo() 方法内部调用,因此您可以使用 setTempo() 清除所有现有的速度事件。当然,在删除现有的速度事件后,这还将在序列的开头添加一个新的速度事件,并将您作为参数包含的速度。

所以它不会给你一个没有速度事件的序列 - 但是一个序列需要一个速度并且没有速度事件它将默认为 120 - 所以强迫你明确开始速度并不是这么糟糕的事情。无论如何,除非你真的需要绝对没有速度事件,否则 setTempo() 应该可以清除序列中所有现有的速度事件。