从 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()
应该可以清除序列中所有现有的速度事件。
我需要从 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()
应该可以清除序列中所有现有的速度事件。