Archive of https://github.com/thestk/rtmidi — 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++ 81.4%
  • M4 5.8%
  • CMake 5.5%
  • C 3.4%
  • Go 2.2%
  • Other 1.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Eric Bateman aaa2595468
Merge pull request #415 from Muse-Kinetics/pr/rtmidi-defines
Rename the API defines to RTMIDI_ names, deprecate the old ones for 7.0.0
2026-10-13 12:44:29 -07:00
.devcontainer added vscode container support 2022-03-09 06:14:04 +00:00
.github CI: build on Windows with MSVC and Windows MIDI Services 2026-10-09 07:54:48 +00:00
cmake Add a Windows MIDI Services backend 2026-10-02 01:07:00 -07:00
contrib Rename the API defines to RTMIDI_ names, keep the old ones until 7.0.0 2026-10-11 09:11:15 +00:00
doc Rename the API defines to RTMIDI_ names, keep the old ones until 7.0.0 2026-10-11 09:11:15 +00:00
examples Rename the API defines to RTMIDI_ names, keep the old ones until 7.0.0 2026-10-11 09:11:15 +00:00
m4 Require C++11. 2021-08-11 22:24:44 +02:00
modules Replace inline namespace with implicit import, which is simpler 2025-11-22 11:52:33 -05:00
msw Rename the API defines to RTMIDI_ names, keep the old ones until 7.0.0 2026-10-11 09:11:15 +00:00
tests Merge pull request #415 from Muse-Kinetics/pr/rtmidi-defines 2026-10-13 12:44:29 -07:00
.gitattributes Prevent .gitignore and friends from being exported to the final archive 2017-10-09 17:06:56 +02:00
.gitignore Go: add module file. 2022-04-13 20:30:11 -06:00
autogen.sh Make the m4 and config directories before checking for autoreconf. 2016-02-12 14:41:12 -03:00
CMakeLists.txt Merge pull request #415 from Muse-Kinetics/pr/rtmidi-defines 2026-10-13 12:44:29 -07:00
configure.ac Rename the API defines to RTMIDI_ names, keep the old ones until 7.0.0 2026-10-11 09:11:15 +00:00
CONTRIBUTING.md Add contribution doc 2026-09-20 20:23:11 +00:00
LICENSE Documentation and version number updates in preparation for new release. 2023-08-03 12:02:58 -04:00
Makefile.am [automake] add missing EXTRA_DIST files 2019-04-17 12:47:15 +02:00
README.md Rename the API defines to RTMIDI_ names, keep the old ones until 7.0.0 2026-10-11 09:11:15 +00:00
rtmidi-config.in Add prefix to output of rtmidi-config. 2013-10-11 18:26:20 +02:00
RtMidi.cpp Merge pull request #415 from Muse-Kinetics/pr/rtmidi-defines 2026-10-13 12:44:29 -07:00
RtMidi.h WinMM: deliver a SysEx longer than one input buffer as one message 2026-10-11 07:33:03 +00:00
rtmidi.pc.in Rename the API defines to RTMIDI_ names, keep the old ones until 7.0.0 2026-10-11 09:11:15 +00:00
rtmidi_c.cpp C API: keep a message that doesn't fit, and allow a size query 2026-10-10 07:29:21 +00:00
rtmidi_c.h C API: keep a message that doesn't fit, and allow a size query 2026-10-10 07:29:21 +00:00
WINDOWS.md docs: update Windows build requirements 2026-10-10 20:58:45 +05:30

RtMidi

Build Status Conan Center

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:

On 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.

If you compile RtMidi.cpp yourself, define the backends you want: RTMIDI_API_ALSA, RTMIDI_API_JACK, RTMIDI_API_CORE, RTMIDI_API_WINMM, RTMIDI_API_WMS, RTMIDI_API_UWP, RTMIDI_API_WEBMIDI or RTMIDI_API_AMIDI (and RTMIDI_DEBUG for debug output). These replace __LINUX_ALSA__, __UNIX_JACK__, __MACOSX_CORE__, __WINDOWS_MM__ and the other names starting with underscores, which C++ reserves (#133). The old names still work in 6.x but are deprecated and will be removed in 7.0.0.

Overview

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:

  • object oriented C++ design
  • simple, common API across all supported platforms
  • only one header and one source file for easy inclusion in programming projects
  • MIDI device enumeration

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).

Windows

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.

Further reading

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.