要播放,我使用的是AVAudioUnitSampler:

            sampler.stopNote(note, onChannel: channel)

但我不想用:
            DispatchQueue.main.asyncAfter(
                deadline: DispatchTime.now() + Double(Int64(0.7 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC))
            {
               sampler.stopNote(note, onChannel: channel)
            }

什么是更好的解决方案?
谢谢

最佳答案

您可以创建一个MusicSequence,其中的每个事件都将由MusicLayer安排。
您可以使用AVMIDIPlayer,但您需要将MusicSequence转换为数据,因为它不直接搜索MusicSequence。
如果要通过按钮模拟“打开笔记”并通过按钮释放模拟“关闭笔记”,请使用MusicDeviceMIDIEvent。

let status = MusicDeviceMIDIEvent(midisynthUnit, noteCommand, noteNum, velocity, 0)

您可能需要阅读this以了解有关使用AVAudioUnitSampler的更多信息。

10-04 19:03