我熟悉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 { $0.noteNumber =! 60 &&
$0.duration =! AKDuration(beats: 4.0) }
myTrack.replaceMIDINoteData(with: trackData)
在getMIDINoteData()
示例项目中有更多使用MIDIFileEditAndSync的示例。
正确的方法:
trackData = trackData.filter {
!($0.noteNumber == 60 && $0.duration == AKDuration(beats: 4.0))
}