AKMIDIListener не срабатывает из-за длины пакета данных AKMIDIEvent - PullRequest
1 голос
/ 26 мая 2019

Я использую существующее приложение ( Midi Link Sync ) для отправки данных MIDI-часов в мое отдельное приложение AudioKit для iOS.

AudioKit выполняет захватсообщение, однако, AKMIDIListener не срабатывает.

AKMIDIListener реализован как есть из демонстрации игровой площадки: link

Это потому, что в _AKMIDI+Receiving.swift_ file, the handleMIDIMessage function is not called (line 155) due to the event status & command being nil.

Пропуск зажигания происходит в строке 69-70 AKMIDIEvent.swift (см. Исходный код MasterKit master ).С моей стороны, пакет данных с MIDI-часами, отправляемый через приложение синхронизации MIDI-ссылок, содержит одну запись data : 0xF8 (часы).В строке 69 указывается, что длина данных должна быть> 1, а не> = 1.

Это ошибка в платформе AudioKit или в сообщениях MIDI по умолчанию должно быть несколько записей?

1 Ответ

1 голос
/ 27 мая 2019

Вы должны проверить AKMIDITempoListener.Это вспомогательный объект для обработки событий часов.Этот вспомогательный объект наблюдает за сообщениями часов для определения темпа и предоставляет некоторые удобства для наблюдения за событиями сообщений часов и событий темпа.Его можно использовать для наблюдения за тактовыми событиями и тактовыми событиями (24 такта), квантовыми событиями (6 тактов), темповыми событиями, событиями запуска / продолжения и остановки.Его также можно использовать для синхронизации запуска со следующим событием синхронизации.

Пример использования моего тестирования можно проверить, открыв проект разработки MacOS, расположенный в AudioKit ▸ Developer ▸ macOS ▸macOSDevelopment.Затем откройте «MIDI Connection Manger.swift».

public let tempoListener = AKMIDITempoListener(smoothing: 0.98, bpmHistoryLimit: 1)

init() {
    midi.addListener(tempoListener)
    tempoListener.clockListener?.addObserver(self)
    tempoListener.addObserver(self)
}

Затем далее в файле есть расширение для приема событий:

extension MIDIConnectionManger: AKMIDIBeatObserver {

    func preparePlay(continue: Bool) {
        debugPrint("MMC Start Prepare Play")
    }

    func startFirstBeat(continue: Bool) {
        debugPrint("MMC Start First Beat")
    }

    func stopSRT() {
        debugPrint("MMC Stop")
    }

    func receivedBeatEvent(beat: UInt64) {

    }

    func receivedQuantum(quarterNote: UInt8, beat: UInt64, quantum: UInt64) {

    }

    func receivedQuarterNoteBeat(quarterNote: UInt8) {
        //debugPrint("Quarter Note: ", quarterNote)
    }
}

Вы, вероятно, хотите просто сосредоточиться нафункция receiveQuantum, если вам важны только часы.Основные слушатели миди достаточно сосредоточены на событиях миди-нот и т. Д., В отличие от однобайтовых миди-сообщений.

...