I want to read a midi file and display things when note events are triggered. I found this stackoverflow question, where the second answer suggests to use AudioKit : How Do I Get Reliable Timing for my Audio App? More precisely, the suggestion is to use AKSequencer to absorb the midi file in the app, and then to link it to a AKCallbackInstrument to trigger the events and call a function for each midi note event.
I installed AudioKit 4.5.5 using this tutorial https://www.youtube.com/watch?v=iUvWxWvRvo8 Then I managed to run the code of the tutorial, so I know AudioKit is properly included in the project.
Then I wrote my own code :
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()
}
When I try to build my project, there is an error on the line
sequencer.setGlobalMIDIOutput(callbackInstr.midiIn)
The error is
Value of type 'AKCallbackInstrument' has no member 'midiIn'
I tried to clean the project and re-build but the error is still here.
Can you explain me why do I get this error ? What should I do to solve it ? Because on the AudioKit doc, I found that AKCallbackInstrument is a subclass of AKMIDIInstrument, which does have a property called 'midiIn'. https://audiokit.io/docs/Classes/AKCallbackInstrument.html https://audiokit.io/docs/Classes/AKMIDIInstrument.html
AKCallbackInstrument
code from here: audiokitpro.com/get-the-most-out-of-your-aksequencer (after "AKCallbackInstrument Provides A Better Way") I get a similar "has no member 'midiIn'" error. Maybe an issue with the environment we're each building in? I'm on High Sierra 10.13.6, XCode 10.1, AudioKit 4.5.5 here. – Chipmunk