2017-03-20 58 views
7

Próbuję osiągnąć coś, co wydaje się być proste: słuchaj wiadomości MIDI w aplikacji Mac i używaj ich do odtwarzania notatek z istniejącego instrumentu AVAudioUnit.Używanie wejścia CoreMIDI z AVAudioUnit

Hipoteza: Muszę napisać pomost pomiędzy MIDIReadBlock związanego z moim klientem CoreMIDI (poprzez MIDIInputPortCreateWithBlock z MIDIClientRef) i AUScheduleMIDIEventBlock mogę dostać od mojego AVAudioUnit za AUAudioUnit (poprzez scheduleMIDIEventBlock). Wydaje się to być bardziej skomplikowane, niż powinno być, ponieważ będę się grzebał z surowymi danymi MIDI - mam wrażenie, że jednostki audio muszą obsługiwać jakąś abstrakcję MIDI, która jest łatwa w użyciu z CoreMIDI, ale nie mogę znaleźć żadnych pokrewnych przykładów tego. Być może jest sposób na użycie MIDIOutputPortCreate z AV/AUAudioUnit?

To, czego szukam, to działający przykład wejścia MIDI bezpośrednio do jednostki audio (najlepiej przy użyciu Swift 3), ale jeśli znasz jakieś powiązane zasoby, które są względnie aktualne, udostępnij te linki. Niespotykana dokumentacja tych interfejsów API jest dość frustrująca. Dzięki!

Odpowiedz

0

W pętli MIDIReadBlock odbieranych pakietów. Na podstawie statusu MIDI każdego pakietu wyślij odpowiednie zdarzenie urządzenia (na przykład notatkę do) do urządzenia audioUnit.

np.

osstatus = MusicDeviceMIDIEvent(audioUnit, midiCmd...