Home KXStudio > News

KXStudio : News

> KXStudio Monthly Report (May 2021)
On 2021-05-31 by falkTX

Hello all, another monthly report about the KXStudio project is here.
I skipped last month as there was not much to report.
Mainly there were new releases, but those had their own announcement (specifically, Carla v2.3 and JACK2 v1.9.18).
Afterwards there was a small personal situation (that is still unfolding) that took all my free time, so that was it.
There are a few updates related to the month of May though!

DPF updates

The main thing to report today is all the work that I've been putting in DPF recently.
This has been a long-time coming, but better late than never.
For those unaware, DPF is a very small C++ framework to create audio plugins with.
It has UI support, but it is intentionally not a fully-fledged UI toolkit, same for its DSP side.
It can export as LV2, VST2 and other plugin formats, but it does not try to do much more than that.
Native OS events is handled behind the scenes via pugl.

One major task to do was updating to latest pugl, because it supports many more things compared to old versions.
pugl had its event system completely reworked though, so we can't just update and use it as-is.
In the end, this update work is something that took several weeks.
I took the chance to rework some core components of DPF UI handling together with this, as there were a few parts of the code that proved confusing to other developers.
Also added in testing units and demo applications to help test several parts of DPF, though this is still very much work-in-progress.
This was specially useful to ensure core parts were working before proceeding with the rework.
Related to pugl update and rework, the Cairo backend of DPF is now pretty much on-par with its OpenGL one.
The Demo tool (where we test images, events, resizing, etc) has consistent behaviour between the two.


Continuing with the rework, special attention was given to resizing.
Resizing in LV2 UIs has always been something very painful, which still does not work correctly in many hosts.
One culprit of this was the bad initial decision to use an LV2 extension to deal with UI resizing.
Turns out, we do not need this at all!
So the next version of DPF will no longer make use of LV2 UI resize extensions.
We will need to accommodate hosts to this, which is a breaking change.
But it is not like LV2 plugin-side resizing was working well in the first place anyway.
I already did this for Carla. Likely will do similar things to suil if no one else does.

On even more DPF news, I created a new open-source code repository meant for reusable DPF UI widgets.
It has come to my attention that developers struggle with DPF having very little common widgets they are used to.
I have made a few ones based on images for the DPF-Plugins collection, but some developers struggle to create individual widgets from scratch.
This code repository will evolve over time, obviously as a new project which is only a few days old there is not much to see.
One common request has been a resize handle, so that for plugin formats like VST2 which do not allow user-side resizing we still have a way for the user to resize the UI.
There is one generic resize handle in the repository now, usable for both Cairo and OpenGL backends.
The first real widgets I am contributing to the repository are a port of oui-blendish which provides blender-style looking widgets.
I am still setting up the whole thing, but initial impressions are very good. It even works with High-DPI / custom scale factors!
(ignore the bitmap icons on the screenshot below, those are only used in testing, I will later either replace them or remove them)


Finally on DPF side, as contributions by Jean Pierre Cimalando, CMake is now supported for building DPF and using it in plugins targeting DPF.
As a second step on top of CMake, it is now possible to build DPF with MSVC on Windows.
I tried this myself and was able to build a DPF VST2 plugin with MSVC and run the output binary inside Carla.
This is not my development workflow by any means (it was the first time I used MSVC!) but it opens up the process for many more people, which always great.


One last bit of news regarding DPF is that I started testing the waters for VST3 support.
There is almost nothing to see just yet, as there is enough to do in DPF regarding polishing, fixing bugs and handling requests so that VST3 work is not a priority.
It is something that I have took an interest on lately though, as a potential way to attract commercial developers/vendors to DPF.
(and perhaps some well needed funding? who knows..)

Work on DPF will continue, you can grab all these changes from its develop branch.
Expect more news about it next month.

Other updates

While most of my time and attention was given to DPF, a few other things happened.
There is the whole "Audacity was bought up by Muse Group and added CLA, plus telemetry coming soon" thing...
I did some tests with building Audacity with mingw, and succeeded in setting up scripts to build required dependencies and then build audacity itself.
From what I tested on Windows everything seems to work.
(screenshot below is from Wine, but I also tested on real Windows via Virtual Machine)

Most mingw needed fixes were submitted upstream, but them now requiring a CLA means the PR will likely stay open indefinitely.
Also did some tests with building Audacity with wxQt and while it kinda works, still has some obvious issues - the wxWidgets Qt backend is not feature complete so it is normal for those to happen.
It is very likely I will end up maintaining some custom builds for Audacity once more network features creep in (analytics is coming to Audacity for sure, it is just a matter of when and how).
I am not interested on a fork, only in a way for casual users to get similar builds to the official ones without user-data tracking.

There are some other random things too, for example adding a new "-w" argument to the new jack2 zalsa tools so that it waits until the requested soundcard is available instead of failing to start.
This is very handy when adding it as part of some boot process.

Carla has also seen some pipewire-related fixes.
It is still not working 100%, but already know of a solution for them, just need to put that into code.
Expect a v2.3.1 release soon with these fixes, and also the LV2 UI resize handling mentioned above.

Finally I added support for FFmpeg JACK output. Seems to work well from what I tested, but I no longer have a need for it.
Once I am done with DPF and other things, I will try to submit this upstream. Feel free to grab the code and submit it yourself

Regarding packages in the KXStudio repositories, there are some small updates. Those are:

  • Added bjumblr
  • Added bslizr-uwu (custom skin to bslizr)
  • bslizr updated to 1.2.14
  • lsp-plugins updated to 1.1.30


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, and stay safe out there!