首页 > 解决方案 > 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 还没有击中文档。

标签: swiftxcodemidiaudiokit

解决方案


目前,您可以像这样转换MIDIByteAKMIDIStatus

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

在开发分支上,有一个新的初始化程序,AKMIDIStatus它直接MIDIByte作为一个参数,使这更容易一些。


推荐阅读