Hairless MIDISerial Bridge Logo

Hairless MIDI<->Serial Bridge is the easiest way to connect serial devices (like Arduinos) to send and receive MIDI signals. 100% Free Software. For Mac OS X, Windows & Linux.

Device to Bridge to MIDI Goodness

DownloadSystem RequirementsGetting StartedFAQ & Troubleshooting

Screenshot on Windows

Why Use Hairless MIDI<->Serial?


System Requirements


I never got around to making a demo video, but Greg was kind enough to let me link his Arduino tone synth video here:


Source Code

Source is all available on github.

Getting Started

  1. Launch “Hairless MIDI<->Serial Bridge” by double-clicking the application.

    App icon in OS X
  2. Plug in your serial MIDI device, if it’s not already.

  3. Select Preferences from the menu and check that the serial settings look correct (defaults are 115200bps, no flow control.)

  4. Choose your serial port from the “Serial port” box.

    Choosing serial port in OS X
  5. Launch the music app that will be sending and/or receiving MIDI data.

  6. Set your music app to send or receive MIDI data, if it’s not enabled already.

  7. Select your app’s MIDI port from the MIDI dropdown (on Windows, set both sides to connect to the same loopMIDI virtual MIDI port.)

    Up and running in OS X
  8. Go crazy! You should see lights flashing in the UI when MIDI and/or serial messages come through.

    You can enable “Debug MIDI messages” if you want to see all of the MIDI messages as they come through the bridge.

  9. To disable the bridge, uncheck the “Serial<->MIDI Bridge” checkbox at the top of the window.


I think I found a bug

Please report it via the Issues page on github.

If you’re a programmer and you’re feeling awesome, I’d love it if you could submit a github pull request (or a patch) along with the bug report. :)

How do I use the Arduino MIDI Library?

The Arduino MIDI Library is a newer MIDI library than Ardumidi, and seems to be the way of the future.

To use this library with Hairless Bridge, you can mostly follow their instructions exactly. The only difference is that you need to initialise the Serial port after the MIDI library, like this:

void setup() {

I can’t reprogram my Arduino any more

You need to disable the Serial<->MIDI Bridge before sending other data (like Arduino programming) to the serial port. You can do this by unchecking the “Serial<->MIDI Bridge” checkbox in the interface.

I’m not receiving any data

My MIDI program (Ableton, Logic) doesn’t show up in the dropdown

… On OS X

You may need to enable the “IAC” virtual MIDI port. This makes a “channel” that can join the two together:

… On Windows

You need to create a loopMIDI virtual port (there’s a link under System Requirements) to create a “channel” that joins the two together.

After intalling loopMIDI, launch it and click the ”+” button to create a new virtual MIDI port with the specified name. Both Hairless Bridge and your MIDI program should then connect to this port.

… On Linux

You may need to use the “Passthrough” port in Linux ALSA to join them together, or use the “Create Virtual MIDI channel” feature if it exists in your other program.

What similar software is available?

Can I use the native MIDI baud rate, 31250bps?

It would be nice to be able to use the hardware MIDI baud rate, 31250bps. This means the logical signals from Hairless Bridge can be used with real MIDI hardware, with just some electronics to adjust the serial voltages to become MIDI current loop signals.

Unfortunately, most computer serial ports can’t actually talk at 31250bps. For historical & technical reasons they’re usually limited to multiples of 300bps.

However, if you’re prepared to hack around a bit, the FTDI USB/Serial chip (as found on the Arduino Duemilanove) can talk the native MIDI rate. Have a read through these Arduino forum posts and you can see how to hack the driver on OS X or Windows, so that when you choose a different rate (like 38400bps) it is actually 31250, behind the scenes.

This is not a supported configuration for Hairless Bridge, but it can be made to work in some circumstances.

Where did the name come from?

Do you see any hairy yaks around here? No? Hairless it is. :)

That is also where the poor excuse for an icon (supposed to look like clippers) came from. :)

Why was this initially created?

For a workshop, ”Drop-Dead Simple MIDI Controllers with Arduino”, as part of the Electrofringe 2011 festival in Newcastle, Australia.

While preparing I couldn’t find any MIDI<->Serial bridges that were fully cross-platform, low latency and didn’t have setup dependencies. So I decided to shave a yak and make one. :)


Big thanks to the authors of the Free Software libraries that Hairless MIDI<->Serial Bridge builds on. Those are Qt, qextserialport, RtMidi and ArduMIDI, from the ttymidi project.

More details can be found in the About Box of Hairless MIDI<->Serial Bridge.


Hairless MIDI<->Serial Bridge is released under the GNU Lesser General Public License 2.1, as described in the About Box for compiled versions and the LICENSE file for source versions.

Incorporated libraries are sometimes relicensed with additional terms, also as described in these places.

This page and the Hairless MIDI<->Serial Bridge are Copyright (c) 2011 Angus Gratton.