Simple test

Ensure your device works with this simple test.

examples/usb_host_midi_simpletest.py
 1# SPDX-FileCopyrightText: Copyright (c) 2023 Scott Shawcroft for Adafruit Industries
 2#
 3# SPDX-License-Identifier: Unlicense
 4
 5import adafruit_midi
 6import audiobusio
 7import board
 8import synthio
 9import usb.core
10import wm8960
11from adafruit_midi.note_off import NoteOff
12from adafruit_midi.note_on import NoteOn
13
14import adafruit_usb_host_midi
15
16print("Looking for midi device")
17raw_midi = None
18while raw_midi is None:
19    for device in usb.core.find(find_all=True):
20        try:
21            raw_midi = adafruit_usb_host_midi.MIDI(device, timeout=0.01)
22            print("Found", hex(device.idVendor), hex(device.idProduct))
23        except ValueError:
24            continue
25
26
27# This setup is for the headphone output on the iMX RT 1060 EVK.
28dac = wm8960.WM8960(board.I2C())
29dac.start_i2s_out()
30audio = audiobusio.I2SOut(
31    board.AUDIO_BCLK, board.AUDIO_SYNC, board.AUDIO_TXD, main_clock=board.AUDIO_MCLK
32)
33synth = synthio.Synthesizer(sample_rate=44100)
34audio.play(synth)
35
36midi = adafruit_midi.MIDI(midi_in=raw_midi, in_channel=0)
37
38pressed = {}
39
40while True:
41    msg = midi.receive()
42    if isinstance(msg, NoteOn) and msg.velocity != 0:
43        note = synthio.Note(synthio.midi_to_hz(msg.note))
44        print("noteOn: ", msg.note, "vel:", msg.velocity)
45        synth.press(note)
46        pressed[msg.note] = note
47    elif (
48        isinstance(msg, NoteOff) or (isinstance(msg, NoteOn) and msg.velocity == 0)
49    ) and msg.note in pressed:
50        print("noteOff:", msg.note, "vel:", msg.velocity)
51        note = pressed[msg.note]
52        synth.release(note)
53        del pressed[msg.note]