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

Posted

技术标签:

【中文标题】如何在带有 AudioKit 4.6.1 的 AKMIDICallbackInstrument 回调中使用 AKMIDIStatus【英文标题】:How do you use AKMIDIStatus in a AKMIDICallbackInstrument callback with AudioKit 4.6.1 【发布时间】: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

【问题讨论】:

【参考方案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 可以按预期工作。一如既往地在我的鼻子底下......

以上是关于如何在带有 AudioKit 4.6.1 的 AKMIDICallbackInstrument 回调中使用 AKMIDIStatus的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AudioKit 中渲染和导出音频?

Audiokit 修剪音频

AudioKit:如何更改使用 AKMIDIEvent 播放的音符的音量或音高?

AudioKit:根据陀螺数据/摆动手机改变声音?

AudioKit 如何更新绘图以更改颜色或原型

如何使用 AudioKit 的新 AKSequencer 播放 MIDI