귀하의 설명을 정확히, 그리고 그것을 잘 작동합니다. 어쩌면 당신은 소스 코드를 게시 할 수 있으며, 무엇이 잘못되었는지를 짐작하기가 어렵지 않습니다.
또한 테스트를 위해 타임 스탬프를 0으로 설정하십시오. 그러면 MIDI를 보낼 수 있는지 확인한 후 타임 스탬프를 다시 입력하여 별도로 디버깅 할 수 있습니다.
소스 대신에 MIDI를 보내는 간단한 방법이 있습니다. NSTimer에서 호출하고 일부 Apple 예제를 기반으로하며 작동합니다. 'outputPort'을 참고하는 것은 당신이 당신의 클라이언트 심판과 함께 MIDI를 전송하기 전에 어딘가에 작성해야 뭔가 당신이 그이 후에는 보낼 수
OSStatus s;
MIDIClientRef client;
MIDIPortRef outputPort;
s = MIDIClientCreate((CFStringRef)@"My Test MIDI Client", MyMIDINotifyProc, self, &client);
s = MIDIOutputPortCreate(client, (CFStringRef)@"My Test MIDI Output Port", &outputPort);
(나는 당신이 그 짓을 가정합니다) MIDI
- (void) MySendMidi:(const UInt8*)data size:(UInt32)bsize
{
NSLog(@"%s(%u bytes to core MIDI)", __func__, unsigned(bsize));
assert(bsize < 65536);
Byte packetBuffer[bsize+100];
MIDIPacketList *packetList = (MIDIPacketList*)packetBuffer;
MIDIPacket *packet = MIDIPacketListInit(packetList);
packet = MIDIPacketListAdd(packetList, sizeof(packetBuffer), packet, 0, bsize, data);
// Send it to every destination in the system...
for (ItemCount index = 0; index < MIDIGetNumberOfDestinations(); ++index)
{
MIDIEndpointRef outputEndpoint = MIDIGetDestination(index);
if (outputEndpoint)
{
// Send it
OSStatus s = MIDISend(outputPort, outputEndpoint, packetList);
}
}
}
감사합니다. 마침내 MIDIPacketListAdd가 실제로 데이터를 보내지 않는다는 것을 알았습니다. 단지 패킷 목록에 추가하는 것입니다. MIDISend를 추가하면 모든 기능이 작동합니다. Apple이 CoreMIDI를 문서화하지 않기로 한 것은 불행한 일입니다. – TomJeffries