使用以下代码我正在尝试将MIDI事件发送到NSLog Synth:
MIDIClientRef midiClient = NULL;
MIDIClientCreate(
CFSTR("MidiClient"),
NULL,
NULL,
&midiClient
);
MIDIPortRef midiClientOutPort = NULL;
MIDIOutputPortCreate(
midiClient,
CFSTR("MidiClientPort"),
&midiClientOutPort
);
NSLog(@"%lu", MIDIGetNumberOfDestinations());
MIDIEndpointRef endpoint = NULL;
endpoint = MIDIGetDestination(1);
CFPropertyListRef plist = NULL;
MIDIObjectGetProperties(endpoint, &plist, YES);
NSArray *temp = [NSArray arrayWithObject:(__bridge id)(plist)];
NSLog(@"%@", [temp description]);
MIDIPacketList packet;
packet.numPackets = 1;
packet.packet[0].data[0] = 0x90;
packet.packet[0].data[1] = 0x3c;
packet.packet[0].data[2] = 0x40;
packet.packet[0].timeStamp = 0;
MIDISend(midiClientOutPort, endpoint, &packet);
如果我检查OSStatus,我没有错误。我得到一个MIDIClient,一个MIDIOutputPort,MIDISend也很好。另外,我得到合成目的地没有错误。 合成器正在监听所有midi通道,如果我使用音序器测试合成器响应音频。 我按下按钮执行代码,但没有任何反应。
我做错了什么?
答案 0 :(得分:1)
解决方案:
MIDIPacketList packet;
packet.numPackets = 1;
packet.packet[0].timeStamp = 0;
packet.packet[0].length = 3;
packet.packet[0].data[0] = 0x90;
packet.packet[0].data[1] = 0x3c;
packet.packet[0].data[2] = 0x40;
我必须设置长度属性!