Четкий диапазон, четкое примечание (AudioKit: функции AKMusicTrack)

Я знаком с функциями AKMusicTrack, в частности с функциями, используемыми для удаления данных заметок из заданной последовательности.

Я вижу, что clearRange() удалит данные заметки между начальным и конечным диапазоном, а clearNote() удалит все события в последовательности этого значения заметки.

Кто-нибудь знает функцию, которая очищает одну заметку? Как в чем-то вроде clearSingleNote(noteNumber MIDINoteNumber, position AKDuration, end AKDuration)?


person JohnOfIreland    schedule 15.01.2019    source источник


Ответы (2)


Вы можете использовать getMIDINoteData(), чтобы получить массив AKMIDINoteData, отфильтровать ненужные ноты, а затем перезаписать музыкальную дорожку, используя replaceMIDINoteData(), с помощью отфильтрованного массива:

// remove a C at timestamp 4.0
var trackData = myTrack.getMIDINoteData()
trackData = trackData.filter { $0.noteNumber =! 60 && 
                               $0.duration =! AKDuration(beats: 4.0) }
myTrack.replaceMIDINoteData(with: trackData)

Есть и другие примеры использования getMIDINoteData() в примерном проекте MIDIFileEditAndSync.

person c_booth    schedule 15.01.2019

Правильно:

trackData = trackData.filter { 
    !($0.noteNumber == 60 && $0.duration == AKDuration(beats: 4.0))
}
person De Zheng    schedule 23.03.2019
comment
Пожалуйста, дайте также некоторые пояснения к вашему коду. - person Partho63; 23.03.2019