CoreMidi를 사용하여 특정 소스의 MIDI 이벤트를 수신하는 기본 응용 프로그램을 작성하려고합니다. 포트로 들어오는 모든 미디 이벤트가 MidiInputPortCreate()를 통해 연결된 proc을 호출하는 것을 이해합니다. 또한 MidiPortConnectSource()를 사용할 때 소스가 무엇인지 알 수 있도록 식별자 (connRefCon)를 보낼 수 있음을 이해합니다. 하지만 어떻게 사용하는지 모르겠습니다.MidiReadProc - srcConnRefCon을 사용하여 하나의 소스 만 듣기
내 MidiReadProc 내에서 scrConnRefCon 및 if 문을 사용하여 특정 소스를 수신 할 수 있다고 추측하지만, 각 소스를 구분하기 위해 전달해야하는 무언가는 아직도 모르겠다. 이상적으로 내 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);
}
여기 내 코드입니다. 첫 번째 코드는 두 개의 소스가 있으며 그 이름을 알려줍니다. 그러나 필자의 read proc은 소스가 항상 첫 번째 소스라고 말합니다. 운이없는 connRefCon을 전달할 때 세 가지 데이터 유형을 시도했습니다. 내 문제는 MIDIPortConnectSource에 있어야한다고 생각합니다.
어떤 도움이나 문제 해결 아이디어가 좋을 것입니다. CoreMIDI에는 포트에 연결된 항목을 쿼리 할 수있는 기능이있어서 그걸 확인할 수 있었으면 좋겠어. 근데, 아아, 그렇지 않아.