SakeTami
colugomusic
colugomusic

patreon


Roadmap as of 29/07/2021

1. Block references (done)

As detailed in my previous post. I have been working on this exclusively for the past week. It feels like I'm about 30% done. It is not a very difficult task but it is a massive one. Sometimes I forget how much work I have done on Blockhead and how huge the codebase has already become. In this case I have to go through pretty much everything and change any code that currently deals with blocks so that it interfaces with block references instead. I've had to decide where each bit of block state should now be stored between blocks and references. For example a block's position, which lane it is on, and whether or not it is muted are now part of the block reference state rather than the block state. One thing I thought of that I also want to add in the future is the ability to override the sample for an individual sampler block reference, but I won't be implementing that yet.

Part of this task involved changing the way block data is synchronized between UI and the audio engine. Since I had to change that code anyway I decided to optimize things a bit. Currently Blockhead just sends state changes to the audio backend immediately which seems to work well enough at the moment but there is some redundancy in the data being sent and I'm worried it might not scale well as things become more complex. So now state changes are consolidated into batches and sent to the audio engine during idle time. This new system isn't tested yet because I'm still in the middle of changing everything. Hopefully it works ok!


2. Finish "Berk" and "Tract" plugins (done)

I v0.17.0 I will include the new vocal synth "Berk" as it is pretty much done, though the plugin system itself on which the synths and effects are based is still a work in progress.

I also took the vocal tract section of the model and separated it out into its own effect plugin which for now I simply named "Tract".

The "Tract" effect introduces a small amount of latency because it needs to buffer the input signal. In this particular effect the latency is really tiny and not noticeable but in the future some other effects might need to add a noticeable amount of latency (FFT-based effects for example). So I added a way for plugins to report back to Blockhead how many frames of latency they are introducing to the signal and the information is added to the effect block header.

In the future I should be able to use this information to do automatic latency compensation on a per-block basis. This is quite interesting because in traditional DAWs if one plugin in your signal chain introduces some latency then all audio channels across the entire DAW need to be delayed slightly to compensate for it. In Blockhead this isn't necessary since effects are not free-running. The latency can be fixed on more or less a per-block basis by virtually nudging the block backwards in time. I haven't given this any proper thought yet so it's still theoretical!


3. Re-implement some old effects (done)

Someone asked recently about some of the old effects that are currently missing. I simply didn't get around to adding them back yet because I have been working on so many other things. It won't take much time to reimplement them so I will get to it soon. The old effects that are currently missing are: Lo-fi, Saturator and Zap.


4. Manipulator blocks, and fleshing out the plugin system

The plugin system upon which the samplers, synths and effects are based is still not properly fleshed out as you can tell from the big stupid "NOT DONE" messages. This is partly because it is going to have to interact very closely with the "manipulator blocks" idea that I am planning.

When I first implemented the new effects system I thought about adding back the big parameter knobs from the old system so that we can interact with the parameters that way, however I don't think this would actually be a very good use of that space. The empty space at the front of the synth and effect blocks is pretty valuable when considering the information that will need to be presented once manipulator blocks are added. Sampler blocks are a bit of a problem since the space is already completely filled by the waveform, but hopefully I can find something that works.

Manipulator blocks are going to be a very complex thing but essentially they will allow you to manipulate the parameters of the other blocks on a track in various ways. I don't know how long it will take to get this right but it will probably be a few months of work. I hope that this system will be where Blockhead really starts to come alive. There is of course a chance it turns out that I am completely wrong about everything and everyone hates it!


Future tasks

Once manipulator blocks are in there are some branching paths I can take. The main two big areas are:

MIDI input: As mentioned in the previous post, there will be some kind of custom instrument creator/editor which integrates with the block list. The initial pass at this will probably just add a way to play/trigger stuff live so that it can be recorded using the loopback buffer. Recording blocks and envelope data directly into the workspace via MIDI will likely come at some point.

Macro Blocks: The idea still works in my head. I think it will be a very big task, probably bigger than the current "block references" thing I'm working on, but smaller than "manipulators". Once this is done, all the most basic systems that I have in my head about how Blockhead should fundamentally work will be complete.


More Creators