Я хочу прочитать MIDI-файл и отображать вещи, когда запускаются события заметок.
Я нашел этот вопрос stackoverflow, где второй ответ предлагает использовать AudioKit:
Как получить надежную синхронизацию для моего аудио приложения?
Точнее, предлагается использовать AKSequencer для поглощения миди-файла в приложении, а затем связать его с AKCallbackInstrument для запуска событий и вызова функции для каждого события миди-ноты.
Я установил AudioKit 4.5.5, используя это руководство
https://www.youtube.com/watch?v=iUvWxWvRvo8
Затем мне удалось запустить код учебника, и я знаю, что AudioKit правильно включен в проект.
Тогда я написал свой собственный код:
let sequencer = AKSequencer(filename: "myMidiFile.mid")
let callbackInstr = AKCallbackInstrument()
callbackInstr.callback = myCallBack
sequencer.setGlobalMIDIOutput(callbackInstr.midiIn)
func myCallBack(a:UInt8, b:MIDINoteNumber, c:MIDIVelocity){
print(b)
}
func test() {
do {
try AudioKit.start()
}
catch {
print("Oops! AudioKit didn't start!")
}
sequencer.play()
}
Когда я пытаюсь построить свой проект, на линии возникает ошибка
sequencer.setGlobalMIDIOutput(callbackInstr.midiIn)
Ошибка
Value of type 'AKCallbackInstrument' has no member 'midiIn'
Я пытался очистить проект и пересобрать, но ошибка все еще здесь.
Можете ли вы объяснить мне, почему я получаю эту ошибку? Что я должен сделать, чтобы решить это? Потому что в документе AudioKit я обнаружил, что AKCallbackInstrument является подклассом AKMIDIInstrument, у которого действительно есть свойство, называемое midiIn.
https://audiokit.io/docs/Classes/AKCallbackInstrument.html
https://audiokit.io/docs/Classes/AKMIDIInstrument.html