Home Artists Posts Import Register

Content

I have been trying to balance my time between bug fixing and working on new features. There are a few important bugs I need to investigate and crashes are still too frequent so there will likely be another bugfix build soon.

Outside of bugs I have been working on several things -

Block saving and loading

The sidebar has had an empty "Blocks" tab for ages. The latest build (v0.16.1) actually has a "Save" option in the sampler block context menu which I left in accidentally. It doesn't visibly do anything yet if you click it. Eventually we will be able to save and load blocks and they will be listed/managed in the same way samples are. The current list interface is definitely not finished yet either.

There are a bunch of considerations that make blocks saving/loading a more complex task than it seems at first.

  • As well as being able to save blocks as reusable objects in the project, I also want to add the ability to also save blocks to disk with a file extension like *.block or something like that.
  • Sampler blocks don't store a copy of the sample they are using in memory, they just have a reference to the sample, the lifetime of which is managed by the project. So when saving a block to disk I also need to store the sample along with it.
  • There should be an option to save a sampler block with no sample attached, as a way to store and recall manipulations which can be applied to any sample.
  • This whole thing becomes even more complicated when it comes to implementing macro blocks (blocks which contain other blocks inside them) in the future. I will cross that bridge when I come to it but I am trying to write things in a way that will make things relatively painless down the line.

Manipulator blocks

I have started working on implementing this finally. There is a lot of things I need to do to get it all working. The first thing I will try to add is a standalone envelope block which you can add to the workspace which can affect the parameters of the other blocks below it.

I have tried to write a proper explanation of how this will work and why I think it will be an interesting/powerful way of manipulating things but I find it really difficult to explain so it's probably best to just implement it and hopefully it will be somewhat intuitive to use.

The interface for configuring how modulation is routed from one block to another is still something I will need to figure out through prototyping.

"Berk" synth

I have been developing a Kelly-Lochbaum Vocal Tract synth based partly on the model employed by Neil Thapen's Pink Trombone. I briefly demo'd how it sounds on Twitter: https://t.co/yF1YjOVC7t

One technical hurdle was it turns out the model sounds different depending on the current audio device sample rate, because the rate at which the vocal tract is processed affects the way it resonates. To solve this I created a dynamic resampler which allows the vocal model to be calculated at a constant sample rate and automatically converted to the sample rate of the engine, so now it should always sound the same regardless of sample rate.

I decided to work on this synth because I think it will be a very good test of how expressive the manipulator block idea can be. The vocal tract model allows you to generate quite interesting little transients and fricatives as the tract opens and closes, but manipulating the model using envelopes alone is quite awkward. The manipulator system will hopefully provide a way to easily create temporary parameter overrides which you can move back and forth in time.

Combining this with the block saving/loading I will be able to create a library of consonants and vowel sounds which can be recalled as preset manipulator blocks, and placed over the top of a Berk block.

As it stands the synth is already quite funny to play with so I will include it in the next build, however I think when the manipulator system is added is when it will really come alive.

Comments

No comments found for this post.