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

时间:2019-02-20 12:52:50

标签: swift midi audiokit

将AKSequencer用于midi和Control轨道。我知道AKMIDIStatus在最近的修订中进行了一些更改。我的探索使我相信,这种简单的'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

        }
}

但是枚举案例似乎消失了。

编辑:恢复到4.5.5后,我可以在这里使用解决方案:AKMIDICallbackInstrument Implementation Issue

1 个答案:

答案 0 :(得分:2)

尝试使用传入的字节创建 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)

经过测试,可以在AudioKit 4.6.1中正常工作