Osc*_*car 8 midi sysex coremidi swift audiokit
我在一个类上使用AudioKit的AKMIDIListener协议来监听MIDI消息.这适用于标准消息,例如Note On,但SysEx消息不会通过.
func receivedMIDINoteOn(noteNumber: MIDINoteNumber, velocity: MIDIVelocity, channel: MIDIChannel) {
NSLog("Note On \(noteNumber), \(velocity), \(channel)") // works perfectly
}
func receivedMIDISystemCommand(_ data: [MIDIByte]) {
NSLog("SysEx \(data)") // never triggers
// More code to handle the messages...
}
Run Code Online (Sandbox Code Playgroud)
SysEx消息从外部硬件或测试软件发送.我已经使用MIDI监控应用程序来确保正确发送消息,但在我的应用程序中它们没有触发receivedMIDISystemCommand.
接收我缺少的SysEx消息是否还需要其他步骤?
提前感谢任何线索.
编辑:感谢您提请我们注意这一点。SysEx 接收问题现已在 AudioKit 的开发分支中修复:https ://github.com/AudioKit/AudioKit/pull/1017
--
代替
NSLog("SysEx \(data)")
Run Code Online (Sandbox Code Playgroud)
你有没有尝试过?
if let sysExCommand = AKMIDISystemCommand(rawValue: data[0]) {
print("MIDI System Command: \(sysExCommand)")
}
Run Code Online (Sandbox Code Playgroud)
AKMIDISystemCommand 会将您的 SysEx 数据转换为更有用的数据,定义如下:
public enum AKMIDISystemCommand: MIDIByte {
/// Trivial Case of None
case none = 0
/// System Exclusive
case sysex = 240
/// Song Position
case songPosition = 242
/// Song Selection
case songSelect = 243
/// Request Tune
case tuneRequest = 246
/// End System Exclusive
case sysexEnd = 247
/// Clock
case clock = 248
/// Start
case start = 250
/// Continue
case `continue` = 251
/// Stop
case stop = 252
/// Active Sensing
case activeSensing = 254
/// System Reset
case sysReset = 255
}
Run Code Online (Sandbox Code Playgroud)
——马修@audiokit
| 归档时间: |
|
| 查看次数: |
230 次 |
| 最近记录: |