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