Удаление событий темпа из AKSequencer - PullRequest
0 голосов
/ 25 августа 2018

Мне нужно удалить все события темпа из экземпляра 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 голосов
/ 26 августа 2018

К сожалению, clearRange() удаляет события заметок и мета-события, но, как вы заметили, не удаляет события темпа (следующая версия документации сделает это явным - спасибо, что поймали это). AKSequencer имеет закрытый метод clearTempoEvents, вызываемый внутри с помощью метода setTempo(), поэтому вы можете использовать setTempo() для очистки всех существующих событий темпа. Конечно, после удаления существующих событий темпа это также добавит новое событие темпа в начале последовательности с темпом, который вы включите в качестве аргумента.

Таким образом, он точно не даст вам последовательность без событий темпа, но для последовательности нужен темп, и без событий темпа по умолчанию он будет равен 120, так что заставлять вас явно указывать начальный темп не так уж и сложно. плохо. В любом случае, если только вам действительно не нужно, чтобы события темпа не были абсолютно невозможны, setTempo() должен выполнить трюк для очистки всех существующих событий темпа в последовательности.

...