我熟悉AKMusicTrack函数,特别是用于清除给定序列中的音符数据的函数。
我看到clearRange()
将清除开始范围和结束范围之间的音符数据,而clearNote()
将删除该音符值序列中的所有事件。
有人知道清除单个音符的功能吗?像clearSingleNote(noteNumber MIDINoteNumber, position AKDuration, end AKDuration)
这样的东西吗?
答案 0 :(得分:1)
您可以使用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)
在MIDIFileEditAndSync示例项目中,有更多使用getMIDINoteData()
的示例。
答案 1 :(得分:0)
正确的方法:
trackData = trackData.filter {
!($0.noteNumber == 60 && $0.duration == AKDuration(beats: 4.0))
}