【问题标题】:How do you use AKMIDIStatus in a AKMIDICallbackInstrument callback with AudioKit 4.6.1如何在带有 AudioKit 4.6.1 的 AKMIDICallbackInstrument 回调中使用 AKMIDIStatus
【发布时间】:2019-02-20 12:52:49
【问题描述】:

将 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 Implementation Issue

【问题讨论】:

    标签: swift midi audiokit


    【解决方案1】:

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

    【讨论】:

    • 感谢您,使用AKMIDIStatus(byte: statusByte)?.type 可以按预期工作。一如既往地在我的鼻子底下......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多