Software Development meets Electronic Music

VMidiControl8 Max4Live Device

Software Development meets Electronic Music

VMidiControl8 Max4Live Device

This Saturday Dec, 2, when I am going to perform live electronic music at Humanized Live @ Strom Camp 2023, a personal software project will reach a public audience.

In the beginning of this year, I was reorganising the setup of my electronic music live set. I was searching for a workflow, where I could freely improvise with the musical parameters of the electronic instruments and effects and then transition back to a defined state within an instant. While there are a lot of features and tools for that within Ableton Live, which I use for my live performances, none would fully realise the workflow that I had in mind.

I started prototyping a plugin, a virtual MIDI controller, for Live using Max, a visual programming language and runtime for real-time event and signal processing. So called max patches (programs) can be tightly integrated into Ableton Live as plugins with a native look-and-feel via Max4Live. With the early prototype, I could quickly proof my concept. But, as soon as I started to tighten the integration with Live, omitting the Max standalone runtime, I had to realise limitations of the MIDI subsystem within the Max4Live runtime.

MIDI is a standard for communication between electronic instruments, effects and controllers, and therefore plays an essential role to realise my intended workflow. Looking for a solution, I found an external (kind of a library in Max terms), that could be used as a replacement for the internal MIDI subsystem of Max4Live. Unfortunately, the external did not work with my CPU platform and the source code was not available.

At that time, I was also looking for a practical learning opportunity to get deeper into the Rust programming language. I decided to implement a replacement of the MIDI subsystem on my own using rust. A great thing about Rust is its abundance of available crates (rust libraries) and the exceptional dependency management of Cargo (rust’s build system). Using a MIDI crate and a crate that wraps the Max C-api, I implemented the logic of passing MIDI events back and forth between both crates and built externals that mimic the interface of the usual Max MIDI objects. With Rust’s native test framework, integrated into Cargo, I made sure that the externals worked as intended. After that, I integrated these externals into the final Max4Live patch according to my workflow idea.

The Virtual MIDI Controller has been part of my live set for several months now. I’ve used it many times in my studio workflow and during rehearsal. I’ve also had the opportunity to use it during live performances at private events. During all that time, the plugin worked reliably without any issues or latencies, which is crucial for live performance. When I am going to perform at Humanized Live @ Strom Camp 2023 this Saturday evening, I fully trust that my own work will reliably give me the freedom for improvisation that I initially wished for. I have taken much delight in this project and still do, as it brought together two things that I enjoy: The art of making music and the art of programming. I am looking forward, to anyone that wants to join me on Saturday to share and hear my excitement about this.

Originally published on LinkedIn