我想读取midi文件并在触发音符事件时显示内容.我发现了这个stackoverflow问题,其中第二个答案建议使用AudioKit: 如何为我的音频应用程序获得可靠的时间? 更确切地说,建议是使用AKSequencer吸收应用程序中的midi文件,然后将其链接到AKCallbackInstrument以触发事件并为每个midi音符事件调用函数.
我使用本教程安装了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()
}
Run Code Online (Sandbox Code Playgroud)
当我尝试构建我的项目时,该行有一个错误
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