All Projects → davidmoreno → rtpmidid

davidmoreno / rtpmidid

Licence: other
RTP MIDI (AppleMIDI) daemon for Linux

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects
Makefile
30231 projects
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to rtpmidid

Libremidi
A modern C++ MIDI real-time & file I/O library. Supports Windows, macOS, Linux and WebMIDI.
Stars: ✭ 69 (-36.7%)
Mutual labels:  midi, alsa
Python Rtmidi
Python bindings for the cross-platform MIDI I/O library RtMidi
Stars: ✭ 189 (+73.39%)
Mutual labels:  midi, alsa
Managed Midi
[Past project] Cross-platform MIDI processing library for mono and .NET (ALSA, CoreMIDI, Android, WinMM and UWP).
Stars: ✭ 130 (+19.27%)
Mutual labels:  midi, alsa
Unimidi
Realtime MIDI IO for Ruby
Stars: ✭ 229 (+110.09%)
Mutual labels:  midi, alsa
Arduino Applemidi Library
Send and receive MIDI messages over Ethernet (rtpMIDI or AppleMIDI)
Stars: ✭ 177 (+62.39%)
Mutual labels:  midi, rtp
alsa-midi-latency-test
Measure the roundtrip time of MIDI messages.
Stars: ✭ 20 (-81.65%)
Mutual labels:  midi, alsa
elektron-sysex-to-midi
A simple tool for generating MIDI-files based on Elektron MachineDrum sysex dumps.
Stars: ✭ 33 (-69.72%)
Mutual labels:  midi
midi-json-parser
This module is parsing midi files into a human-readable JSON object.
Stars: ✭ 81 (-25.69%)
Mutual labels:  midi
pacer-editor
Web editor for the Nektar Pacer MIDI controler
Stars: ✭ 16 (-85.32%)
Mutual labels:  midi
MIDIKit
🎹 Modern multi-platform Swift CoreMIDI wrapper with MIDI 2.0 support.
Stars: ✭ 26 (-76.15%)
Mutual labels:  midi
ANMP
multi-channel loopable video game music player for nerds and audiophiles
Stars: ✭ 16 (-85.32%)
Mutual labels:  midi
useetv-playlist
No description or website provided.
Stars: ✭ 41 (-62.39%)
Mutual labels:  rtp
usbhostcopro
USB Host Co-processor
Stars: ✭ 54 (-50.46%)
Mutual labels:  midi
MidiGyver
No description or website provided.
Stars: ✭ 67 (-38.53%)
Mutual labels:  midi
BMC
BMC the Badass MIDI Controller, all-in-one Scalable MIDI Controller library with a companion Desktop/Browser Editor App for Teensy LC, 3.2, 3.5, 3.6, 4.0, 4.1
Stars: ✭ 34 (-68.81%)
Mutual labels:  midi
NegativeHarmonizer
A python tool to invert the tonality (a.k.a negative harmony) of midi notation
Stars: ✭ 23 (-78.9%)
Mutual labels:  midi
OpenNoteBlockStudio
An open-source Minecraft music maker.
Stars: ✭ 408 (+274.31%)
Mutual labels:  midi
ipchub
一个即拷即用、支持摄像头集中管理、多级路由及h5播放的流媒体服务器。
Stars: ✭ 138 (+26.61%)
Mutual labels:  rtp
Focusrite-Midi-Control
APP DOWNLOAD LINK (Mac OSX)
Stars: ✭ 24 (-77.98%)
Mutual labels:  midi
DMXOPL
YMF262-enhanced FM patch set for Doom and source ports.
Stars: ✭ 42 (-61.47%)
Mutual labels:  midi

RTP MIDI User Space Driver Daemon for Linux

Real Time Protocol Musical Instrument Digital Interface Daemon

Alpha software. Use at your own risk.

rtpmidid allows you to share ALSA sequencer devices on the network using RTP MIDI, and import other network shared RTP MIDI devices.

rtpmidid is an user daemon, and when a RTP MIDI device is announced using mDNS (also known as Zeroconf, Avahi, and multicast DNS) it exposes this ALSA sequencer port.

librtpmidid

For information about librtpmidid and how to use it, read README.librtpmidid.md.

Other implementations

There is many hardware with RTP MIDI support, normally controllers, but for example Behringer DeepMind12 Synthesizer has support over Wifi.

Linux

  • raveloxmidi - Intended to be used directly with hardware devices or emulate midi over FIFO.
  • rtpmidi from McLaren Labs. It is a feature complete, GUI driven, Comercial implementation. Very similar to Tobias Erichsen's rtpmidi.

MacOS

On MacOS there is support included in the OS.

iPad

To test I used MIDI Network and MIDI Wrench. The first to manage connections, the second to test.

I was able to communicate exporting at rtpmidid side connecting my gadget to the Network port. Then use the MIDI Network on the iPad to make the connection.

Windows

Mobile / Tablet

There are also many Apple iPad / iPhone and Android programs with rtp midi support. I will try to list them as I find them:

Android

How to use rtpmidid

recomended use is via debian packages, at https://github.com/davidmoreno/rtpmidid/releases

rtpmidid provides two modes of operation, one focused on importing, another on exporting.

Real Time Protocol Music Instrument Digital Interface Daemon - 20.04.5
(C) 2019-2021 David Moreno Montero <[email protected]>
Share ALSA sequencer MIDI ports using rtpmidi, and viceversa.

rtpmidi allows to use rtpmidi protocol to communicate with MIDI equipement
using network equipiment. Recomended use is via ethernet cabling as with WiFi
there is a lot more latency. Internet use has not been tested, but may also
deliver high latency.

Options:
  --version           Show version
  --help              Show this help
  --name <name>       Forces a rtpmidi name
  --host <address>    My default IP. Needed to answer mDNS. Normally guessed but may be attached to another ip.
  --port <port>       Opens local port as server. Default 5004. Can set several.
  --connect <address> Connects the given address. This is default, no need for --connect
  --control <path>    Creates a control socket. Check CONTROL.md. Default `/var/run/rtpmidid/control.sock`
  address for connect:
  hostname            Connects to hostname:5004 port using rtpmidi
  hostname:port       Connects to a hostname on a given port
  name:hostname:port  Connects to a hostname on a given port and forces a name for alsaseq

Importing

For each found mDNS item, and connections to port 5004 (by default), it creates alsa seq ports which provide the events on those endpoints.

For mDNS discovered endpoints, the connection is delayed until the alsa seq connection.

Also it can connect to other endpoints by ip and port. It's possible to create new connection via command line with rtpmidid-cli connect NAME IP PORT. There are variations to connect that skip the name and port.

Exporting

To export a local alsa sequencer port, connect it to the "Network" port.

It will create the server, announce the mDNS service so other endpoints know it exist, and accept connections.

MIDI data is rerouted to the proper endpoint by checking the source port.

When connecting the Network port to an input, it merges all the midi events from all exported services. Normally this is not the desired behaviour, so it is recomended to export output ports, not input ones. This will be fixed in the future.

Install and Build

There are Debian packages at https://github.com/davidmoreno/rtpmidid/releases . They are available for Ubuntu 18.04 x64 and Raspbian 32bits, but may work also on other systems.

To easy build there is a simple makefile, which can be invoked to compile with make build. Use make or make help to get help on commands.

Its possible to create a debian / ubuntu package with make deb

Requires C++17 (Ubuntu 18.04+), and libfmt-dev, libasound2-dev, libavahi-client-dev.

Testing and bug reporting

If you find any bug, please report it to https://github.com/davidmoreno/rtpmidid/issues/

It is very usefull if you can accompany it with the resulting capture file from executing make capture.

make capture is tuned to capture the network packets at ports 10000 and 10001, but can be tuned to other ports with make capture PORT=5004.

The port 10000 is the one used for developing. To run a development version of the rtpmidid server, execute make run. There are more options at make help.

This captures packets for connections TO rtpmidid, not connecitons FROM rtpmidid. For those connecitons another port may need to be set.

Goals

  • Daemon, no need for UI
  • ALSA MIDI -- Inputs as ALSA MIDI inputs, outputs a ALSA MIDI outputs
  • Autoconfigurable for mDNS Endpoints

Roadmap: Features and status

Development status / plan:

  • mDNS client/server
  • Async framework (epoll with callbacks based code)
  • mDNS publish and learn when there are rtpmidi running on the network
  • Create the alsa ports for found rtpmidi servers in the network
  • When there is any connection to the alsa sequencer port rtpmidid creates the rtpmidi connection
  • Any message from alsa seq is sent to the MIDI rtp extreme
  • Any message from rtpmidi is replayed on the alsa seq
  • Can export local ports, with user deciding which ones to export.
  • Server mode at a known port, when remote side request connections, create the alsa seq virtual port for that connection and connect both ports.
  • Allow several connections on the server port. Each its own aseq port.
  • Send all MIDI events to rtpmidi
  • Receive all MIDI events from rtpmidi
  • Periodic check all peers are still on, no new peers
  • Remove ports when peer dissapears
  • Client send CK every minute
  • Can be controlled via Unix socket, but not required.
  • Jack MIDI support instead of ALSA seq
  • Use rtp midi timestamps
  • Journal support for note off
  • Journal support for CC
  • Journal support for Program Change
  • Journal support for Pitch Bend

Currently there is no journal. This is normally not a problem on local networks, as the thernet protocol already has packet error and detection, but packets may arrive out of order. Anyway its not production ready just for this missing feature.

CLI Control

There is a basic CLI that used the Unix socket control.

Use as:

cli/rtpmidid-cli.py help

License

RtpMidid is GPLv3 licensed. This basically means that you are free to use, modify and share it, given that you share your modifications with your users.

This includes embeded software uses (anti tivoization clause of the GPLv3).

The librtpmidid library is LGPL 2.1 license, so it can be embedded freely on free and commercial software.

If you think the license does not fit your use case, please contact me at [email protected] for alternative licensing options. I'm a freelancer looking for new projects.

Resources

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].