Удаление темповых событий из 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 ответ
К несчастью clearRange()
удаляет события заметок и мета-события, но, как вы заметили, он не удаляет события темпа (следующая версия документации сделает это явным - спасибо, что поймали это). AKSequencer
имеет частный clearTempoEvents
метод вызывается внутренне setTempo()
метод, так что вы можете использовать setTempo()
очистить все существующие темповые события. Конечно, после удаления существующих событий темпа это также добавит новое событие темпа в начале последовательности с темпом, который вы включаете в качестве аргумента.
Таким образом, он точно не даст вам последовательность без событий темпа, но для последовательности нужен темп, и без событий темпа по умолчанию он будет равен 120, поэтому принуждение вас к явному определению начального темпа не так уж плохо. Во всяком случае, если вам действительно не нужно, чтобы не было абсолютно никаких темповых событий, setTempo()
должен выполнить трюк для очистки всех существующих событий темпа в последовательности.