Universal Controller MIDI

Core concepts

What is a virtual MIDI port?

A virtual MIDI port is a software-only cable between two apps on the same machine. Here's why Universal Controller MIDI needs one — and why your DAW already speaks it.

Updated

A virtual MIDI port turns your DualSense into a $0 MIDI controller your DAW already trusts — no driver install, no plugin, no DAW-specific build. It's a software cable: a named endpoint that one app writes to and another reads from, in real time, on the same machine.

Universal Controller MIDI is the writer. Your DAW is the reader. The port is the wire between them. Once you grok that, every other concept in these docs clicks into place.

The cable that doesn't exist

Physical MIDI is a 5-pin DIN cable carrying serial bytes at 31,250 baud. Slow, but rock-solid. A virtual port skips the wire entirely and pipes those same bytes through the OS at memory speed — sub-millisecond — using CoreMIDI on macOS, WinMM on Windows, and ALSA on Linux.

The bytes are identical. The protocol is identical. Your DAW cannot tell the difference between a $200 USB controller and the port Universal Controller MIDI exposes — which is exactly the point.

Where the port lives

The port is named — default Universal Controller — and it shows up in your DAW's MIDI input list the moment Universal Controller MIDI launches. Close the app, the port vanishes. Reopen, it's back.

On macOS the port is created through the system's IAC driver (Inter-Application Communication). On Windows we ship a kernel-mode helper that exposes the port natively. On Linux ALSA's sequencer handles it without any extra setup.

Platform mechanics at a glance

Three OSes, three plumbing layers, one outcome. Here's how the same virtual port looks on each platform — useful when you're debugging a "DAW doesn't see the port" issue and need to know which API to poke at:

PlatformAPIPort typeSetup neededLatency
macOSCoreMIDI / IACIAC busEnable IAC once in Audio MIDI Setup~0.3 ms
Windows 10/11WinMM + teVirtualMIDIKernel-mode pairAuto on first launch~0.4 ms
LinuxALSA sequencerSnd-seq clientNone — kernel built-in~0.2 ms
iPadOSCoreMIDI NetworkNetwork sessionPair via Audio MIDI Setup on Mac~2 ms

Setting one up

On Windows and Linux the port is auto-created on first launch — zero clicks. macOS needs a one-time Audio MIDI Setup tweak to enable IAC. Two-minute job, documented step-by-step:

Once enabled, you can verify the port exists from the command line — useful when a DAW refuses to list it and you need to prove the port is alive at the OS level:

# macOS — list every CoreMIDI source
system_profiler SPMIDIDataType | grep -A2 "Universal Controller"

# Linux — list every ALSA sequencer client
aconnect -l | grep -i "universal controller"

Renaming the port

The default name works fine — but if you run two instances (rare, but power-user territory) or want a label that matches your DAW template, you can rename. The new name shows up in every DAW the next time you reopen its MIDI prefs.

{
  "virtualPort": {
    "name": "DualSense Bridge",
    "enabled": true,
    "channels": [1, 2, 3, 4]
  }
}

Common mistakes

  • Forgetting to enable IAC on macOS. The driver ships disabled. Audio MIDI Setup → IAC Driver → tick "Device is online". The app warns you if it's off, but readers skim the warning.
  • Picking the port as an output, not an input. Your DAW reads from it — that's a MIDI input in the DAW's prefs. If you set it as an output, you're routing the DAW's MIDI into the app, which does nothing useful.
  • Selecting the wrong channel. The app sends on channel 1 by default. If your DAW track is set to "Channel 2 only", you'll see no input. Set the track to All Channels while testing.
  • Running two apps writing to the same port. You can, but events interleave. If something feels off, quit any other MIDI bridge utilities first.
  • Expecting the port to survive a logout. The port lives with the app process. Sleep is fine. Logout, restart, force-quit — port goes, app reopens it on next launch.

The takeaway

You don't need to understand CoreMIDI internals to use the app. You need to know that a virtual port exists, your DAW will see it, and nothing on the gamepad side needs configuring before the DAW side works. Next stop: what MIDI messages actually look like.

Edit this page on GitHub Updated
ESC

Type to search.