首页 > 解决方案 > 如何在带有 AudioKit 4.6.1 的 AKMIDICallbackInstrument 回调中使用 AKMIDIStatus

问题描述

将 AKSequencer 用于 midi 和控制轨道。我知道 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 实现问题

标签: swiftmidiaudiokit

解决方案


尝试使用传入字节创建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 中工作


推荐阅读