summaryrefslogtreecommitdiff
path: root/examples/device/midi_test/README.md
blob: 001d16bbd888d6d4d9f5dd7c73ebcb3edeaacdb1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# MIDI Test

A USB MIDI device that continuously plays a fixed melody, useful for verifying USB MIDI enumeration and streaming.

## What it does

- Sends a repeating sequence of note-on / note-off messages (cable 0, channel 1) about every 286 ms.
- Drains any incoming MIDI packets (read and discarded) so the host sender never blocks on a full input port.
- Blinks the board LED to indicate USB state (not mounted / mounted / suspended).

## USB Descriptors

| Interface | Class driver |
|-----------|--------------|
| 0–1 | MIDI (Audio Control + MIDI Streaming) |

## Configuration

Notable `tusb_config.h` settings:

```c
#define CFG_TUD_MIDI              1
#define CFG_TUD_MIDI_RX_BUFSIZE   (TUD_OPT_HIGH_SPEED ? 512 : 64)
#define CFG_TUD_MIDI_TX_BUFSIZE   (TUD_OPT_HIGH_SPEED ? 512 : 64)
```

## Building

CMake:

```bash
mkdir build && cd build
cmake -DBOARD=raspberry_pi_pico ..
cmake --build .
```

Make:

```bash
make BOARD=raspberry_pi_pico all
```

## FreeRTOS variant

A FreeRTOS build is in `examples/device/midi_test_freertos` — identical MIDI melody playback, with the device, MIDI, and LED-blink work split across FreeRTOS tasks.

## Try it

The device shows up as a MIDI port. On Linux, list ports with `aseqdump -l`, then watch the incoming stream with `aseqdump -p <client:port>` (you should see a steady run of note on/off events), or route the port into a synth such as FluidSynth/qsynth to hear the melody.