Чтобы узнать, что на самом деле здесь происходит, вы можете регистрировать содержимое треков после каждого удаления. Например:
for (i, track) in sequencer.tracks.enumerated() {
print("track: \(i)")
print(track.getMIDINoteData())
}
Одна из возможностей заключается в том, что при удалении дорожки 0 сами дорожки переиндексируются, что означает, что второй вызов удаления не будет иметь эффекта.
Возможно, более безопасный и предсказуемый способ справиться с этим - использовать track.clear()
вместо delete
. Вы можете создать треки, которые вам понадобятся в начале, и назначить их вывод на AKCallbackInstrument
только один раз на этапе настройки. Затем вы можете безопасно добавлять заметки к трекам или удалять события из треков по мере необходимости. Опять же, регистрация содержимого дорожки с помощью track.getMIDINoteData()
будет полезна для отладки.
Кроме того, я бы не рекомендовал останавливать и запускать AudioKit больше, чем нужно. Запустите AudioKit при инициализации приложения и оставьте его включенным, если у вас нет веских причин для его остановки.