我需要从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)
有什么我想念的吗?
答案 0 :(得分:3)
不幸的是,clearRange()
删除了音符事件和元事件,但正如您所观察到的,它确实不删除了速度事件(下一个版本的文档将对此进行明确说明-感谢您的关注这个)。 AKSequencer
有一个专用的clearTempoEvents
方法,该方法由setTempo()
方法在内部调用,因此您可以使用setTempo()
清除所有现有的速度事件。当然,在删除现有的速度事件之后,这还将在序列的开头添加新的速度事件,并将您包括的速度作为参数。
因此,它不会完全为您提供一个没有速度事件的序列-但是一个序列需要一个速度,并且没有速度事件,它将默认设置为120-因此,强迫您明确起始速度不是这样坏事。无论如何,除非您真的需要绝对没有速度事件,否则setTempo()
应该可以清除序列中所有现有的速度事件。