sudo apt update
sudo apt install python3-pip libasound2-dev
pip3 install mido python-rtmidi bleak
#!/usr/bin/env python3
import mido
import asyncio
from bleak import BleakClient, BleakScanner
# UUID for BLE MIDI characteristic
MIDI_CHAR_UUID = "03B80E5A-EDE8-4B33-A751-6CE34EC4C700"
# Name of your iPad's BLE MIDI device
BLE_DEVICE_NAME = "iPad"
async def find_device():
devices = await BleakScanner.discover()
for d in devices:
if BLE_DEVICE_NAME in d.name:
return d.address
return None
async def send_midi(client, msg_bytes):
if client.is_connected:
await client.write_gatt_char(MIDI_CHAR_UUID, msg_bytes)
async def midi_bridge():
# Find BLE MIDI device
address = await find_device()
if not address:
print(f"{BLE_DEVICE_NAME} not found. Make sure it’s in pairing mode.")
return
print(f"Connecting to {BLE_DEVICE_NAME} ({address})...")
async with BleakClient(address) as client:
if not client.is_connected:
print("Failed to connect.")
return
print("Connected. Listening for MIDI input...")
# Open the first available MIDI input
midi_in_name = mido.get_input_names()[0]
with mido.open_input(midi_in_name) as inport:
print(f"Using MIDI input: {midi_in_name}")
for msg in inport:
# Send raw MIDI bytes over BLE
await send_midi(client, msg.bytes())
if __name__ == "__main__":
asyncio.run(midi_bridge())
No comments:
Post a Comment