A set of C++ classes that provide a common API for realtime MIDI input/output across Linux (ALSA & JACK), Macintosh OS X (CoreMIDI) and Windows (Multimedia)
C++
1,211
540 commits
updated Oct 11, 2026
A set of C++ classes that provide a common API for realtime MIDI input/output across Linux (ALSA & JACK), Macintosh OS X (CoreMIDI & JACK), Windows (Multimedia Library & UWP), Web MIDI, iOS and Android.
By Gary P. Scavone, 2003-2023.
This distribution of RtMidi contains the following:
doc: RtMidi documentation (also online at https://caml.music.mcgill.ca/~gary/rtmidi/)tests: example RtMidi programsOn Unix systems, run ./configure and then make in the top level directory. This builds both the library and the test programs in tests/. For installation and building on Windows, refer to WINDOWS.md.
If you checked out the code from git, please run ./autogen.sh before ./configure.
./configure --help lists the available MIDI API options (--with-alsa, --with-jack, --with-core, --with-winmm); by default those appropriate to the system are selected. RtMidi can also be built with CMake.
On Linux, ALSA support needs its development files (libasound2-dev on Debian and Ubuntu, alsa-lib-devel on Fedora); without them both ./configure and CMake build without ALSA, and ./configure may find no MIDI API if no other backend is available.
Android support uses the AMidi API and must be built with CMake. See android/README.md.
RtMidi is a set of C++ classes (RtMidiIn, RtMidiOut, and API specific classes) that provide a common API (Application Programming Interface) for realtime MIDI input/output across Linux (ALSA, JACK), Macintosh OS X (CoreMIDI, JACK), and Windows (Multimedia Library) operating systems. RtMidi significantly simplifies the process of interacting with computer MIDI hardware and software. It was designed with the following goals:
MIDI input and output functionality are separated into two classes, RtMidiIn and RtMidiOut. Each class instance supports only a single MIDI connection. RtMidi does not provide timing functionality (i.e., output messages are sent immediately). Input messages are timestamped with delta times in seconds (via a double floating point type). MIDI data is passed to the user as raw bytes using an std::vector<unsigned char>.
RtMidi is also offered as a module, which is enabled with RTMIDI_BUILD_MODULES, and is accessed with import rt.midi;. Namespaces are implicitly imported (unless disabled with RTMIDI_USE_NAMESPACE), so classes can be accessed through namespace rt::midi or through the global namespace (for example, rt::midi::MidiApi and ::MidiApi are both valid).
In some cases, for example to use RtMidi with GS Synth, it may be necessary for your program to call CoInitializeEx and CoUninitialize on entry to and exit from the thread that uses RtMidi.
For complete documentation on RtMidi, see the doc directory of the distribution or surf to https://caml.music.mcgill.ca/~gary/rtmidi/.
The RtMidi license is similar to the MIT License, with the added feature that modifications be sent to the developer. Please see LICENSE.
56 followers · starred Jan 2014
312 followers · starred Nov 2021
49 followers · starred Jul 2026
216 followers · starred Jul 2019
A set of C++ classes that provide a common API for realtime MIDI input/output across Linux (ALSA & JACK), Macintosh OS X (CoreMIDI) and Windows (Multimedia)
C++
1,211
540 commits
updated Oct 11, 2026
A set of C++ classes that provide a common API for realtime MIDI input/output across Linux (ALSA & JACK), Macintosh OS X (CoreMIDI & JACK), Windows (Multimedia Library & UWP), Web MIDI, iOS and Android.
By Gary P. Scavone, 2003-2023.
This distribution of RtMidi contains the following:
doc: RtMidi documentation (also online at https://caml.music.mcgill.ca/~gary/rtmidi/)tests: example RtMidi programsOn Unix systems, run ./configure and then make in the top level directory. This builds both the library and the test programs in tests/. For installation and building on Windows, refer to WINDOWS.md.
If you checked out the code from git, please run ./autogen.sh before ./configure.
./configure --help lists the available MIDI API options (--with-alsa, --with-jack, --with-core, --with-winmm); by default those appropriate to the system are selected. RtMidi can also be built with CMake.
On Linux, ALSA support needs its development files (libasound2-dev on Debian and Ubuntu, alsa-lib-devel on Fedora); without them both ./configure and CMake build without ALSA, and ./configure may find no MIDI API if no other backend is available.
Android support uses the AMidi API and must be built with CMake. See android/README.md.
RtMidi is a set of C++ classes (RtMidiIn, RtMidiOut, and API specific classes) that provide a common API (Application Programming Interface) for realtime MIDI input/output across Linux (ALSA, JACK), Macintosh OS X (CoreMIDI, JACK), and Windows (Multimedia Library) operating systems. RtMidi significantly simplifies the process of interacting with computer MIDI hardware and software. It was designed with the following goals:
MIDI input and output functionality are separated into two classes, RtMidiIn and RtMidiOut. Each class instance supports only a single MIDI connection. RtMidi does not provide timing functionality (i.e., output messages are sent immediately). Input messages are timestamped with delta times in seconds (via a double floating point type). MIDI data is passed to the user as raw bytes using an std::vector<unsigned char>.
RtMidi is also offered as a module, which is enabled with RTMIDI_BUILD_MODULES, and is accessed with import rt.midi;. Namespaces are implicitly imported (unless disabled with RTMIDI_USE_NAMESPACE), so classes can be accessed through namespace rt::midi or through the global namespace (for example, rt::midi::MidiApi and ::MidiApi are both valid).
In some cases, for example to use RtMidi with GS Synth, it may be necessary for your program to call CoInitializeEx and CoUninitialize on entry to and exit from the thread that uses RtMidi.
For complete documentation on RtMidi, see the doc directory of the distribution or surf to https://caml.music.mcgill.ca/~gary/rtmidi/.
The RtMidi license is similar to the MIT License, with the added feature that modifications be sent to the developer. Please see LICENSE.
56 followers · starred Jan 2014
312 followers · starred Nov 2021
49 followers · starred Jul 2026
216 followers · starred Jul 2019