Fix clock latency: process one USB packet per update() — no more batch-processing 0xF8 bursts

This commit is contained in:
ash
2026-07-03 07:19:05 +00:00
parent 72496d2daf
commit ea45c927e7
+19 -20
View File
@@ -50,7 +50,7 @@ void UsbMidiTransport::update() {
TinyUSBDevice.mounted() ? "YES" : "NO"); TinyUSBDevice.mounted() ? "YES" : "NO");
} }
while (usb_midi.available()) { if (usb_midi.available()) {
uint8_t packet[4]; uint8_t packet[4];
if (usb_midi.readPacket(packet)) { if (usb_midi.readPacket(packet)) {
uint8_t cin = packet[0] & 0x0F; uint8_t cin = packet[0] & 0x0F;
@@ -58,28 +58,27 @@ void UsbMidiTransport::update() {
if (packet[1] == 0xF8) { if (packet[1] == 0xF8) {
midi_tick_count++; midi_tick_count++;
} else if (packet[1] == 0xFA) { } else if (packet[1] == 0xFA) {
midi_tick_count = 0; midi_tick_count = 0xFFFFFFFF;
Serial.println("[CLK] START - reset tick to 0"); Serial.println("[CLK] START - next F8 = tick 0");
} }
continue; } else {
} MidiEvent event;
parse_midi_packet(packet, 4, event);
MidiEvent event; const char* type_str = "UNK";
parse_midi_packet(packet, 4, event); switch (event.type) {
case MidiEvent::NOTE_ON: type_str = "NOTE_ON"; break;
case MidiEvent::NOTE_OFF: type_str = "NOTE_OFF"; break;
case MidiEvent::CONTROL_CHANGE: type_str = "CC"; break;
case MidiEvent::PROGRAM_CHANGE: type_str = "PC"; break;
case MidiEvent::PITCH_BEND: type_str = "PB"; break;
default: break;
}
Serial.printf("[MIDI IN] Ch:%d %s:%d:%d\n", event.channel, type_str, event.data1, event.data2);
const char* type_str = "UNK"; if (receive_callback) {
switch (event.type) { receive_callback(event);
case MidiEvent::NOTE_ON: type_str = "NOTE_ON"; break; }
case MidiEvent::NOTE_OFF: type_str = "NOTE_OFF"; break;
case MidiEvent::CONTROL_CHANGE: type_str = "CC"; break;
case MidiEvent::PROGRAM_CHANGE: type_str = "PC"; break;
case MidiEvent::PITCH_BEND: type_str = "PB"; break;
default: break;
}
Serial.printf("[MIDI IN] Ch:%d %s:%d:%d\n", event.channel, type_str, event.data1, event.data2);
if (receive_callback) {
receive_callback(event);
} }
} }
} }