Ваше описание точно так же, как я отправляю свои MIDI-данные, и оно отлично работает.Возможно, вы могли бы опубликовать свой исходный код, без этого немного трудно догадаться, что не так.
Кроме того, для тестирования попробуйте установить нулевые метки времени, просто чтобы убедиться, что вы можете отправлять MIDI после того, какчто вы можете вернуть свои временные метки обратно для их отдельной отладки.
Вместо источника, вот простой метод, который отправляет MIDI, и я вызываю его из NSTimer, и он основан на некоторых примерах Apple ионо работает.Обратите внимание, что «outputPort» - это то, что вы должны были создать где-то перед тем, как пытаться отправить MIDI вместе с вашим клиентом ref (я предполагаю, что вы это сделали)
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);
}
}
}