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]