swift - 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))
在开发分支上,有一个新的初始化程序,AKMIDIStatus
它直接MIDIByte
作为一个参数,使这更容易一些。
推荐阅读
- tiddlywiki - TiddlyWiki Mono 主题颜色问题
- r - 在R中排序负数和正数列表
- javascript - 在创建文档之前在 firestore v9 中生成文档 ID
- python-3.x - 在 Skype 组中,机器人无法接收用户的照片消息
- scala - 将 Dstream rdd 转换为数据帧时出现 Nullpointer 异常
- python - 使用嵌套循环访问字典 - Python
- json - 重建字典列表
- java - 强制更新已安装的安卓应用
- cookies - 通过 websocket 从客户端发送 httpOnly cookie
- r - 如何使用 R plotly 在条形图中的条形末尾(而不是居中)放置刻度线和轴标签(或刻度文本)?