从AKSequencer删除速度事件

时间:2018-08-25 17:44:18

标签: audiokit 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)

有什么我想念的吗?

1 个答案:

答案 0 :(得分:3)

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

因此,它不会完全为您提供一个没有速度事件的序列-但是一个序列需要一个速度,并且没有速度事件,它将默认设置为120-因此,强迫您明确起始速度不是这样坏事。无论如何,除非您真的需要绝对没有速度事件,否则setTempo()应该可以清除序列中所有现有的速度事件。