raveloxmidi v0.7.8

I realised that I have been neglectful of this blog for providing updates on raveloxmidi. I was reminded by a post from McClaren Labs which details the current state of network MIDI software and made mention of raveloxmidi. See https://mclarenlabs.com/blog/2019/09/14/the-state-of-network-midi-2019/ for the details.

They referenced an older version of the software (v0.5.0) and I have introduced a few features since then.

So, raveloxmidi v0.7.8 is the current version as of 2019-10-16.

What’s new since v0.5.0? Well…

Firstly, I improved CPU usage a heck of a lot. I was using a select() call as a timer to poll for new network events. This worked fine for me but the real users noticed that performance was not great at times. So, I switched to using the poll() system call instead. As I mentioned in the changelog on the github page (https://github.com/ravelox/pimidi), this had the effect of dropping CPU usage from 100% down to practically 0 when idle.

Secondly, I introduced IPv6 support. It wasn’t a requested feature but this is 2019 and my testing has been using my iMac to get raveloxmidi to talk to Logic Pro. I saw that the iMac was announcing the AppleMIDI service with IPv6 addresses too so I bit the bullet and wrote the code to handle them. Working with IPv6 isn’t particularly difficult but the code had to determine the difference between the different address formats of IPv4 v IPv6 and internal structures are also different in the system calls that are used. It took a while to get those stable and usable.

Most recently, I added the feature to be able to make a connection FROM raveloxmidi to a remote service. This allows users, who know that the remote service will be available, to connect to that service when raveloxmidi starts up instead of connecting from the remote side TO raveloxmidi. Ultimately, if you have a device using raveloxmidi, you’d like it to connect when the device starts up. As part of this change, the connection to the remote service can be made without using Bonjour. That is, using a hostname or IP address to connect to.

For future plans, I’ve been asked about making raveloxmidi available through a library so that the caller can handle the distribution of MIDI events. That’s an interesting application for it and I need to give it some thought. Watch this space.