4

我需要从 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)

有什么我想念的吗?

4

1 回答 1

3

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

所以它不会完全给你一个没有节奏事件的序列——但是一个序列需要一个节奏并且没有节奏事件,它会默认为 120——所以强迫你明确说明起始节奏并不是一件坏事。无论如何,除非你真的需要绝对没有速度事件,setTempo()否则应该清除序列中所有现有的速度事件。

于 2018-08-25T22:18:10.543 回答