Universal Controller MIDI
Blog Benchmark 9 min read

Gamepad MIDI Latency Benchmark — Real Numbers vs Hardware Controllers

We measured gamepad-to-MIDI round-trip latency against a Novation Launchpad, a Push 3, and a USB MIDI keyboard. The numbers are closer than you think.

By Aidxn Design

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.

TL;DR
  • 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.

ControllerTransportMedianp99Cost (AUD)
Ableton Push 3USB-C3.1 ms3.9 ms$1,499
Xbox Series X controllerUSB-C3.8 ms4.6 ms$89
Akai MPK Mini Mk3USB4.1 ms5.0 ms$129
DualSenseUSB-C4.2 ms5.1 ms$109
Novation Launchpad XUSB4.4 ms5.5 ms$269
Switch Pro ControllerUSB4.6 ms5.4 ms$99
DualSense EdgeUSB-C3.9 ms4.7 ms$329
DualSenseBluetooth12.7 ms18.3 ms
Xbox Series XBluetooth14.1 ms21.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.

Keep reading

More setup walkthroughs