Simple test¶
Ensure your device works with this simple test.
1# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
2# SPDX-License-Identifier: MIT
3
4"""
5This example sends MIDI out. It sends NoteOn and then NoteOff with a random pitch bend.
6"""
7
8import time
9import random
10import adafruit_ble
11from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
12import adafruit_midi
13from adafruit_midi.control_change import ControlChange
14from adafruit_midi.note_off import NoteOff
15from adafruit_midi.note_on import NoteOn
16from adafruit_midi.pitch_bend import PitchBend
17import adafruit_ble_midi
18
19# Use default HID descriptor
20midi_service = adafruit_ble_midi.MIDIService()
21advertisement = ProvideServicesAdvertisement(midi_service)
22# advertisement.appearance = 961
23
24ble = adafruit_ble.BLERadio()
25if ble.connected:
26 for c in ble.connections:
27 c.disconnect()
28
29midi = adafruit_midi.MIDI(midi_out=midi_service, out_channel=0)
30
31print("advertising")
32ble.start_advertising(advertisement)
33
34while True:
35 print("Waiting for connection")
36 while not ble.connected:
37 pass
38 print("Connected")
39 # Sleep briefly so client can get ready and send setup
40 # writes to the MIDIService. 0.5secs was insufficient.
41 time.sleep(1.0)
42 # Send one unique NoteOn/Off at the beginning to check that the
43 # delay is sufficient.
44 midi.send(NoteOn(20, 99))
45 midi.send(NoteOff(20, 99))
46 while ble.connected:
47 midi.send(NoteOn(44, 120)) # G sharp 2nd octave
48 time.sleep(0.25)
49 a_pitch_bend = PitchBend(random.randint(0, 16383))
50 midi.send(a_pitch_bend)
51 time.sleep(0.25)
52 # note how a list of messages can be used
53 midi.send([NoteOff("G#2", 120), ControlChange(3, 44)])
54 time.sleep(0.5)
55 print("Disconnected")
56 print()
57 ble.start_advertising(advertisement)