AKMIDIListener没有收到SysEx

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消息是否还需要其他步骤?

提前感谢任何线索.

ana*_*ode 0

编辑:感谢您提请我们注意这一点。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

  • @oscar我们刚刚在此拉取请求中修复了此问题,因此它已修复在开发分支上并将在下一个版本中:https://github.com/AudioKit/AudioKit/pull/1017 (3认同)