# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries # SPDX-License-Identifier: MIT """ This example sends MIDI out. It sends NoteOn and then NoteOff with a random pitch bend. """ import random import time import adafruit_ble import adafruit_midi from adafruit_ble.advertising.standard import ProvideServicesAdvertisement from adafruit_midi.control_change import ControlChange from adafruit_midi.note_off import NoteOff from adafruit_midi.note_on import NoteOn from adafruit_midi.pitch_bend import PitchBend import adafruit_ble_midi # Use default HID descriptor midi_service = adafruit_ble_midi.MIDIService() advertisement = ProvideServicesAdvertisement(midi_service) # advertisement.appearance = 961 ble = adafruit_ble.BLERadio() if ble.connected: for c in ble.connections: c.disconnect() midi = adafruit_midi.MIDI(midi_out=midi_service, out_channel=0) print("advertising") ble.start_advertising(advertisement) while True: print("Waiting for connection") while not ble.connected: pass print("Connected; waiting for pairing") for connection in ble.connections: while not connection.paired: if not connection.connected: break if connection.paired: print("Paired; sending MIDI messages") # Sleep briefly so client can get ready and send setup # writes to the MIDIService. 0.5secs was insufficient. time.sleep(3.0) # Send one unique NoteOn/Off at the beginning to check that the # delay is sufficient. midi.send(NoteOn(20, 99)) midi.send(NoteOff(20, 99)) while ble.connected: midi.send(NoteOn(44, 120)) # G sharp 2nd octave time.sleep(0.25) a_pitch_bend = PitchBend(random.randint(0, 16383)) midi.send(a_pitch_bend) time.sleep(0.25) # note how a list of messages can be used midi.send([NoteOff("G#2", 120), ControlChange(3, 44)]) time.sleep(0.5) print("Disconnected") print() ble.start_advertising(advertisement)