Вы должны проверить 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, если вам важны только часы.Основные слушатели миди достаточно сосредоточены на событиях миди-нот и т. Д., В отличие от однобайтовых миди-сообщений.