From ea45c927e7a78d04ffc553ef3f32dfb1d9beb49d Mon Sep 17 00:00:00 2001 From: Ashley Strahle Date: Fri, 3 Jul 2026 07:19:05 +0000 Subject: [PATCH] =?UTF-8?q?Fix=20clock=20latency:=20process=20one=20USB=20?= =?UTF-8?q?packet=20per=20update()=20=E2=80=94=20no=20more=20batch-process?= =?UTF-8?q?ing=200xF8=20bursts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/midi_transport.cpp | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/src/midi_transport.cpp b/src/midi_transport.cpp index f76975a..9291667 100644 --- a/src/midi_transport.cpp +++ b/src/midi_transport.cpp @@ -50,7 +50,7 @@ void UsbMidiTransport::update() { TinyUSBDevice.mounted() ? "YES" : "NO"); } - while (usb_midi.available()) { + if (usb_midi.available()) { uint8_t packet[4]; if (usb_midi.readPacket(packet)) { uint8_t cin = packet[0] & 0x0F; @@ -58,28 +58,27 @@ void UsbMidiTransport::update() { if (packet[1] == 0xF8) { midi_tick_count++; } else if (packet[1] == 0xFA) { - midi_tick_count = 0; - Serial.println("[CLK] START - reset tick to 0"); + midi_tick_count = 0xFFFFFFFF; + Serial.println("[CLK] START - next F8 = tick 0"); } - continue; - } + } else { + MidiEvent event; + parse_midi_packet(packet, 4, event); - MidiEvent event; - parse_midi_packet(packet, 4, event); + const char* type_str = "UNK"; + 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"; - 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); - - if (receive_callback) { - receive_callback(event); + if (receive_callback) { + receive_callback(event); + } } } }