Ios 使用量化的MIDI时间戳发送MIDIPacketList

Ios 使用量化的MIDI时间戳发送MIDIPacketList,ios,coremidi,Ios,Coremidi,与CoreMIDI有一些麻烦。我希望在一个MIDIPacketList中使用不同的时间戳发送一些量化的midi消息。这是我的密码 MIDITimeStamp triggerHostTime = gridModel->gridRows[rowIndex]->framesPerTrigger * PB_AUDIO_FRAMES_TO_HOSTTICK_FACTOR; Byte note = PB_MIDI_NOTES[rowIndex]; MIDIPacketList *packet

与CoreMIDI有一些麻烦。我希望在一个MIDIPacketList中使用不同的时间戳发送一些量化的midi消息。这是我的密码

MIDITimeStamp triggerHostTime = gridModel->gridRows[rowIndex]->framesPerTrigger * PB_AUDIO_FRAMES_TO_HOSTTICK_FACTOR;

Byte note = PB_MIDI_NOTES[rowIndex];

MIDIPacketList *packetList = (MIDIPacketList *)malloc(PB_MIDI_PACKETLIST_SIZE);
MIDIPacket *curPacket  = MIDIPacketListInit(packetList);
MIDITimeStamp packetHostTime = mach_absolute_time();

Byte off_message[3] = {MIDI_NOTE_OFF, note, 0};

for (int i = 0; i < item->trigger; i++) {
    Byte on_message[3] = {MIDI_NOTE_ON, note, 127};
    curPacket = MIDIPacketListAdd(packetList, PB_MIDI_PACKETLIST_SIZE, curPacket,
                                  packetHostTime,
                                  3, on_message);

    packetHostTime += triggerHostTime;
    curPacket = MIDIPacketListAdd(packetList, PB_MIDI_PACKETLIST_SIZE, curPacket,
                                  packetHostTime - 1e6 * PB_AUDIO_NS_TO_HOSTTICK_FACTOR,
                                  3, off_message);

}

pb_midi_manager_send_packet_list(packetList);

free(packetList);
在MIDIMonitor中,一切看起来都很好:

但是在DAW(Ableton)我只收到一张很短的纸条。DAW是否可能无法从打包列表中解压缩midi音符?我想没有。。那么我的问题在哪里?是否有其他方法来安排输出midi音符?我试着直接将时间戳设置为curPacket->timeStamp,只收到几张便笺,但延迟很快,便笺打开和便笺关闭消息交换

我正在使用iOS模拟器并使用网络midi连接


感谢您的关注和可能的答案

你解决了这个问题吗?我也有类似的问题。
void pb_midi_manager_send_packet_list(MIDIPacketList* packetList) {

    for (ItemCount index = 0; index < MIDIGetNumberOfDestinations(); ++index) {
    MIDIEndpointRef MIDIEndpoint = MIDIGetDestination(index);
    if (MIDIEndpoint) {
        MIDISend(MIDIOutput, MIDIEndpoint, packetList);
        }
    }
}
mach_timebase_info_data_t tinfo;
mach_timebase_info(&tinfo);

PB_AUDIO_HOSTTICK_TO_NS_FACTOR = ((double)tinfo.numer / tinfo.denom);
PB_AUDIO_NS_TO_HOSTTICK_FACTOR = 1.0 / PB_AUDIO_HOSTTICK_TO_NS_FACTOR;

PB_AUDIO_FRAMES_TO_HOSTTICK_FACTOR = 1e9 * PB_AUDIO_NS_TO_HOSTTICK_FACTOR / PB_AUDIO_SAMPLE_RATE;