Universal Controller MIDI

Getting started

Connect a controller over Bluetooth

Pair a game controller to Universal Controller MIDI over Bluetooth on macOS, Windows, and Linux. Per-OS pairing modes and latency notes.

Updated

Bluetooth adds 10–18 ms of latency on top of the 4–7 ms USB baseline — fine for live performance and writing, less great for tight recorded drums. Universal Controller MIDI uses your OS's native Bluetooth stack, no custom drivers, no third-party shims.

Put the controller into pairing mode

Pairing-mode triggers vary by controller. The most common:

  • DualSense (PS5): hold PS + Create until the light bar flashes blue.
  • DualShock 4 (PS4): hold PS + Share until the light bar flashes white.
  • Xbox Series X|S: press the small pair button on top until the Xbox button flashes.
  • Switch Pro: press the sync button next to the USB-C port for ~2 s.

Pairing UI flow by OS

The Bluetooth panes have wildly different naming conventions across operating systems. Here's the path on each, plus how the controller will appear in the discoverable list.

OS Path to pairing UI Discoverable name Notes
macOS 14+System Settings → Bluetooth"DualSense Wireless Controller" / "Xbox Wireless Controller"Auto-reconnects on wake.
macOS 12–13System Preferences → BluetoothSameOlder pane, same flow.
Windows 11Settings → Bluetooth & devices → Add device → Bluetooth"Wireless Controller"May pair as generic HID; re-pair if so.
Windows 10Settings → Devices → Bluetooth & other devices"Wireless Controller"Known polling issue with BT audio active.
GNOME 45+Settings → Bluetooth"DualSense Wireless Controller"Toggle to "Always trust" after first pair.
KDE Plasma 6System Settings → Bluetooth → DevicesSame as GNOMESame as GNOME.
CLI (any Linux)bluetoothctlMAC + name in scan on outputMost reliable on headless systems.

Pair on macOS

Open System Settings → Bluetooth. The controller appears as "DualSense Wireless Controller", "Xbox Wireless Controller", or similar. Click Connect. The app sees it within ~400 ms of connection.

# Sanity check from the terminal
system_profiler SPBluetoothDataType | grep -A 3 -i controller

# Force-disconnect a stuck pairing without opening the GUI
blueutil --disconnect $(blueutil --paired | grep -i controller | awk '{print $2}' | tr -d ',')

Pair on Windows

Open Settings → Bluetooth & devices → Add device → Bluetooth. Pick the controller from the list and confirm. Windows occasionally pairs a controller as a generic HID device — if axes feel wrong, unpair and re-pair after fully powering the controller off.

Pair on Linux

Use bluetoothctl from the terminal:

bluetoothctl
power on
agent on
scan on
# wait for the MAC to appear, then:
pair AA:BB:CC:DD:EE:FF
trust AA:BB:CC:DD:EE:FF
connect AA:BB:CC:DD:EE:FF

GNOME and KDE Bluetooth settings work too if you prefer GUI. Either way, the app detects the controller as soon as the kernel's hidraw node appears.

Re-pair after a phone steals the controller

DualSense and DualShock 4 controllers remember exactly one host. Pairing your phone in between blows away the desktop pairing — and silently. The fix is a full reset, then re-pair fresh:

# DualSense / DS4 hardware reset
# 1. Power off the controller (hold PS for ~10s)
# 2. Locate the pinhole reset button on the back, near the L2 trigger
# 3. Press it with a paperclip for 5 seconds
# 4. Re-enter pairing mode (PS + Create on DualSense)

# On the host — remove the stale pairing first
# macOS:
blueutil --unpair AA:BB:CC:DD:EE:FF
# Linux:
bluetoothctl remove AA:BB:CC:DD:EE:FF

What if it doesn't work?

Five common failure modes for Bluetooth pairing — these account for most support tickets.

  • Controller never appears in the discoverable list — pairing-mode timeout. Hold the pair combo for the full duration (DualSense: 5 s minimum). Light bar must be actively flashing, not solid.
  • Pairs successfully but disconnects after 30 s — kernel quirk on Linux. Run sudo systemctl restart bluetooth, then re-trust the controller with bluetoothctl trust AA:BB:CC:DD:EE:FF.
  • Axes inverted or stuck on Windows — paired as generic HID. Unpair, power-cycle the controller fully (hold PS 10 s), and re-pair after Windows has had ~10 seconds to clear its cache.
  • Adaptive triggers and haptics do nothing over BT on macOS — feature requires macOS 14+. On Sonoma it works; on Ventura, only over USB.
  • Two controllers paired, only one appears in the app — Bluetooth host can saturate at 7 active links. Disconnect AirPods or other BT peripherals, then re-launch UCM.

What's next

Wireless misbehaving? See Bluetooth troubleshooting. Otherwise: verify everything works.

Edit this page on GitHub Updated
ESC

Type to search.