Last modified:
Update 13-Sept-2019: the information in this post (originally from Sept 2016) is still relevant for OSX 10.14. Reference to a new, easy-to-use software MIDI keyboard (MidiKeys) has been added.
Note: this page describes setup for OS X 10.11-10.14. Some older versions like 10.10 and 10.9 are essentially the same where MIDI is concerned, but your millage may vary if you have a vastly older OS versions (namely those older than 10.6).
Although a basic MIDI setup on Mac OS X is typically easier than on Windows (to go beyond the default Windows synth anyway), it still requires some work. Here I will try to give a comprehensive overview of what you need to work with MIDI on Mac, particularly for interactive MIDI applications. I am also focusing on free setup, so the instructions on this page do not involve spending money to get things working.
In brief, to work with MIDI you need two things at a minimum:
- Virtual MIDI ports (many devices create these automatically, but some programs do not)
- A synthesizer
You may also want a way to get MIDI input without extra hardware. All of these topics are covered here.
First though, let’s talk about exactly what MIDI is. Some of this general information on MIDI is the same as on my Working with MIDI on Windows page. If you know about MIDI already, feel free to skip right to the section on Virtual MIDI ports.
1. MIDI
MIDI stands for Musical Instrument Digital Interface. It is a protocol for communicating information between various devices and it has been around for over 30 years. For various reasons, many people new to MIDI struggle with what exactly it is and, therefore, often misunderstand what it and programs using it can and cannot do. Here are some quick facts that are often stumbling points for people that are new to working with MIDI and audio, each of which will be addressed in more detail later:
- MIDI is a way of communicating between devices with certain message formats. For example, a MIDI controller can communicate to another device, perhaps a synthesizer, when a pitch should start and when it should end—much like the information communicated by a note on a paper score. In fact, a MIDI file is actually pretty close to a paper score in terms of the types of information it captures.
- MIDI is not sound! You cannot “hear” MIDI any more than you can “hear” a paper score
by itself. MIDI controllers do not create sound by themselves. Things that make sound from MIDI must interpret what they are told via the MIDI protocol. These devices are synthesizers, and they interact with audio devices to create sound. - Generally, your on-board sound chip and many external soundcards know nothing special
about MIDI and they are not MIDI synthesizers. If you buy a brand new laptop, its sound chip will not deal with MIDI messages and is not a MIDI synthesizer.
Note that a “MIDI device” does not have to be a piece of hardware. There are plenty of software “MIDI devices” that can be called as such simply because they show up in device lists just like hardware devices.
1.1 MIDI Messages
MIDI information is broken into messages, which are sent over some communication medium. Messages can refer to “programs” or patches (think of it as an instrument name), channels, pitches, and so on. Channels can be thought of like staffs on a digital music score. Some examples of MIDI messages include:
- Note on: start playing a particular pitch on a particular channel at a particular volume.
- Note off: stop playing a particular pitch on a particular channel.
- Program change: assign a new instrument to a channel.
Once again, these messages must be interpreted by a synthesizer in order to create sound. Sometimes MIDI messages are also called MIDI events.
MIDI-related programs that do not show up in the device manager when running are not MIDI
devices.
1.2 Controllers vs. Synthesizers
The difference between a MIDI controller and synthesizer is quite simple:
- A MIDI Controller is a device that allows a human to push some buttons or keys and generate MIDI messages or events. In: human ineraction. Out: MIDI messages. There is no sound involved.
- A MIDI synthesizer is a device that receives MIDI messages and produces sound. In: MIDI messages. Out: sound via an audio device or audio jack.
In a hardware-only setup, a MIDI controller (like a keyboard) would be physically connected to a MIDI synthesizer, to which speakers or headphones would then be connected. Perhaps some of the sound vs. MIDI confusion that the music community experiences is due to the fact that may keyboards actually include both of these elements: they are all-in-one MIDI controllers and synthesizers. However, any such device that features both “MIDI in” and “MIDI out” ports can usually be used as one or the other independently.
There is also a third category of devices that simply re-rout and/or re-interpret MIDI messages. As hardware, these devices are usually peripherals used to do specialized tasks like duplicating a stream of MIDI messages, merging MIDI message streams, or allowing a foot pedal to send messages down a regular MIDI cable (foot pedals meant for use with MIDI equipment typically have 1/4-inch TS or TRS plugs and send control voltage that has to be interpreted by something as a series of MIDI messages). Software also exists to re-rout, merge, and split MIDI messages.
2. Virtual MIDI Ports
Note: many common cases of using MIDI on Mac do NOT require setting up new virtual MIDI ports. Many devices (software and hardware) create their own ports. However, if you need to relay messages between two or more programs that do NOT create their own ports, you will need to follow the steps in this section.
A virtual MIDI port is a piece of software that runs in the background to send/receive MIDI messages from other programs or hardware devices. Virtual MIDI ports allow communication between MIDI-related programs that are not perceived by the operating system as MIDI devices. In other words, these programs might be able to send and receive MIDI messages, but they can’t “see” each other directly—but they will both be able to see a virtual MIDI port and can, therefore, use it to communicate. Hardware ports can be used similarly, although it often requires using a MIDI cable to create an ungainly self-loop (connecting a device’s output to its own input).
OS X comes with the ability to set up new virtual MIDI ports. Typically there are none by default and you have to add them manually. Here’s how to get to the screen where you can configure your ports:
- Open up Finder and click on “Applications.”
- Search for “Audio MIDI Setup” – you should see a little keyboard icon show up. Double click on it.
- If you are lucky, you will get 2-3 windows that open up and one of them will be called “MIDI Studio.” If you don’t see that window, go up to the top left of the screen and go to
Audio MIDI Setup > Preferences and make sure the box called “MIDI Window” is ticked. - Once you have MIDI Studio open, double-click on “IAC Driver.”
- There should be a list called “Ports.” If this is empty, you don’t have any ports set up. To add a new port, click the “+” button. This port will now always be there (potentially unless you upgrade your OS version – then you might need to go through these steps again).
- You can manage the ports you have as you need new ones or if you want to remove some later. Typically it’s good to have at least 2 ports at any given time. You can give your ports meaningful names if you want by double-clicking the name of the port.
WARNING: you should never send to and receive from the same port within the same program. Doing so creates a feedback loop of never-ending messages. This is one of the reasons it’s good to have two different ports available when you are experimenting with hooking MIDI-based programs together. Some situations require even more ports to avoid feedback loops, but two is good enough for most cases.
3. Synthesizers
As described above, a synthesizer is the thing that actually makes sound for you. Both hardware and software synthesizers exist. For Macs, typically the easiest solution is SimpleSynth. You can download and install this program and keep it running in the background at all times. This will give you a basic set of standard MIDI sounds. SimplySynth creates its own virtual MIDI port while it is running. If you have no other ports set up, it will be the default output device. You can also set SimpleSynth to take input from other ports or input devices.
If you want to use sound font (SF2) files, another great option is Sforzando. This program behaves much like SimpleSynth and is very easy to configure, but you need to already have some SF2 files to use with it. So, if you currently have some virtual instruments in SF2 format and want to use them, give Sforzando a try. Like SimpleSynth, Sforzando creates its own virtual MIDI port while it is running, but it can also take input from other ports/devices.
IMPORTANT: Make sure you start SimpleSynth/Sforzando first, before opening any other MIDI software! If you already had other programs open, close them and re-open them after starting the synthesizer.
4. Routing MIDI Messages
To turn MIDI messages into sound, you need to get them from the source producing them to the synthesizer that will interpret them. The producing program may be a MIDI file player, a physical MIDI controller, or a software MIDI controller.
SimpleSynth happens to come with its own virtual MIDI port functionality. You can change which port SimpleSynth listens to for MIDI messages. Regardless of which port you use, you want the following configuration overall:
Program making MIDI messages –> a particular port –> SimpleSynth
Your message-producing program should send to the same port that SimpleSynth is set to receive from. If you have multiple programs creating MIDI messages, you can set all of them to send to the same port that SimpleSynth is listening to.
If you have a situation where you are taking MIDI input from one device, processing it with some other program, and then outputing new messages to a synthesizer, you MUST have two different ports involved:
MIDI message generator –> Port1 –> SomeOtherProgram –> Port2 –> SimpleSynth
If you try to use just a single port, you’ll get a feedback loop.
Most USB hardware MIDI controllers make their own port show up on the system when plugged in. In these cases, you can have a somewhat simpler setup:
HardwareNamePort –> SomeOtherProgram –> SomeVirtualPort -> SimpleSynth
5. Getting MIDI Input
Sometimes it’s nice to be able to get MIDI input without having a physical MIDI controller to plug into your computer. For these situations, I recommend MidiKeys (simplest option) or Virtual Midi Piano Keyboard (VMPK). To send MIDI messages from these programs to others, you need a virtual MIDI port set up as described in previous sections.
Using MidiKeys
The nice thing about MidiKeys is that you just need to fire it up before the program that will be accepting MIDI messages from it. The downside is that you must do Ctrl+Click > Open the first time you run it (later versions of OS X aren’t friendly to 3rd party apps opening with double-click the first time) and the the keyboard mapping is a little funky. Still, it is by far the simplest solution for getting a keyboard-based MIDI controller on OS X. It can send to either its own port or any other port registered with the operating system at the time.
Using VMPK
Make sure you have virtual MIDI ports set up as needed BEFORE starting up VMPK. VMPK also acts as its own synthesizer, so if you want it to act purely as a controller then you need to configure it as follows:
- Go to Edit > MIDI Connections
- Tick “Enable MIDI Thru on MIDI Output”
- Tick “Show Advanced Connections”
- Set the MIDI OUT Driver to be “CoreMIDI”
- Set the Output MIDI Connection to be your desired virtual port. Note: if you don’t tick “show advanced connections,” you may not see the ports you’re looking for.
If you want to set VMPK to only play when clicking instead of making sound whenever the mouse passes over the keyboard, you can do the following:
- Go to vmpk > Preferences
- Untick “Enable Touch Screen Input”
6. Playing MIDI Files
I recommend two approaches for playing MIDI files if you don’t care where the MIDI messages are sent:
- MuseScore – useful for making scores and playing simple MIDI files. Note: it is primarily intended for MIDI files that have very “clean” timing (in other words, not files recorded from live human input).
- QuickTime
If you want to play a MIDI file and customize the output device, most programs available on Mac seem to cost money. At present I don’t have a good alternative to recommend. When I find one, I will update this page accordingly.
Good guide, thanks. However, I found that VMPK crashed on OSX 10.8.5, whereas MidiKeys worked as expected.
One thing I am now wondering is how can I get MidiKeys to output to an external synth, for example to an ArduinoBoy (GameBoy synth). Presumably via the USB, and a USB to MIDI convertor, that is to say USB to DIN..?
I’m not familiar with the connectivity available on the particular hardware you’ve got. If it has standard 5-pin MIDI connectors, then just search for “USB MIDI cable” and you’ll find a bunch of fairly cheap converters that are USB A on one end with 5-pin MIDI in/out cables on the other. They are class compliant and therefore typically compatible with older operating system versions. When plugged in, those cables will show up as MIDI in/out devices to the operating system, letting you send from MidiKeys by setting its output to the USB device and then plugging the 5-pin cable into the other hardware device.
Many Thanks!
I started to use a SL 88 studiologic with Garageband. But GB could not use 2 MIDI channels.
That’s poor. Want to sell expensive software.
Simple Synth allows me to use both MIDI channels via USB. Now all the nice setup at the SL88 makes a change at the sound. That was not the case before.
I have a Yamaha Disklavier that I drive with a windows 7 based laptop using Cakewalk Home studio (version 9 – an older software from Cakewalk). Is there an equivalent easy to use MIDI sequencer program for a Macbook Pro that I could also use to drive the Disklavier via the MIDI interface. Thanks for any help
I primarily use REAPER when I’m on OS X, and it can send MIDI to an external device using the “route” menu for the various tracks. Garageband (which should be free on the app store) should also let you send MIDI to an external device although I don’t use it personally.
Hi Donya,
your explanations for Midi on MacOS helped me on the first steps. Thanks.
As you write in chapter 6. Playing MIDI files: there is no free software:
I came about
https://sourceforge.net/projects/ariamaestosa/
frank7d