范围清晰,音符清晰(AudioKit:AKMusicTrack 功能)

Clear range, clear note(AudioKit : AKMusicTrack functions)

我正在熟悉 AKMusicTrack 函数,特别是用于从给定序列中清除音符数据的函数。

我可以看到 clearRange() 将清除开始和结束范围之间的音符数据,clearNote() 将删除该音符值序列中的所有事件。

有谁知道可以清除单个音符的功能吗?比如 clearSingleNote(noteNumber MIDINoteNumber, position AKDuration, end AKDuration)?

您可以使用 getMIDINoteData() 获取 AKMIDINoteData 的数组,过滤掉您不想要的音符,然后使用 replaceMIDINoteData() 和您过滤后的数组覆盖音乐曲目:

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

MIDIFileEditAndSync 示例项目中有更多使用 getMIDINoteData() 的示例。

正确的方法:

trackData = trackData.filter { 
    !([=10=].noteNumber == 60 && [=10=].duration == AKDuration(beats: 4.0))
}