简体   繁体   English

如何在AudioKit 4.6.1的AKMIDICallbackInstrument回调中使用AKMIDIStatus

[英]How do you use AKMIDIStatus in a AKMIDICallbackInstrument callback with AudioKit 4.6.1

Using AKSequencer for midi and a Control track. 将AKSequencer用于midi和Control轨道。 I'm aware AKMIDIStatus has undergone some changes in recent revisions. 我知道AKMIDIStatus在最近的修订中进行了一些更改。 My exploration leads me to believe this simple 'note on' 'note off' callback should work: 我的探索使我相信这个简单的“ note on”“ note off”回调应该可以工作:

        func playThroughCallback(_ statusByte: UInt8,
                             _ noteNumber: MIDINoteNumber,
                             _ velocity: MIDIVelocity) {
        //print("MIDI Sequence Event \(status)")
        guard let status = AKMIDIStatus(byte: statusByte) else { return }

        switch status {
        case .noteOn: midi?.sendNoteOnMessage(noteNumber: noteNumber, velocity: velocity)
        case .noteOff: midi?.sendNoteOffMessage(noteNumber: noteNumber, velocity: velocity)
        default: return

        }
}

But the enum cases seem to have vanished. 但是枚举的案例似乎已经消失了。

Edit: Reverting to 4.5.5 enabled me to use the solution here: AKMIDICallbackInstrument Implementation Issue 编辑:恢复到4.5.5使我可以在此处使用解决方案: AKMIDICallbackInstrument实现问题

Try creating an AKMIDIStatus using the incoming byte, then reading the AKMIDIStatusType 尝试使用传入的字节创建AKMIDIStatus ,然后读取AKMIDIStatusType

let callbackReceiver = AKMIDICallbackInstrument(midiInputName: "myCoolInput", 
    callback: { status, noteNumber, velocity in
        let statusType = AKMIDIStatus(byte: status)?.type //can be noteOn, noteOff, etc
        if(statusType == AKMIDIStatusType.noteOn){
            print("Note on.")
        }
})

myTrack.setMIDIOutput(callbackReceiver.midiIn)

Just tested as working in AudioKit 4.6.1 刚刚经过测试,可以在AudioKit 4.6.1中使用

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM