Es ist Zeit fuer den naechsten Schritt in der Arbeit mit MIDI-Geraeten und Core MIDI. Wir haben bereits kennengelernt, wie man abfragt, um MIDI-bezogene Informationen von unserem System zu erhalten. Aber wie koennen wir die von einem MIDI-Geraet an unser System gesendeten Informationen nutzen?

Hier kommen Core MIDI Callbacks ins Spiel. Ein kurzer Blick in die Dokumentation zeigt drei davon:

  • MIDINotifyProc: “Wird aufgerufen, wenn sich der MIDI-Zustand aendert.”
  • MIDIReadProc: “Wird aufgerufen, wenn das System eine oder mehrere eingehende MIDI-Nachrichten an deine App zu liefern hat.”
  • MIDICompletionProc: “Wird aufgerufen, wenn ein MIDI System-Exclusive-Ereignis vollstaendig gesendet wurde oder abgebrochen wurde.”

Fuer diesen Beitrag habe ich gute und nicht so gute Nachrichten.

Die gute Nachricht ist, dass ich ein Beispiel zeige, wie man die ersten beiden Callbacks verwendet. Die nicht so gute Nachricht ist, dass ich nicht wie versprochen Swift verwenden werde, sondern Objective-C. Es scheint, dass Swift Core MIDI Callbacks noch nicht unterstuetzt. Ich habe eine Frage auf StackExchange gepostet und hoffe, dass sie bald beantwortet wird, aber es haengt letztendlich von Apple ab.

Hier ist also der Objective-C Code, der zwei Callbacks verwendet. Einer wird ausgeloest, wenn ein MIDI-Ereignis eingeht (eventCallback) und der andere wird ausgeloest, wenn sich etwas in unserem MIDI-Setup aendert (notifyCallback).

{% gist 167ebaece067df022311 callbacks.m %}

Fuehre jetzt den Code aus und stecke dann dein MIDI-Geraet ein. Der notifyCallback sollte ausgeloest werden - tatsaechlich mehrmals, nicht nur einmal. Dann betaetige einige Regler an deinem Controller und du wirst eventCallback in Aktion sehen.

Hoffen wir, dass Apple eine Loesung fuer Callbacks in Swift bereitstellt. Ich bin sicher, sie werden es tun; es ist nur eine Frage der Zeit.

Fertig fuer heute!