Hello all, this is yet another one of those monthly reports about the KXStudio project.
There was no November monthly report, due to me being busy with moving to a new place and a few other personal things.
This month though there are a few things to report on.
DPF and VST3 work resumes
After a little break on the VST3 implementation in DPF, I went back and
reworked a few things
that were clearly done wrong.
It is still considered experimental, but already works much better than before.
For example, UI to DSP parameter changes works properly now, which was not the case before in some hosts (including reaper).
Once complete, DPF based plugins will be one of the few that implement the whole component vs edit-controller separation.
This might prove quite valuable in the future, specially after hosts also implement the same.
We need to come back to this after I natively implement VST3 support in Carla.
Just as before, I am keeping a TODO list of items
near the top of the relevant source code
file for VST3. The same also
applies to the UI side.
The super short summary is that most common things already work, with only optional buses, MIDI CC handling and minor details missing.
We don't get VST3 support finalized in DPF during 2021, but it shouldn't take that much longer now.
Continuing: Separating JACK tools from JACK1 and JACK2
Mentioned last time was the effort of
splitting the example-clients and tools
from the JACK repositories into a new repository/project.
I have been working with David Runge on this (or better said,
he has been doing most of the work)
with me reviewing each set of changes to each file one by one.
We are nearly finished, with only 1 file remaining.
Afterwards there is still some work to be done on the build setup and testing the whole thing,
but it is good to see things progressing on this area that was being sadly neglected for many years.
If everything goes well, no one will notice a thing!
Maintenance is a lot of work that goes unnoticed, fun stuff..
Python 3.10 and updated PyQt woes
I do not know exactly the change that triggered it, but with newer versions of python and PyQt, pretty much all my tools that use PyQt are broken.
The community was quite helpful on
fixing some Carla
without my direct intervention (as I do not run a rolling-release Linux distribution, I am not directly affected).
With this a new release of Carla is needed, the same for Cadence but that remains unfixed for the time being.
Cardinal, the Rack!
A new project has been
brewing behind the scenes
for more or less 3 months now.
It was not in my plans when 2021 started, specially since quite a few other things needed more attention..
But this was one of these things that is just impossible to put down as an idea.
In fact, lack of attention in Carla and JACK lately are due to this project, it is simply too exciting.
The quick history of the project is that, after
v2 source code was made public,
I began wondering if that codebase could be used for building an open-source plugin
(unlike the official product, which is closed-source and commercial).
After finding out that VCV's official plugin would only support VST2 and still only the same 3 base architectures (Linux, macOS and Windows 64bit),
also how the whole thing would supposedly work - loading modules from the library just like in the standalone -
I was quite disappointed with the whole thing.
Rack is something that always interested me, but I was put off from the (to put it mildly) abrasive attitude towards open-source ideas and Linux packaging.
Running as standalone was also not that fun for me, I personally want to create synths and have those integrated in a DAW/sequencer workflow.
There was a project called
that also attempted an open-source plugin version of Rack, but it had some serious drawbacks:
- Needs heavy changes to Rack source, which would have to be regularly maintained in order to keep up with upstream
- All included modules need to be patched a fair bit just to work with it
- Custom written plugin format support (so it only supported VST2)
- Custom written OS-level Window handling (only supporting Windows and Linux/X11)
While the idea in general great, there was a not insignificant amount of work needed to maintain it.
If attempting something like this, would be best to not make the same "mistakes", and think about the whole deal on the long term.
With that in mind, the Cardinal project:
- Does not fork Rack's source code, instead it uses it as submodule, replacing only a few critical functions and files
- Besides internal modules, 3rd-party ones can be linked as-is with only changes to not use osdialog due to its event-blocking nature
- Relies on DPF for plugin format support, so we get JACK, LV2 and VST2 from the start, VST3 in progress
- Also relies on DPF for OS-level Window handling, so it works on macOS too (and eventually Haiku)
Similar to VeeSeeVSTRack, Cardinal builds the entire module collection as part of one binary and uses the host audio thread to drive the engine.
This means no online library access or external module loading, which is quite intentional.
More information on the
"why" section of Cardinal's README.
The obvious question that might be in the air is what to make of the official Rack Pro plugin.
To which I say - if you enjoy Cardinal, go buy Rack Pro!
Cardinal would not exist without VCV Rack, so it is for our best interest that Rack lives on for a long while.
Also they serve different purposes:
Cardinal is open-source modules only, all integrated into 1 binary.
Rack Pro is just like the standalone with online library access, commercial modules etc. And obviously the official product too.
The Cardinal project includes a
table of differences between itself and Rack Pro,
in case you want to go deeper into technical details.
Cardinal should be considered beta-state at the moment.
While it already works quite well (except for a few known bugs as typical), there are a few missing pieces and license situation to sort out in detail.
A lot of Rack module developers started coding because of it,
so without fully understanding artwork and source code license implications quite a few of them just copied what others were doing.
And this is the problem, Rack itself contains non-commercial and even non-derivatives clauses for its artwork.
A lot of developers copied the non-commercial clause without thinking too much about it, which makes them quite tricky if not impossible to package in a Linux distribution.
Before tagging v1.0, I want to sort out these details first, to ensure everything is done not only legally but also respectfully.
Already started this on
which greatly helps in giving an overview of the used source code and artwork licenses.
Before moving on, here's a screenshot, because everyone likes those. :)
Many other DPF additions
While working on Cardinal, DPF got a real stress-test for some of its features.
Some were missing and needed to be added in order to make Cardinal work proper, some were found to be broken.
In no particular order, these changes were made in DPF to accommodate for Cardinal:
- Add clipboard (copy & paste) support
- Add cursor support
- Add file dialog save support (used to be only loading allowed)
- Add "desktop portal" DBus service support for providing native file browser dialogs on Linux
- Add APIs around finding the bundle path of the plugin
- Allow LTO (Link-Time-Optimization) build
- Auto-creating macOS VST2 bundle from build step, instead of needing to run a script
- Many fixes around file browser dialog support
- Many fixes around VST2 keyboard input (WIP)
The only missing feature at the moment is drag&drop support, but that needs an implementation on pugl's side first.
Once that side is done, I already have a plugin in which to test it the functionality, so it should be pretty quick.
And that is all for now.
If you appreciate the kind of work I do, please
consider a donation.
Thank you in advance for your support, happy holidays and a happy new year!