Weird Constructor / Posts / HexoSynth Modular Synthesizer in Rust - Devlog #10: Alpha-1 Release

HexoSynth Modular Synthesizer in Rust - Devlog #10: Alpha-1 Release

The HexoSynth modular synthesizer (programmed in Rust) has seen work on a few assorted areas this week. From finishing touches on MidiCC to the 0.2.0-alpha-1 release.

If you don't want to dig through the detailed log:

TLDR: Skip to the Devlog 10 Conclusion Section

Detailed Log

This is the day by day log of my progress. If this is too verbose for your interest, please skip down to the Devlog 10 Conclusion Section.


I just published Devlog #9 today.

HexoDSP: I've implemented the slew limiter in the MidiCC node today too. And played a bit on my keyboard:


HexoDSP: Finished tests and documentation for the MidiCC node today.

HexoDSP: The FormFM oscillator was extended today with a 'det' detune parameter, like the other oscillators too.

HexoDSP: And last but not least I fixed some test cases and the test suite for HexoDSP runs through successfully again!


HexoTK: I'm exploring the OpenGL API a bit today, just a little excursion/experiment that might or might not lead to something. The detour takes me to shader land, and I am glad I got a triangle:

OpenGL triangle for testing shader visual effect stuff
OpenGL triangle for testing shader visual effect stuff


HexoDSP: I've added external parameters to the NodeExector, which allows the nih-plug framework to send the CLAP/VST3 plugin parameters to the node matrix. Like with MIDI CC you can automate anything in the matrix with these parameters now. Nodes like "ExtA" output the input parameters of the plugin to any node you like:

HexoSynth external parameters input via 'ExtA' node
HexoSynth external parameters input via 'ExtA' node

Here is a little demonstration:


synfx-dsp: Today I started working on a proper ADSR envelope. For this I developed a few macros in synfx-dsp to build the envelopes in HexoDSP. I want to build simple AHD, ADSR and a more elaborate DAHDHSR envelope. I long for more sound design possibilities than I currently have with the AD envelope. Currently gate signals have almost no relevance, with these they finally get some relevance.


HexoSynth: Finally took some time to get into GitHub Actions. I don't like depending on GitHub for this, but maybe it helps users to get binaries. On top of that I also released the version 0.2.0-alpha-1. There should be VST3/CLAP and even standalone binaries available for Unbuntu Linux for you to try out!


synfx-dsp: Continued work on the envelope macros in synfx-dsp today. I've finished documenting them and writing a proper test for an AHD envelope. Also released version 0.5.3 of synfx-dsp today. Here is some example code of the AHD envelope:

use synfx_dsp::{EnvState, env_hold_stage, env_target_stage, assert_decimated_slope_feq};
let mut state = EnvState::new();

let attack_ms = 1.0;
let hold_ms = 2.0;
let delay_ms = 2.0;

let mut env_samples = vec![];
for _ in 0..(((48000.0 * (attack_ms + hold_ms + delay_ms)) / 1000.0) as usize) {
    env_target_stage!(state, 0, attack_ms, 1.0, |x| x, {
        env_hold_stage!(state, 2, hold_ms, {
            env_target_stage!(state, 4, delay_ms, 0.0, |x| x, {});
    // Output value is in `state.current`:

You can combine any of these stages into your custom envelope. You can build DAHDHSR, ADSR, AD, ADR or any envelope you can imagine with this. The advantage of this is, that the code is all fixed at compile time, so the compiler can optimize it properly.

What is left todo now is to make new envelope nodes for HexoDSP!

YouTube Sound Demos

Devlog 10 Conclusion

This week was dedicated to so many little things. Finishing off MidiCC and adding the plugin parameters are the most notable ones. I've tested some OpenGL visualization stuff in HexoTK and then concentrated on the modular envelope toolkit I envisioned for a long time.

After all that I took the plunge and setup a GitHub workflow for compiling the VST3 and CLAP plugins automatically whenever I commit something. This will help keeping the main branch of HexoSynth working and call me out if I mess up the Cargo.toml.

Last but not least, I've released the 0.2.0-alpha-1 version. Check it out here:

There are two last things to do for the nih-plug integration:

  • 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.

The first release of HexoSynth 2022 has been done. This means I will shift the focus of the next released towards these points:

  • 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 #hexosynth channel 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:


Weird Constructor Avatar
Weird Constructor

Nice end 30 y/o guy, geek and F(L)OSS developer that messes with: Linux, Windows, Networking, Interpreters/Compilers, Games, Audio, Music, GUIs, C/C++, Rust, Scheme/Lisp, 3D printing, electronics and more.

For updates follow me on Mastodon

All the F(L)OSS development on my projects happens in my spare time. If you find what I do useful, entertaining or just want to support me, you can do this via Liberapay:

Donate using Liberapay