简单的MIDI路由无音频输出

时间:2013-12-18 17:34:49

标签: ios coremidi

使用以下代码我正在尝试将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通道,如果我使用音序器测试合成器响应音频。 我按下按钮执行代码,但没有任何反应。

我做错了什么?

1 个答案:

答案 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;

我必须设置长度属性!