AKMIDICallbackInstrument

AKMIDICallbackInstrument

更新到AudioKit的最新版本后,我将几个AKCallbackInstrument实例更改为新的AKMIDICallbackInstrument类,该类现在将前者合并为旧行为。但是,这样做的时候,我遇到了这个奇怪的错误。也许我想念 swift 的细微差别?

let callback = AKMIDICallbackInstrument() { status, note, velocity in
    if status == .noteOn {  //errors out
       // do something
    }
}

比较状态 .noteOn 错误的原因是:
“表达类型'Bool'在没有更多上下文的情况下是模棱两可的。”。这是有道理的,因为AKMIDICallbackInstrument不再返回AKMIDIStatus状态,而是直接返回MIDIByte(UInt8)。使用直接MIDI命令数字即可。
let callback = AKMIDICallbackInstrument() { status, note, velocity in
    if status == 0x90 {
       // do something
    }
}

因此,我们有一个问题和一个可能的解决方案。我只是不确定这是否可行,AKMIDICallbackInstrument尚未发布到文档中。

最佳答案

目前,您可以像这样将MIDIByte转换为AKMIDIStatus:

let status = AKMIDIStatus(rawValue: Int(statusByte >> 4))

在develop分支上,有一个用于AKMIDIStatus的新初始化程序,该初始化程序直接将MIDIByte作为参数使此操作变得简单一些。

关于swift - AKMIDICallbackInstrument实现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53363525/

10-09 04:22