AKMIDIListener не получает SysEx
Я использую протокол AKMIDIListener AudioKit в классе для прослушивания сообщений 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...
}
Сообщения SysEx отправляются с внешнего оборудования или тестового программного обеспечения. Я использовал приложения для мониторинга MIDI, чтобы убедиться, что сообщения отправляются правильно, но в моем приложении они не запускаются receivedMIDISystemCommand
,
Есть ли какие-либо дополнительные шаги, необходимые для получения сообщений SysEx, которые я пропускаю?
Заранее спасибо за любые подсказки.
1 ответ
РЕДАКТИРОВАТЬ: Спасибо за доведение этого до нашего сведения. Проблема получения SysEx теперь исправлена в ветви разработки AudioKit: https://github.com/AudioKit/AudioKit/pull/1017
-
Вместо
NSLog("SysEx \(data)")
Ты пытался?
if let sysExCommand = AKMIDISystemCommand(rawValue: data[0]) {
print("MIDI System Command: \(sysExCommand)")
}
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
}
- Мэтью @ audiokit