Friday, August 15, 2025

use a raspberry pi to make your midi controller wireless BLE to connect to ios

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