Weird Constructor / Posts / HexoSynth 2022 - Devlog #4 - The Tracker Sequencer is Back

HexoSynth 2022 - Devlog #4 - The Tracker Sequencer is Back

The HexoSynth modular synthesizer (programmed in Rust) got it's pattern editor back.

This week was mostly about adding back the online help and porting the pattern editor back into HexoSynth. This was the result of a bit of playing around with HexoSynth' tracker sequencer in the pattern editor:

Detailed Log

  • 2022-07-04:

    • HexoSynth: Cleaned up the main git repository to contain the current development version.
    • HexoSynth: The movement of nodes and clusters of nodes did not move the focus cell position. Fixed this and wrote tests for this.
      GUI test case checking if cluster and single node movement gestures work properly.
      GUI test case checking if cluster and single node movement gestures work properly.
    • HexoTK: WichText got a default color markup: [t18:] for setting the default color of everything following.
    • HexoSynth: Added a floating button bar as menu for opening texts:
      Added floating button bar menu at the top of the HexoSynth window
  • 2022-07-05:

    • HexoSynth: Added back the old help text, which is unfortunately deprecated. Also I decided to add images to explain mouse gestures eventually. Generally worked a bit on my task list today and noted down things that need to be done.
      Help text from old HexoSynth 2021 included, unfortunately deprecated instructions.
      Help text from old HexoSynth 2021 included, unfortunately deprecated instructions.
  • 2022-07-06:

    • HexoSynth: Implemented a little help button in the status text help panel. It jumps directly to the reference documentation of the corresponding node the description belongs to. Also implemented an automated test for the existence and working of this button.
      Click on the '?' help button brings you to the reference documentation
      Click on the '?' help button brings you to the reference documentation
    • HexoSynth: Added a trigger button to the GUI.
  • 2022-07-07:

    • HexoTK: Pattern editor has been ported and integrated into HexoTK:
      Pattern editor successfully ported to the new HexoTK
      Pattern editor successfully ported to the new HexoTK
    • HexoTK: Fixed a but in the nested widget drawing in case the widgets were cached.
  • 2022-07-08:

    • HexoTK: The pattern editor is now properly updated when the play head changes the rows. The cursor can then be enabled to follow the play head and you can play notes and enter values.
      The cursor can now properly follow the play head of the pattern
  • 2022-07-09:

    • HexoSynth: Today the first task was to integrate the pattern editor widget into HexoSynth. For this I quickly implemented the WLambda API. To test if it works at all, I placed the pattern editor as panel on the right of the HexoSynth window. I want to make that pattern editor panel slideable, like the node picker. And also give it multiple tabs. For this I need to develop a proper abstraction for the panel first.
      Pattern editor widget test in HexoSynth with dummy data
      Pattern editor widget test in HexoSynth with dummy data
    • HexoSynth: The tracker keyboard help is now added back too. For now with a crude button at the top that calls up the tracker keyboard help.
      Tracker / Pattern editor keyboard shortcuts integrated
      Tracker / Pattern editor keyboard shortcuts integrated
    • HexoSynth: The pattern editor is nearly done now. You can edit patterns properly now, and the panel can be hidden now just like the node picker panel.
      Pattern editor integration
    • HexoDSP: For those Windows developers out there, I Implemented the cpal_demo_node_api example, which utilizes cpal instead of jack to push out samples to the audio device. With that example it might be easier to get a tone out of HexoDSP on Windows.
    • HexoSynth: Also quickly applied the cpal code I wrote for HexoDSP to HexoSynth. And now you also got cpal_standalone there.
  • 2022-07-10:

    • HexoSynth: The pattern editor has it's working playhead back! See the Youtube videos at the start of this blog entry.

WBlockDSP - Visual Programming Language for Audio DSP

WBlockDSP: A side project I started in end of 2021 was also WBlockDSP a visual programming language for audio related custom DSP functions.

WBlockDSP visual programming language to AST translation showcase
WBlockDSP visual programming language to AST translation showcase

The idea was to allow the user to build their own custom but limited nodes with a few mouse clicks. Mostly for simple CV signal changes or custom waveshapers this can be interesting.

As core the JIT compiler Cranelift is used. It's easy to compile into any Rust project and thus easy to deploy. It has code generators for x86-64 and aarch64 (ARM64), which should cover most platforms WBlockDSP would be relevant for I guess.

However, today (2022-07-08) I dusted off the old code and started to finish the first prototype of the internal JIT engine:

WBlockDSP JIT first test case written
WBlockDSP JIT first test case written

This functionality requires a lot more work. But the basic parts are there, which is already worth a lot. I have no clue if I will ever get to include this into HexoSynth. There are lots of little usability issues that have to be figured out first. Time will tell if I get back to this.

YouTube Sound Demos

First demo is about the trigger button in the parameter panel. With it you can easily trigger musical events from the GUI now again:

And second the video from the beginning of this page with the little demonstration of the pattern editor:

Devlog 4 Conclusion

Like I said last week, the pattern sequencer is back now. A modular synthesizer without a sequencer is hard to make sound pretty. There are more types of sequencers coming, but before I dive into new features, I want to bring back the old ones first. And then improve the online help for the brave people who want to try it out in it's current state.

The online help is also mostly back, unfortunately the matrix grid gestures are not accurate anymore. And those are which I got to reimplement soon too.

A minor thing is, that I also added a CPAL standalone version for HexoSynth now. Also HexoDSP got a CPAL example. CPAL is a low level audio device abstraction written in Rust. With that it's maybe easier to get a the sound working on systems without Jack.

The more or less immediate tasks I want to get done are:

  • Show input/output signal graphs of the selected DSP node.
  • Implement 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.

I really miss the old signal views, and those are likely the ones that we will see next reintegrated into HexoSynth. The graph/matrix grid gestures are also very important to reimplement. But I'm also eager to get sample loading back. I will let my mood decide what it's gonna be next.

Contact

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: irc:#lad@irc.libera.chat.

Links

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