Ios 使用量化的MIDI时间戳发送MIDIPacketList
与CoreMIDI有一些麻烦。我希望在一个MIDIPacketList中使用不同的时间戳发送一些量化的midi消息。这是我的密码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
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;