My work on a libuv-driven ALSA MIDI Sequencer UDP Service has been going very well, and the service itself is working as expected.

This past week I finished work on the ALSA MIDI topology interface, enumerating clients, ports, and subscriptions on the one hand, and connecting and disconnecting ports on the other hand.

Beyond allowing to write blocking-free, non-native drivers for higher-level environments such as Node.js, this service also offers interesting ideas, such as remote management of multiple Linux MIDI systems (think: Raspberry Pi or old laptops used as USB MIDI connection point, interconnected and managed remotely from a single interface).

I'm also planning to work on using this UDP-based API to allow the ESP32 System-on-Chip cards from Espressif to behave as MIDI devices, providing input MIDI ports (for switches, pushbuttons, sliding or rotary potentiometers) and output MIDI ports (LEDs…) accessible over WiFi. This is all pretty exciting!

In my current demo script the service is started as a Node.js child process, which works very well. Next step is to write a proper Node.js module to drive the service, so that I can verify latency in an Electron application, for starters.

(This is part 2 of a series on developing an ALSA MIDI Sequencer as UDP Service.)