LMMS and Sporth: part 2
2017-03-18
Goodbye, LMMS
I began writing an outline of this post last week. I had very exciting (and perhaps naive) ambitions for what LMMS was going to be in my life. And I do have some some interesting I built that I want to talk about.
But if I'm going to be honest, I'm done contributing things to LMMS. I really don't have the stomach for dealing with some of it's users, who are rude and hostile towards any of the contributions I have to make. And I just don't have time for it.
Let me list the things I got chewed up on:
- changing specific files to MIT license for easier plugin development
- Correcting a 10-year old bug which accidently was changed to have negative vaules instead of all positive ones
- Fixing the command-line renderer so it doesn't glitch randomly
- Suggesting the removal of worker threads for audio processing
Look, LMMS hasn't had a real audio developer in a very long time. Maybe never, from the looks of it. There are a lot of foul things I found in the source code Minus the licensing, these are all show audio stoppers as far as I'm concerned. If my audio software had any of those errors, I would be ashamed to put my name on it.
I'm not a person who simply points and laughs at others misfortune. I saw problems in LMMS and did something to fix them. I've been pretty shocked with the hostile reactions. I just don't have the stomach, or the time, for contributing to such a place.
This is good bye, LMMS. Oh well.
But first! LMMS.
Signal
In my previous post, I was able to write a Sporth editor that could run as a native LMMS plugin. However, this was implemented as an effect processor, and could take advantage of the "note" aspects of LMMS. So, I built an instrument that could be a signal generator for Sporth called Signal.
Signal is a monophonic synthesizer designed to be directly fed into the Sporth editor. It turns the stereo signal into two control signals: the left signal provides a MIDI note number, and the right channel provides the gate signal. When read in by Sporth, they can be used together to build legato instruments.
Building an instrument came with some nice perks. For one thing, instruments can have their own effects. I can bundle a Sporth with a Signal, and call it a unit. Much more manageable than using the FX routers. Also presets. You can save blocks of Sporth code as presets. Total modularity! The final kicker: the preview preset feature in LMMS also works on Signal presets, so you could preview Sporth patches! Pretty cool stuff.
Polysporth and LMMS
Going through the motions and building these small demos sparked quite a few internal dialogues. Firstly, legato instrument design: what an underappreciated thing in the keyboard-infested electronic music world. Another was a motivation to build legato instruments using PolySporth. The idea was I could not only write instruments for LMMS, but for other Sporthy projects. Using Polysporth, I could easily substitute chunks of code and create the same instruments for multiple platforms.
sporth2xpf
The final thing I did was create a small perl script which took sporth code and built an LMMS Signal preset out of it, called sporth2xpf. It should be available in the Signal repostiory. Pretty nice of LMMS folks to have plaintext file for their instrument format. Makes things ripe for happy hacking.
Future plans
There are no future plans to support LMMS. Not until I build my own tools that do the things I wanted LMMS to do. And what those things are, well, that's for another time.