我正在嘗試編寫一個使用CoreMidi從特定源接收MIDI事件的基本應用程序。我明白所有進入端口的midi事件都會調用通過MidiInputPortCreate()連接的proc。我也明白,使用MidiPortConnectSource()時,你可以發送一個標識符(connRefCon)來幫助知道源是什麼。但我不確定如何使用它。MidiReadProc - 使用srcConnRefCon僅偵聽一個源
我認爲,在我的MidiReadProc中,我可以使用scrConnRefCon和if語句來偵聽特定的源,但我仍然不知道應該通過哪些* void來區分每個源。理想情況下,我的ReadProc看起來像這樣:
void SourceReadProc (const MIDIPacketList *pktlist,
void *readProcRefCon,
void *srcConnRefCon)
{
if (srcConnRefCon == mySourceChoice) {
// pass the pktlist to do something
}
};
任何幫助將不勝感激。 GW
休息,我回到這個項目有一個全新的視角之後。當我調用MIDIPortConnectSource並傳遞一個唯一的connRefCon時,它並不顯然傳遞給每個端點。這裏是我的代碼:
ItemCount count = MIDIGetNumberOfSources();
for (Itemcount i=0; i<count; i++) {
MIDIEndpointRef endpoint = MIDIGetSource(i);
MIDIObjectGetStringProperty(endpoint,kMIDIPropertyName, &midiEndpointSourceName);
NSLog(@"Source %lu: %@", i, midiEndpointSourceName);
MIDIPortConnectSource(midiSourcePort, endpoint, (void*)&i);
}
然後我讀PROC:
void SourceReadProc (const MIDIPacketList *pktlist,
void *readProcRefCon,
void *srcConnRefCon)
{
ItemCount *source = (ItemCount*) srcConnRefCon;
NSLog(@"source: %lu", *source);
}
我已經迷上了兩個不同的MIDI來源和我能找到他們倆就好了。我的第一個代碼報告有兩個來源,並告訴我他們的名字。但是我的閱讀過程說源頭始終是第一手資料。在傳遞connRefCon時,我試過三種不同的數據類型,但沒有運氣。我覺得我的問題必須是MIDIPortConnectSource。
任何幫助,甚至排除故障的想法都會很棒。我希望CoreMIDI具有查詢連接到端口的功能,以便我可以檢查,但可惜的是,沒有。