Choosing a Backend

Mido comes with five backends:

  • RtMidi is the recommended backends. It has all the features of the other ones and more and is usually easier to install.
  • PortMidi was the default backend up until 1.2. It uses the portmidi shared library and can be difficult to install on some systems.
  • Pygame uses the pygame.midi.
  • rtmidi-python uses the rtmidi_python package, an alternative wrapper for PortMidi. It is currently very basic but easier to install on some Windows systems.
  • Amidi is an experimental backend for Linux/ALSA that uses the command amidi to send and receive messages.

If you want to use another than the RtMidi you can override this with the MIDO_BACKEND environment variable, for example:

$ MIDO_BACKEND=mido.backends.portmidi ./

Alternatively, you can set the backend from within your program:

>>> mido.set_backend('mido.backends.portmidi')
>>> mido.backend
<backend mido.backends.portmidi (not loaded)>

This will override the environment variable.

If you want to use more than one backend at a time, you can do:

rtmidi = mido.Backend('mido.backends.rtmidi')
portmidi = mido.Backend('mido.backends.portmidi')

input = rtmidi.open_input()
output = portmidi.open_output()
for message in input:

The backend will not be loaded until you call one of the open_ or get_ methods. You can pass load=True to have it loaded right away.

If you pass use_environ=True the module will use the environment variables MIDO_DEFAULT_INPUT etc. for default ports.

Environment Variables

You can override the backend’s choice of default ports with these three environment variables:


For example:

$ MIDO_DEFAULT_INPUT='SH-201' python


$ export MIDO_DEFAULT_OUTPUT='Integra-7'
$ python
$ python