范围清晰,音符清晰(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))
}
我正在熟悉 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))
}