https://github.com/6r1d/rmr
RMR (or "RtMIDI, reduced") is a C-only rewrite of RtMIDI's Alsa part
https://github.com/6r1d/rmr
alsa linux midi
Last synced: 2 days ago
JSON representation
RMR (or "RtMIDI, reduced") is a C-only rewrite of RtMIDI's Alsa part
- Host: GitHub
- URL: https://github.com/6r1d/rmr
- Owner: 6r1d
- License: mit
- Created: 2021-03-02T23:36:16.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2021-03-17T13:19:22.000Z (about 4 years ago)
- Last Synced: 2023-08-01T21:18:18.707Z (almost 2 years ago)
- Topics: alsa, linux, midi
- Language: C
- Homepage: https://rmr.readthedocs.io/
- Size: 201 KB
- Stars: 4
- Watchers: 3
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://rmr.readthedocs.io/)
[](https://rmr.readthedocs.io/)

[](https://github.com/6r1d/rmr/blob/main/LICENSE)
[](https://github.com/6r1d/rmr/issues)
[](http://isitmaintained.com/project/6r1d/rmr "Percentage of issues still open")
[](https://isitmaintained.com/project/6r1d/rmr "Average time to resolve an issue")Hello and welcome to RMR's readme.
RMR or "RtMIDI, reduced" is a simplified rewrite of [RtMIDI](https://github.com/thestk/rtmidi)'s Alsa part: C++ → C + GLib library.
It allows to interface C programs using [MIDI](https://en.wikipedia.org/wiki/MIDI) standard.
There is no compatibility with API calls and struct members from [RtMIDI](https://github.com/thestk/rtmidi).**Warning**: I might change API a lot, this project **is not stable**. Use RMR at your own risk.
## Documentation
[Latest documentation](https://rmr.readthedocs.io/en/latest/index.html) is available on [Read the Docs](https://readthedocs.org/).
## Motivation
This is my personal, derivative project. I want to use RMR on Linux embedded devices and learn more about [MIDI](https://en.wikipedia.org/wiki/MIDI) and [Alsa](https://www.alsa-project.org/wiki/Main_Page) while changing the code.
I also want to know the library internals well when I am using it so it can be as predictable for me as possible.It will be great if you will discuss it with me in [issues](https://github.com/6r1d/rmr/issues), recommend code improvements, etc.
## Changes
* C++ → C
* use [GLib](https://developer.gnome.org/glib/stable) [asynchronous queues](https://developer.gnome.org/glib/stable/glib-Asynchronous-Queues.html) and [arrays](https://developer.gnome.org/glib/stable/glib-Arrays.html) when needed (mostly input code: arrays for variably sized SysEx messages and queues for inter-thread message passing)
* removed [OOP](https://en.wikipedia.org/wiki/Object-oriented_programming) parts and use structs to reduce overhead
* changed [OOP](https://en.wikipedia.org/wiki/Object-oriented_programming) methods to simple functions to reduce overhead
* currently uses `do {} while (0);` for error handling in many cases
* use of `GNU make` for examples and tests
* documentation using Sphinx and Hawkmoth## Future plans
### Jack
One day, I might try and rewrite [JACK](https://jackaudio.org/) API and add it to RMR, I like using it for audio, but I don't use it for MIDI yet.
## Legal and ethical
The RMR is MIT-licensed.
If you create a pull request, it will also be very nice of you to add a PR for the original RtMIDI repo and I'm ready to help with that.
Initially, I wanted it to have the same non-binding license clause, but that way, GitHub can not detect the license.
(Please inform me in the issues if there's anything wrong with it.)## Other great [RtMIDI](https://github.com/thestk/rtmidi) forks
* [RtMIDI17](https://github.com/jcelerier/RtMidi17): [C++17](https://en.wikipedia.org/wiki/C%2B%2B17)
* [libremidi](https://github.com/jcelerier/libremidi): [C++17](https://en.wikipedia.org/wiki/C%2B%2B17), based on RtMIDI and [ModernMIDI](https://github.com/ddiakopoulos/modern-midi), [should handle](https://github.com/thestk/rtmidi/issues/214#issuecomment-792327899) large SysEx messages better