Every time someone hears "gamepad as a MIDI controller" their first question is "yeah but isn't the latency terrible?" Spoiler: it isn't. We ran a 10,000-sample benchmark of a DualSense, an Xbox Series X controller, and a Switch Pro pad against three pieces of dedicated MIDI hardware. The numbers are public, the methodology is reproducible, and the answer is: USB gamepads are within 1–2 ms of a $700 Push 3. Behold the data.
- DualSense USB: 4.2 ms HID-to-MIDI median, 5.1 ms p99.
- Xbox Series X USB: 3.8 ms median, 4.6 ms p99.
- Push 3: 3.1 ms median, 3.9 ms p99.
- Novation Launchpad X: 4.4 ms median.
- DualSense Bluetooth: 12.7 ms median, 18.3 ms p99 — fine for production, not for live drumming.
What we measured
End-to-end MIDI latency has three components:
- Input-to-bridge: from the moment the button is pressed to the moment the bridge process receives a HID event.
- Bridge-to-DAW: from HID event to the MIDI message landing in the DAW's input queue.
- DAW-to-audio: from MIDI in to sound out the audio interface. Dominated by audio buffer size, not the controller.
For a fair comparison against hardware MIDI controllers we only measure the first two components — call it "HID-to-MIDI" or "controller-to-DAW". The audio buffer is constant across all tests.
How we measured it
The bridge has a built-in benchmark mode that timestamps every HID event with clock_gettime(CLOCK_MONOTONIC_RAW) on Linux/macOS or QueryPerformanceCounter on Windows. A small Reaper script timestamps every incoming MIDI message with the same clock. Subtracting gives the HID-to-MIDI delta with sub-microsecond resolution.
# Run the benchmark for 10,000 samples
$ ucmidi benchmark --device dualsense --transport usb --samples 10000
[1/3] Capturing HID events...
[2/3] Capturing MIDI events from loopback...
[3/3] Computing deltas...
Median: 4.21 ms
p50: 4.20 ms
p95: 4.78 ms
p99: 5.12 ms
p99.9: 6.04 ms
Max: 7.18 ms
Stddev: 0.41 ms
Samples: 10000 / 10000
Report saved to: ./benchmark-2026-05-27-1421.json The numbers
Tested on an M2 MacBook Pro running macOS 14.6, audio buffer 64 samples at 48 kHz. Same room, same USB cable where possible, same ten-second warm-up.
| Controller | Transport | Median | p99 | Cost (AUD) |
|---|---|---|---|---|
| Ableton Push 3 | USB-C | 3.1 ms | 3.9 ms | $1,499 |
| Xbox Series X controller | USB-C | 3.8 ms | 4.6 ms | $89 |
| Akai MPK Mini Mk3 | USB | 4.1 ms | 5.0 ms | $129 |
| DualSense | USB-C | 4.2 ms | 5.1 ms | $109 |
| Novation Launchpad X | USB | 4.4 ms | 5.5 ms | $269 |
| Switch Pro Controller | USB | 4.6 ms | 5.4 ms | $99 |
| DualSense Edge | USB-C | 3.9 ms | 4.7 ms | $329 |
| DualSense | Bluetooth | 12.7 ms | 18.3 ms | — |
| Xbox Series X | Bluetooth | 14.1 ms | 21.0 ms | — |
The Push 3 wins, as you'd hope for $1,499. But the Xbox Series controller comes in under the Launchpad X and within 0.7 ms of the Push. The DualSense is essentially tied with an Akai MPK Mini. For 99% of producers this is well under the threshold of perception (~10 ms is where most humans start noticing).
Get Universal Controller MIDI Pro — $49 →Why the bridge isn't adding latency
The bridge runs in a single high-priority thread that does nothing but read HID events and write MIDI bytes. On macOS that thread gets thread_policy_set with THREAD_TIME_CONSTRAINT_POLICY. On Linux it's SCHED_FIFO at priority 80. On Windows it's MMCSS "Pro Audio" class. The total in-process time from HID event to MIDI write is ~0.3 ms — the rest is OS scheduling and the virtual port.
// The hot loop, simplified
while (running) {
HidEvent ev = hid_read_blocking(device);
const auto t0 = clock_now();
MidiMessage msg = map_event(ev);
port.write(msg.bytes, msg.length);
if (benchmark_mode) log_delta(ev.timestamp, t0);
} Bluetooth is the trade-off
Bluetooth is convenient. Bluetooth is also 8–14 ms slower than USB on every gamepad we tested. The DualSense uses Bluetooth Classic with a 7.5 ms connection interval; the Xbox Series uses BLE HID with a 15 ms interval (configurable down to 7.5 on some host stacks). Neither is suitable for kick-drum-precise live triggering. For producing pads, sweeping filters, or mapping macros to a couch session, Bluetooth is fine.
Limitations of the benchmark
- USB hubs add jitter. A direct laptop port is 0.2 ms tighter than going through a hub.
- USB 3.x ports occasionally renegotiate. If you see a 12 ms outlier, blame USB power negotiation, not the bridge.
- The benchmark measures one event at a time. Pressing four buttons simultaneously increases p99 by ~0.4 ms due to HID coalescing.
- Windows numbers are 1–2 ms higher across the board due to the WDM driver layer. Windows 11 24H2 with MIDI Services closes most of that gap.
TL;DR — if anyone tells you gamepads are too laggy for serious MIDI work, send them the JSON. Run the benchmark yourself with Universal Controller MIDI and post your numbers.