HexoSynth Modular Synthesizer in Rust - Devlog #11: VST3/CLAP Plugin Integration
The HexoSynth modular synthesizer (programmed in Rust) has now a completed VST3/CLAP plugin integration.
If you don't want to dig through the detailed log:
TLDR: Skip to the Devlog 11 Conclusion Section
This is the day by day log of my progress. If this is too verbose for your interest, please skip down to the Devlog 11 Conclusion Section.
HexoSynth: Started working on the external parameter GUI inside HexoSynth. Many DAWs don't show a list of parameters if the plugin has too many of them. So they rely on the plugin GUI to emit parameter changes when the user wiggles a button. For this HexoSynth now needs a big panel with 24 knobs for the ExtA1 to ExtF3 parameters.
HexoSynth: External parameter prototype/proof of concept is done, ExtA1 can now be used to drive the external parameters properly:
I tested it using Bespoke as VST3 host, and it works smoothly:
HexoSynth: I've finally added a pre-commit git hook, which checks for formatting and if I accidentally try to check in a patched Cargo.toml somewhere.
HexoSynth: On the evening, I finished off the external parameter integration by adding the remaining 23 parameters up to ExtF3. Here is a stress test, where I wanted to see if updating all 24 parameters per frame works fine and does not hit pathological performance problems in HexoTK:
std:sys:env:var to access environment variables. This has a reason:
HexoSynth: Tests can now be enabled using an environment variable:
For selecting only specific tests, you can set it to a string, like:
HexoSynth: Finished the external parameter GUI integration now with a proper piece of help text, that explains what this "Ext" tab in the right panel is about. It's also neat to be able to shrink the oscilloscope to make these knobs bigger - but that was possible before too.
HexoDSP: Next I finished the VST3/CLAP plugin integration by adding an
With this node you get access to the two audio input channels of HexoSynth. You can
build your own custom effects now using this.
I've released some crates to crates.io:
HexoTK: I've started working on a Markdown to WichText translator. I decided it's best to go for a more standard format when documenting stuff in HexoDSP. I don't want to make HexoDSP depend directly on the WichText widget from HexoTK. It will also provide a more pleasant syntax for placing images for the documentation of the mouse gestures in HexoSynth.
HexoTK: Started rewrite of the Markdown to WichText translator, because the
markdown crate is not maintained anymore and did not even properly handle
horizontal rules. So I started again with the
pulldown-cmark crate, which
has been working amazingly so far. Did not expect the pull (SAX style) API
would simplify the code and formatting a bit. Or maybe it was just the experience
from the first try.
HexoTK: I finished the work on the Markdown to WichText translator. Still need to use it in HexoSynth though. So no update images yet.
YouTube Sound Demos
Devlog 11 Conclusion
The VST3/CLAP plugin integration has been finished this week. Big thanks to the
nih-plug framework at this point. What does an integration mean at this point?
- MIDI note input
- MIDI CC input
- (Automateable) plugin parameters
- Audio input (for making audio effects with HexoSynth)
With that the following remaining items have been crossed off the list now:
- Add a bank of knobs for the 24 external parameters, so that you can wiggle them from inside HexoSynth. This is important for a lot of DAWs. It also makes the external parameters even more useful, by controlling them directly from inside the DAW.
- Adding an input DSP node to receive audio data from the DAW in HexoSynth.
This finishes work on this area of HexoSynth. Aside from the release of some utility crates/libraries nothing much interesting happened this week. Most notably I started with the work on the online help by writing that Markdown to WichText translator. That will come into play in future when I write the introduction tutorial and other documentation.
That leaves us with the following items for the future until a more refined release of HexoSynth:
- Rewrite the online help.
- Add a getting started tutorial.
- Add more automated test cases for the UI workflow.
- Add inserting DSP chains that are to be pre-defined. And also inserting random DSP chains for a more explorative/experimental workflow.
- Add back editing CV widgets.
In case you find this project interesting or have questions,
you can reach me via Discord these days, check out the
in the Rust Audio Discord. Optionally I'm also online
on IRC (via Matrix) in the Linux Audio Developer channel
#lad (nickname 'wct')
on Libera.Chat: irc:#firstname.lastname@example.org.