如何将带有MIDITimestamp的MIDI消息发送到AKMIDISampler?

时间:2019-12-11 08:58:23

标签: ios audiokit

我正在尝试将AudioKit集成到我的音序器应用程序中。

当前试图弄清楚如何将具有MIDITimestamp值的MIDI消息发送到AKMIDISampler实例。在此类的接口中,没有方法可以为note命令指定时间戳记值。

我不使用AKSequencer。我想从自己的音序器安排命令。

AudioKit对我的案例有帮助吗,还是我应该自己编写调度代码?

1 个答案:

答案 0 :(得分:0)

@dimitry,

如果您尝试播放非AKMIDISampler中的AKSequencer实例变量,我相信您只需要触发它们即可;是您的音序器在给定的时间戳下发送MIDI事件,并只是通知AKMIDISampler在该时刻的那一刻播放。

例如:

 func playKick() {
    try! kick1Sampler.play(noteNumber: 60, velocity: 127, channel: 0)
 }

没有看到音序器的实现或项目,您是否能够从音序器发送MIDI事件?如果是这样,您可以添加AKMIDIListener委托并捕获来自音序器的MIDI音符事件,如下所示:

func receivedMIDINoteOn(noteNumber: MIDINoteNumber, velocity: MIDIVelocity, channel: MIDIChannel, portID: MIDIUniqueID? = nil, offset: MIDITimeStamp = 0) {
    outputMIDIMessage = "Channel: \(channel+1) noteOn: \(noteNumber) velocity: \(noteVelocity))"
    print(outputMIDIMessage)
}

func receivedMIDINoteOff(noteNumber: MIDINoteNumber, velocity: MIDIVelocity, channel: MIDIChannel, portID: MIDIUniqueID? = nil, offset: MIDITimeStamp = 0) {
    outputMIDIMessage = "Channel: \(channel+1) noteOff: \(noteNumber) velocity: \(noteVelocity))"
    print(outputMIDIMessage)
}

请注意,我正在使用AudioKit版本4.9.2和Xcode 11.2.1。