HexoSynth 2022 - Devlog #5 - Signal Monitors and HexoTK Bugfixing
The HexoSynth modular synthesizer (programmed in Rust) got back it's signal monitors and a few bug fixes.
If you don't want to dig through the detailed log or watch the video:
TLDR: Skip to the Devlog 5 Conclusion Section
This weeks progress (eg. the signal monitors) can be seen in this video, where I show some patch building workflow:
About my own HexoTK GUI Library
A big chunk of this week was taken by bug hunting in HexoTK. There were some issues with internal widget IDs, which lead to some weird behaviour. This is one downside of writing your own GUI toolkit.
On the other hand HexoTK allows me to write very custom widgets very fast. And I don't have to bend myself to fit into some data oriented GUI toolkit/framework like eg. Druid or iced. Another option would of course have been egui, but the strength of egui comes in where you integrate it into an exising 3D engine. Also very important for me was the integration with WLambda, and egui would have meant that I have to run through all the calls for the GUI every frame. I have not measured the overhead, but that is something I certainly don't want to deal with on the WLambda GUI scripting level.
HexoSynth: The signal monitors are back now! I still have to add the edge labels to the signal graphs, but they are already worth a lot right now to get a clue of what is going on with the signals for a node in the hexagonal matrix.
A little while later, and the labels were also done:
The current value was missing from the monitor graphs in the old HexoSynth. Quickly added them now:
HexoSynth: Added a cell context menu. For now only for removing a cell from the matrix. But there are certainly more possible actions to come!
HexoSynth: After so much very visible progress, I only wrote a few GUI tests. I want to cover most of the recent functionality with tests, so that I can refactor the UI code a bit without worrying of introducing too many bugs.
With JS + Selenium + Chrome Driver I always have async issues and have to work around with that. In HexoTK, the test driver is directly triggered after each drawn frame. so it stops the GUI and can inspect a list of text labels the painter of the GUI logged in the last frame.
HexoSynth: No much today, except more implemented GUI tests.
HexoSynth: Started working on the new picker node click workflow. The expectation that should be met when clicking on a DSP node in the node picker is, that it should be placed on the matrix grid. Or at least that something happens. But I want the user to be able to grow a signal chain simply by clicking on the node buttons.
HexoTK: Found a bug in HexoTK regarding the handling of internal widget IDs. I need to revisit this part of HexoTK, which will take some time.
HexoTK: Started working on fixing the widget ID handling. This is one of the downsides when writing your own GUI library. You will have to debug it yourself until it's stable enough.
HexoTK: Finally fixed the widget ID handling and hover detection bugs. HexoTK now also properly records the layer index and tree depth of each widget.
HexoSynth: At startup the pattern editor was not setup properly. This is now fixed.
HexoSynth: Node picker LMB/RMB clicking now allows to directly build a DSP chain. Placement of the nodes is randomly choosen among the free options.
HexoSynth: A help button was added to the node picker, that opens a little help text about the picker usage.
HexoSynth: The "Tracker" help button moved into the top right of the pattern editor. And the help text is extended by the TSeq documentation, to have it all in one place.
YouTube Sound Demos
In this video I'm just playing around a bit and demonstrate the usage of the node picker. The signal monitors in the bottom left are new too.
Devlog 5 Conclusion
Like I envisioned I brought back the signal monitors. I've got the idea of the signal monitors of the currently selected hex matrix cell from Bitwig's - The Grid:
It helps me a lot seeing the inputs and outputs of my DSP nodes without having to drag in an extra component and wiring it up manually:
That screenshot was taken with all due respect to Omri Cohen, one of my favorite channels on Youtube. I draw a lot of inspiration from his content and his music.
Also the matrix editing or at least DSP patch building was greatly simplified with the new picker workflow. The integrated help I added will give anyone who tries HexoSynth an immediate hint of this workflow.
The complete HexoSynth code base is also using rustfmt now for code styling. I did this because I got the first contributor to HexoDSP, and I don't want to turn down Git pull requests due to formatting issues (too much).
Next tasks, not necessarily in that order, are still partially the same as the last week:
- Implement even more graph/matrix grid editing mouse gestures to the DSP matrix.
- Implement a basic sample browser to load samples in the Sampl node.
- Add back editing CV widgets.
- Rewrite the online help.
- Add more cell context menu functionality that deal with cell based editing actions.
- Add inserting DSP chains that are to be pre-defined. And also inserting random DSP chains for a more explorative/experimental workflow.
- Finish the nih-plug integration. That means a better integration of HexoSynth as VST3/CLAP plugin into your favorite DAW.
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:#email@example.com.