Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

USB-midi-device crashes when a lot of pitchbend messages are received [MicroPython v1.29.0]

Chiusa
#1,158 17 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 4 giorni

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
56/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
python
Ambito
embedded-iot

Direzione di ricerca

Inizia da micropython/usb/usb-device-midi/usb/device/midi.py, in particolare da on_midi_event, e riproduci il problema usando l'handler di pitch-bend mostrato in micropython/usb/examples/device/midi_example.py. Traccia cosa succede quando arrivano messaggi di pitch-bend rapidi e determina se il dispositivo si blocca o si ripristina normalmente a questa frequenza di input. Il lavoro è completato quando il traffico sostenuto di pitch-bend non blocca più il Pico e non richiede il riavvio del backend.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug

As I wanted to test receiving MIDI pitchbend messages, I added the following lines to micropython/usb/usb-device-midi/usb/device/midi.py:

    def on_midi_event(self, cin, midi0, midi1, midi2):
        ch = midi0 & 0x0F
        if cin == _CIN_NOTE_ON:
            self.on_note_on(ch, midi1, midi2)
        elif cin == _CIN_NOTE_OFF:
            self.on_note_off(ch, midi1, midi2)
        elif cin == _CIN_CONTROL_CHANGE:
            self.on_control_change(ch, midi1, midi2)
        elif cin == _CIN_PITCH_BEND:              # <------------ Added these 4 lines
            # Pitch bend combines two 7-bit values into a 14-bit unsigned integer
            value = midi1 | (midi2 << 7)
            self.on_pitch_bend(ch, value)             

and

    def on_pitch_bend(self, channel, value):
        pass 

To micropython/usb/examples/device/midi_example.py I added these lines:

    def on_pitch_bend(self, ch, value):
        """Called when Pitch Bend is received. Value is an integer from 0 to 16383 (8192 is center)."""
        normalized = value - 8192
        print(f"PitchBend| Ch: {ch:<2} Raw: {value:<5} Relative to center: {normalized}")

Now when I move the pitchbend on my Arturia MiniLab MKII, it spits out a lot of pitchbend messages (every ~1ms). On a serial monitor, I see this:

Image

After this, the Raspberry Pi Pico 2 hangs and I have to hit Thonny's "Stop/Restart backend" button twice to return/reset the Pico to the REPL.
It seems the rapid messages overflow a queue?

Paul

Lingua principale
Python
Stelle
2.9k
Fork
1.1k
Merge medio
7g 4h
PR unite (30g)
4

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di micropython/micropython-lib

Tutte le issue di micropython/micropython-lib

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.