Bluetooth MIDI latency is the number people quote when they want to scare you off wireless gamepad rigs. Sometimes the scare is justified — a Wi-Fi router parked next to your laptop will absolutely ruin your downbeat. Sometimes it is folklore. This post lays out the actual numbers we measured for BLE MIDI versus USB MIDI from a DualSense, Xbox Series, and Switch Pro controller, explains where the jitter comes from, and lists the fixes that move the needle.
- BLE MIDI typical: 7–20 ms round trip. Median ~10 ms on Apple Silicon, ~14 ms on Windows 11.
- USB-C wired: 1–3 ms. Roughly 4–7× faster than BLE.
- Jitter source #1: BLE connection interval. 7.5 ms = tightest, 15 ms = battery-friendly.
- Practical limit: BLE MIDI 1.0 caps payload at ~20 bytes/packet. Fine for CC, painful for sysex.
- The fix nobody mentions: kill 2.4 GHz Wi-Fi on the host. Single biggest jitter win.
How Bluetooth MIDI actually moves data
BLE MIDI is defined by Apple's Bluetooth Low Energy for MIDI spec (everyone else followed). It rides on a GATT characteristic with a maximum payload of 20 bytes per packet plus a 2-byte BLE header, scheduled on the connection interval the host negotiated when the controller paired. Apple Silicon Macs negotiate 7.5 ms by default; Windows 11 hovers around 11.25 ms; older Intel Macs sit at 15 ms.
That interval is the floor. A Note On created at the 8 ms mark on a 15 ms-interval link cannot leave until 15 ms. If the packet drops, it waits for the next interval — that is the jitter you hear when a drum hit lands 25 ms late instead of 10. Universal Controller MIDI on the bridge aggregates CC changes inside a single 20-byte packet to dodge wasted slots, but the connection interval is set by the operating system, not by us.
Measured latency — DualSense, Xbox, Switch Pro
Each controller paired over BLE on a M2 MacBook Air running macOS 14.7 and a Windows 11 laptop with a Realtek BLE 5.2 radio. The bridge's probe fires a Note On, the controller replies with a Note Off (via virtual rumble loopback), the round trip is timed across 1,000 samples. Wired USB-C numbers are from the same probe.
| Controller | Transport | Median (ms) | p95 (ms) | Worst (ms) |
|---|---|---|---|---|
| DualSense (PS5) | BLE, macOS | 9.2 | 14.8 | 27 |
| DualSense (PS5) | BLE, Windows | 13.6 | 19.4 | 38 |
| DualSense (PS5) | USB-C | 1.4 | 2.1 | 4 |
| Xbox Series | BLE, macOS | 11.0 | 17.2 | 31 |
| Xbox Series | BLE, Windows | 14.8 | 22.1 | 44 |
| Switch Pro | BLE, macOS | 10.4 | 16.0 | 29 |
| Switch Pro | USB-C | 2.8 | 3.9 | 6 |
The Xbox Series radio is noticeably worse on Windows — odd, given the host. It is the only controller in the lineup that does not implement BLE MIDI natively; the bridge wraps the HID input and converts to MIDI in software, which adds a ~2 ms host-side hop on top of the radio latency.
Where the jitter actually comes from
Latency is the median — jitter is the spread. For live performance jitter hurts more than absolute latency, because the human brain locks onto a consistent offset within ~50 ms but loses the groove when hits land at unpredictable times. Four sources, ranked by impact:
- 2.4 GHz Wi-Fi sharing the band. Worst offender. A nearby Wi-Fi 6 access point doing channel-hopping over 2.4 GHz will steal 30–60% of your BLE slots during bursts.
- BLE connection interval. Locked by the OS. 7.5 ms is best, 15 ms doubles your worst-case wait.
- USB hubs on the host. Active USB 3.0 hubs are notorious for radiating noise at 2.4 GHz. Move the radio away or use USB-C direct.
- Battery saver modes. macOS Low Power and Windows Battery Saver both clamp Bluetooth radio activity. Plug in or turn off.
The fixes that actually work
We tested every "BLE MIDI tip" we found. Most are folklore. These four moved the needle in our benchmarks:
- Switch your router to 5 GHz-only. Median latency dropped from 13.6 ms to 9.4 ms on Windows when the lab router stopped broadcasting on 2.4 GHz.
- Disable Bluetooth audio profiles. If your headphones are on the same radio, they hog bandwidth. Wired headphones for tracking.
- Use the bridge's CC aggregation. Five CCs in one 20-byte packet costs one slot. Five CCs in five packets costs five slots. The bridge does this automatically when you check
Aggregate CCin Settings → BLE. - Update controller firmware. The Feb 2026 DualSense firmware shipped a BLE stack revision that cut p95 jitter from 22 ms to 14.8 ms on our test rig. Free upgrade.
# Bridge BLE config — fine-tuning for live use
ble.connection_interval_ms = 7.5 # macOS only, Windows locked at 11.25
ble.aggregate_cc = true # pack CCs into single 20-byte packets
ble.sysex_chunk_bytes = 16 # leave headroom for the 2-byte BLE header
ble.fallback_to_usb_if_jitter_above_ms = 18
ble.log_packets = false # turn on only for debugging BLE MIDI packet anatomy
BLE MIDI prepends two timestamp bytes (a 7-bit "header" byte plus a 7-bit "timestamp" byte) to every MIDI message. The full packet looks like this for a Note On on channel 1 sent at timestamp 245 ms:
| Byte | Hex | Meaning |
|---|---|---|
| 0 | 0x81 | BLE header — high bit + timestamp high (5 bits) |
| 1 | 0xF5 | BLE timestamp low — high bit + timestamp low (7 bits) |
| 2 | 0x90 | MIDI Note On, channel 1 |
| 3 | 0x3C | Note number (60 = C4) |
| 4 | 0x64 | Velocity 100 |
That is 5 bytes for a single Note On. A USB MIDI Note On is 3 bytes. The 67% overhead is the price of BLE's 13-bit millisecond timestamp, which lets the receiver reconstruct event timing even when packets arrive late or out of order. Worth the cost when it works.
When to give up and plug in
Wireless is sweet when you are jamming on the couch and miss-timed hits do not matter. For anything tracked — drum performance to a click, sample replacement, sidechain triggers — wired wins every time. The Universal Controller MIDI bridge will hot-swap transports without dropping your mapping: BLE drops, USB-C plug-in, mapping continues. Use BLE for sketching, USB-C for recording. That is the workflow.
For a deeper dive on cross-rig latency see the gamepad MIDI latency benchmark, or compare to networked rigs in RTP-MIDI vs USB MIDI. If BLE keeps dropping mid-song, the DualSense disconnect fix covers the OS-level culprits.