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

问题描述 投票:2回答:2

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

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

有没有人知道一个能清除单个音符的功能?像clearSingleNote(noteNumber MIDINoteNumber, position AKDuration, end AKDuration)这样的东西?

audiokit
2个回答
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)

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


0
投票

正确的方法:

trackData = trackData.filter { 
    !($0.noteNumber == 60 && $0.duration == AKDuration(beats: 4.0))
}
© www.soinside.com 2019 - 2024. All rights reserved.