USB MIDI 2.0 Device example that plays “Twinkle Twinkle Little Star” using native UMP (Universal MIDI Packet) format with full MIDI 2.0 expression.
The device exposes both USB-MIDI 1.0 (Alt Setting 0) and USB-MIDI 2.0 (Alt Setting 1) as required by the USB-MIDI 2.0 specification. A MIDI 2.0 capable host (e.g. Windows MIDI Services) will select Alt Setting 1 for native UMP transport. Legacy hosts use Alt Setting 0 with automatic MIDI 1.0 fallback.
mkdir build && cd build cmake -DBOARD=raspberry_pi_pico -DPICO_SDK_FETCH_FROM_GIT=on -G Ninja .. cmake --build .
Hold BOOTSEL, connect USB, drag midi2_device.uf2 to the RPI-RP2 drive.
Linux:
aseqdump -p "MIDI 2.0 Device"
Windows (MIDI 2.0 native):
midi endpoint list
midi endpoint monitor
Twinkle Twinkle Little Star in C major, 120 BPM. Six phrases with dynamic shaping (pp to ff crescendo and back), pitch bend vibrato on sustained notes, and channel/poly pressure for expression. All values use genuine MIDI 2.0 resolution with no 7-bit equivalent.