Weird Constructor / Posts / HexoSynth Modular Synthesizer in Rust - Devlog #12: Documentation for me and you

HexoSynth Modular Synthesizer in Rust - Devlog #12: Documentation for me and you

The HexoSynth modular synthesizer (programmed in Rust) has a proper introduction and reference documentation now.

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

TLDR: Skip to the Devlog 12 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 12 Conclusion Section.


HexoSynth: Started integrating the Markdown to WichText translator into the help texts.


HexoTK/HexoSynth: I rooted out some remaining layout issues with the Markdown translator. It already looks very promising. Going to turn more text parts into properly formatted Markdown now:

Markdown formatted documentation in HexoSynth
Markdown formatted documentation in HexoSynth


HexoDSP: Today I finished reformatting the help texts for all the nodes in HexoDSP. They are now adhering to the formatting convention of node names, parameter names and values. So that HexoSynth is using a consistent visual language in it's help texts.

HexoSynth node help reformatted
HexoSynth node help reformatted

HexoSynth: Afterwards I started with the still in progress rewrite of the general introduction to HexoSynth. As you can see, the manual comes with images to explain things in HexoSynth. I hope this makes it easier for new users to find into HexoSynth.

HexoSynth online help rewrite in progress
HexoSynth online help rewrite in progress


HexoSynth: Today I've made lots of screenshots about how to use the Cell Matrix in HexoSynth. Next I will add them to the introduction text in the "Help" dialog:

HexoSynth online help showing mouse gestures
HexoSynth online help showing mouse gestures


HexoSynth: The mouse gesture documentation was finished today. I also put some extra effort into a mouse cheat sheet as an overview of the mouse gestures. I want to include that directly into the main GUI as reference eventually.

HexoSynth Mouse Gesture Overview
HexoSynth Mouse Gesture Overview

After some thinking, I decided to put the introduction documentation into the right panel:

HexoSynth Intro In Right Panel
HexoSynth Intro In Right Panel


I was working on a good starting patch for HexoSynth, when I was noticing that the Ad envelope did not behave properly when being retriggered too fast. It would cause discontinuities in the output signal.

So I started to work on the Ad envelope in HexoDSP. I started to use the envelope generator I wrote in synfx-dsp. And notices some gaps in it's API and functionality.

synfx-dsp: Today I worked a bit on the envelope generator stuff in synfx-dsp. I stumbled across the fact that retriggering the attack stage will take equally long, regardless of how close the current value is already to the target value.


Today I refactored the Ad envelope out into synfx_dsp::EnvRetrigAD. That makes it easier reusable once I want to add it to synfx-dsp-jit.

HexoSynth: I've also finished the first initial demo patch for HexoSynth, which shows a partially self playing patch. There is also a second signal path in that patch for MIDI input. This way the user can directly see and hear what HexoSynth does. And has something to play around. The initial demo patch can be loaded later using the "Demo" button:

HexoSynth initial patch added
HexoSynth initial patch added


HexoSynth: Made a small but important fix and refactor in the top menu: "Load" and "Demo" now ask for confirmation before deleting your patch.


HexoDSP: I've made a big breaking change, and replaced a lot of the gain knobs with proper parameters that are either a volume knob (-90dB to +18dB) or a gain knob (-24dB to +24dB). This change hopefully brings more sanity in volume control into HexoSynth.

HexoSynth volume and gain knobs in dB now
HexoSynth volume and gain knobs in dB now


HexoDSP: The volume/gain knob handling was refined today to feel nicer to adjust. The tests in the HexoDSP repository have also been fixed.

HexoSynth: Updated the screenshot in the README, aswell as noted the breaking change in the CHANGELOG.

HexoSynth: Documented the top menu buttons with some descriptions.


HexoTK/HexoSynth: For helping myself with writing tests, I added a mode where I can click somewhere and get a dump of the widgets at that position. This might help me setting up tests in future:

HexoSynth GUI Debug Info Browser

Aside from that I factored out the debug panel popup into it's own file. I'll slowly try to refactor the big main.wl GUI WLambda file into smaller better grouped files. For this a finished test suite is necessary though, so the refactor does not do any damage.


HexoSynth: Today I implemented help texts for the matrix context menus.

HexoSynth context menu help
HexoSynth context menu help

YouTube Sound Demos

Devlog 12 Conclusion

The last two weeks have been dedicated to improve the onboarding of new users. I've invested into a Markdown to Wichtext translator, which enables me (and other potential developers) to write Documentation easier. Word wrapping is now done automatically and does not have to be done when writing the documentaiton. Also the DSP node built-in documentation was simplified for the author.

Next I fixed the Ad envelope node for retriggering and with that I built a better demo patch for when you open a new patch. I also worked on the volume/gain handling and made those knobs actually work in dB units now. I hope this sanitizes volume and gain control a little bit more.

With all that these items are off the list:

  • Rewrite the online help.
  • Add a getting started tutorial.

That means HexoSynth now has a proper introduction and usage reference online. The matrix mouse controls are in a very prominent spot, so that new users can't overlook these and can immediately get into the usage.

I've refined my immediate TODO list for the next HexoSynth release a bit:

  • Improve patch saving/loading with a file management.
  • Add more automated test cases for the UI workflow.

I'm going to put these on hold for now:

  • 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