Show newer

I spent another day on rooting out the bugs in the graph to abstract syntax tree compiler. It finally works now with all corner cases covered, including multi area handling with "if".

I can translate now a basic form of the BlockDSP graph into an abstract syntax tree (AST). It's really very simple compared to the other algorithms neccessary for the visual graph modifications.

I added now a way to split block chains by clicking on connected outputs and inputs. If you click on the output, the algorithm will make sure everything stays connected. I also added a delete gesture, dragging horizontally inside a block will remove it.

To make the whole BlockDSP coding experience more fluent I added, similar to HexoSynth, a way to move whole chains of blocks with a simple drag gesture. This makes refactoring and relayout of the code much easier.

There was one lingering problem: The output and input positions of the blocks were fixed. I added a new mouse gesture to shuffle the positions around: Right click on a port will push it one row down. With this you can layout nice block graphs.

The most complex feature were the new "if" blocks and the representation of control flow. The "then" and "else" cases of the "if" statement are sub areas of the main area. Moving blocks in and out of the sub areas works flawlessly and feels nice.

Today I added moving of blocks and cloning of blocks to the WBlockDSP GUI. Things finally come together. Most effort is always to cover all the edge cases and checking if there is enough space to move the block to!

Next milestone is done. I took the extra effort and porting the whole Block code GUI into an extra crate and separate it from HexoSynth for the time being. It's useful enough for any other sort of visual coding I figured. I also implemented a context menu to add new blocks.

WLambda can now be used to setup the BlockDSP language and code. With this prerequesites I can start coding the workflow for creating and modifying BlockDSP code via mouse.

Improved the mouse handling. Now I can select sub columns inside blocks, and the inputs and outputs are properly highlighted. This is all going to be important for the workflow.

The mouse cursor now gives feedback and I added sub areas for the "if" statement. The "then" and "else" branches are extra sub areas and the "if" statement will return the bottom right most result from that areas.

Here you see the first prototype of the BlockDSP visual programming language. Every block will have inputs and outputs on the left and right side. And blocks will send their outputs to the adjacent input. I still need to figure out how to represent control flow changes with the "if" statement.

Let me introduce you WBlockDSP. It's a little side project while waiting for progress on Tuix/VIZIA. The goal is to provide user programmable DSP nodes for HexoSynth, for things like control signals, wave shaping or maybe even to custom oscillators or filters. The language will be limited, so don't expect too much.

Someone on the RustAudio discord implemented a bowed string oscillator, which I adapted for HexoSynth. Thanks go to tubonitaub (aka Alec Deason) and the Ortetproject. It's a fickle little node, but can give you some interesting sounds. Here is just a little demo, it's a bit detuned though.

Worked on WLambda again a bit. I added the WLambda syntax parser to the standard library and improved the handling of the Syntax marker data types a bit. Now you can parse WLambda code and process it any way you like to. With "match" you have a powerful tool to analyze and transform the abstract syntax tree!

Next missing piece is adding the settings selector in and connect it properly. The matrix is already useable as you can see and I can hopefully soon make some nice audio demos again. The "save" button for saving patches is also new. Currently I wait for VIZIA to support efficient live updates.

Show older
Mastodon

A newer server operated by the Mastodon gGmbH non-profit