Я пытаюсь написать основное приложение, которое использует CoreMidi для получения событий midi из определенного источника.Я понимаю, что все события midi, которые приходят в порт, вызывают процесс, который я подключил через MidiInputPortCreate ().Я также понимаю, что при использовании MidiPortConnectSource () вы можете отправить идентификатор (connRefCon), чтобы узнать, что это за источник.Но я не уверен, как его использовать.
Я полагаю, что в моем 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);
}
Затем моя процедура чтения:
void SourceReadProc (const MIDIPacketList *pktlist,
void *readProcRefCon,
void *srcConnRefCon)
{
ItemCount *source = (ItemCount*) srcConnRefCon;
NSLog(@"source: %lu", *source);
}
Я подключил два разных миди-источника и могу найти их оба просто отлично.Мой первый код сообщает, что есть два источника и сообщает мне их имена.Но мой читательский процесс говорит, что источники - это всегда первый источник.Я пробовал три разных типа данных при передаче connRefCon без удачи.Я чувствую, что моя проблема должна быть с MIDIPortConnectSource.
Любая помощь или даже идеи по устранению неполадок были бы великолепны.Мне бы хотелось, чтобы в CoreMIDI были функции для запроса того, что подключено к портам, чтобы я мог это проверить, но, увы, нет.