Skip to content

Commit 8f034c5

Browse files
authored
Merge pull request #9 from FoamyGuy/usb_read_timeout
Add Fruit Jam example. use a timeout for USB host MIDI read.
2 parents f163298 + 4c4f63c commit 8f034c5

3 files changed

Lines changed: 66 additions & 2 deletions

File tree

examples/usb_host_midi_simpletest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
while raw_midi is None:
1919
for device in usb.core.find(find_all=True):
2020
try:
21-
raw_midi = adafruit_usb_host_midi.MIDI(device)
21+
raw_midi = adafruit_usb_host_midi.MIDI(device, timeout=0.01)
2222
print("Found", hex(device.idVendor), hex(device.idProduct))
2323
except ValueError:
2424
continue
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# SPDX-FileCopyrightText: Copyright (c) 2025 Tim Cocks for Adafruit Industries
2+
#
3+
# SPDX-License-Identifier: MIT
4+
5+
import adafruit_midi
6+
import adafruit_tlv320
7+
import audiobusio
8+
import board
9+
import synthio
10+
import usb.core
11+
from adafruit_midi.note_off import NoteOff
12+
from adafruit_midi.note_on import NoteOn
13+
from displayio import release_displays
14+
from pwmio import PWMOut
15+
16+
import adafruit_usb_host_midi
17+
18+
release_displays()
19+
print("Looking for midi device")
20+
raw_midi = None
21+
while raw_midi is None:
22+
for device in usb.core.find(find_all=True):
23+
try:
24+
raw_midi = adafruit_usb_host_midi.MIDI(device, timeout=0.01)
25+
print("Found", hex(device.idVendor), hex(device.idProduct))
26+
except ValueError:
27+
continue
28+
29+
30+
mclk_pwm = PWMOut(board.I2S_MCLK, frequency=15_000_000, duty_cycle=2**15)
31+
32+
i2c = board.I2C()
33+
dac = adafruit_tlv320.TLV320DAC3100(i2c)
34+
35+
# set sample rate & bit depth, use bclk
36+
dac.configure_clocks(sample_rate=44100, bit_depth=16, mclk_freq=15_000_000)
37+
38+
# use headphones
39+
dac.headphone_output = True
40+
dac.dac_volume = -5 # dB
41+
dac.headphone_volume = -30
42+
audio = audiobusio.I2SOut(board.I2S_BCLK, board.I2S_WS, board.I2S_DIN)
43+
44+
synth = synthio.Synthesizer(sample_rate=44100)
45+
audio.play(synth)
46+
47+
midi = adafruit_midi.MIDI(midi_in=raw_midi, in_channel=0)
48+
49+
pressed = {}
50+
51+
while True:
52+
msg = midi.receive()
53+
if isinstance(msg, NoteOn) and msg.velocity != 0:
54+
note = synthio.Note(synthio.midi_to_hz(msg.note))
55+
print("noteOn: ", msg.note, "vel:", msg.velocity)
56+
synth.press(note)
57+
pressed[msg.note] = note
58+
elif (
59+
isinstance(msg, NoteOff) or (isinstance(msg, NoteOn) and msg.velocity == 0)
60+
) and msg.note in pressed:
61+
print("noteOff:", msg.note, "vel:", msg.velocity)
62+
note = pressed[msg.note]
63+
synth.release(note)
64+
del pressed[msg.note]

examples/usb_host_midi_simpletest_rp2040usbfeather.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
while raw_midi is None:
2020
for device in usb.core.find(find_all=True):
2121
try:
22-
raw_midi = adafruit_usb_host_midi.MIDI(device)
22+
raw_midi = adafruit_usb_host_midi.MIDI(device, timeout=0.01)
2323
print("Found", hex(device.idVendor), hex(device.idProduct))
2424
except ValueError:
2525
continue

0 commit comments

Comments
 (0)