I finished the initial implementation of the choke region recoloring effect. The way it works at the moment is by recursively generating textures for each lane starting from the bottom of each track and moving up one by one. Each texture is added to the one generated by the lane below.

Assuming each block has choke turned on, the above configuration will generate a set of choke textures that lo...
2021-04-04 16:21:15 +0000 UTC
View Post
Discord link for new people:
https://discord.gg/9ZW2UXM
Over the past few days I fixed some horrible new audio engine crashes that I discovered while testing things, and I re-implemented the snapshot system that I previously disabled and got bouncing working again.
I also spent some time trying to solve some design and technical issues with the new "always visible" envelopes featur...
2021-04-03 00:52:14 +0000 UTC
View Post
The envelope editor is now fully reimplemented and I added lots of improvements. The most obvious ones are:
- An "Enabled" toggle in the bottom right which allows you to disable the envelope without clearing the points.
- An "Always Visible" toggle as demo'd in the video
- Points can now be selected by left-clicking on them and an x/y editor will appear in the footer for precise editing of points.
- Points now always snap to micro-increments when appropriate (us...
2021-03-30 13:42:54 +0000 UTC
View Post
I have been working on hooking up the modulation editor UIs to the new system, in particular the modulation selector in the header and the footer controls. Some of these controls have been re-used but a lot of it has had to be rebuilt. The way these controls would populate themselves previously was really hacky. Now everything is much cleaner but also much more complex internally due to parameters all being dynamically generated.
This video mainly just shows off some small visual improv...
2021-03-26 16:11:22 +0000 UTC
View Post
I like having block parameters visible at the front rather than hidden in menus but there is always going to be limited space available.
To make the spin-box controls a bit smaller I made a standard set of icons for amp, pan, pitch and sample offset. The sampler plugins can specify which icon to use for each parameter or otherwise just display a text label. In the future I could also load additional icons directly from the sampler DLL.
I also created a custom container to display ...
2021-03-19 16:01:49 +0000 UTC
View Post
The last one I posted is pretty out of date now. Things changed a lot because I decided to abandon those plans for the modular effects system in favour of something which I think will be much better in the long run.
1.1 Finish modularizing the sampler engines
I was previously thinking of putting this on hold and reverting back to the old system because it was giving me so much trouble but I struggled through the worst part and I'm feeling a lot better about it now...
2021-03-17 15:02:45 +0000 UTC
View Post
By double-clicking anywhere on a lane it toggles an "expanded" mode on and off. There's no official name for this state really. When a sampler block is on an expanded lane all its controls are visible, otherwise it only shows the waveform (and in the upcoming version, the choke envelope).

Only one lane on a track can be expanded at a time. When a lane is expanded all the other lanes on the trac...
2021-03-12 17:34:23 +0000 UTC
View Post
I've been working on a lot of different things over the past week. The data structure of projects has changed completely since v0.12.1 alpha so for a long time saving and loading has been broken. This makes testing things annoying so I finally got around to making it work again. The worst thing about the old project structure was the really stupid way I was storing effect rack data, but those are now removed in preparation for the new effects system so I was happy about not having to worry ab...
2021-03-11 17:05:35 +0000 UTC
View Post
The new version of the audio engine will have the audio signal of a single track being routed downwards through the lanes with blocks being able to manipulate the dry signal coming from above them in various ways. After the work I did properly implementing the fade-in/fade-out periods at the edges of blocks I realised it was now trivial to take the resulting amplitude curves and generate gate signals.
The ter...
2021-03-04 14:01:05 +0000 UTC
View Post
The Edges
To avoid clicking at the right edge of a block, Blockhead automatically adds a short fadeout to the end:

(I am drawing these lines freehand in MS Paint so they won't be accurate.)
This fade-out is very short but enough to eliminate nasty sounding clicks that can occur when a sample suddenly stops playing back.
During regular playback, no fade-in is...
2021-02-17 03:00:13 +0000 UTC
View Post
I have been having health problems for the past few weeks and have only been able to work on Blockhead for a few hours a day due to tiredness. I spend a lot of time sleeping for 4 hours at a time and feeling fatigued all day. There is a lot of stuff that I wanted to have finished by now that I haven't managed to do so I am very unhappy and frustrated.
I have spent a lot of time working on modularizing the sampler engines and still have not managed to figure out how it should be architec...
2021-02-01 13:08:05 +0000 UTC
View Post
There is something about music software that doesn't feel right to me. Maybe you agree and that's why you are here. It's hard to explain this feeling of wrongness when I'm such a terrible communicator so I have to rely on this combination of vague handwaving and broken analogies.
It feels natural to draw comparisons to graphical art software since on the surface the problems of digital graphics and digital audio seem pretty similar. You are using a computer interface to generate a seque...
2021-01-17 21:53:57 +0000 UTC
View Post
I am pretty happy with the progress I have made with the refactoring so far though it turned into a much bigger job than I anticipated. The second stage of refactoring (modularizing the sample playback engines) is probably going to be rolled into the first stage because it is easier and more efficient to do them both together.
This is because I am changing the way all project data is stored and manipulated and this includes the modulation system which interacts heavily with the playback...
2020-12-31 00:13:34 +0000 UTC
View Post
These are just the big tasks and features. The order of tasks might change. Smaller features not listed here will likely still be worked on in between everything else.
Massive refactoring Part 1
I'm slowly going insane because the design and scope of Blockhead is becoming much clearer in my head so I have a better idea of how the pieces are all supposed to fit together and how stupidly ambitious it all is. It's necessary to throw a bunch of old code and replace it...
2020-12-18 20:54:32 +0000 UTC
View Post

For the past week and a half I have been working on moving a bunch of UI code from GDScript to C++, mainly the block layout manager which handles block stamping, drag&drop, block resizing and tempo transformations.
This started with just reimplementing the actual logic for how blocks should move around, hopefully...
2020-12-16 22:17:21 +0000 UTC
View Post
The process of distributing new Blockhead builds is currently quite miserable. I have tried to streamline the actual build process as much as possible but the distribution process is really painful right now because my internet connection is so rubbish, much worse than the average in my area. I don't know why I am with such a crappy ISP. It takes forever to upload the zip files and during that time the rest of my internet access stops working. This was not so bad when I was just uploading Win...
2020-12-06 16:11:37 +0000 UTC
View Post
Update Notes:
- Feature: Key binding editor
- Feature: Key binding import/export
- Update: New settings dialog
- Update: Visual changes to dialog boxes
- Bugfix: Crash is possible when resizing window
- Bugfix: Undo/Redo notifications labels are offset when big font is selected
- Bugfix: Undo/Redo notifications can overflow bounding box when big font is selected
- Bugfix: Mod editor is not initialised correctly when block is undo'd or...
2020-12-06 00:30:21 +0000 UTC
View Post
Update Notes:
- Bugfix: [macOS] Should now work on older mac versions (I think theoretically back to 10.11)
- Bugfix: [macOS] Crash when the Remove Track button is pressed
- Bugfix: Visual issues in project save dialog when big font is selected
The default keyboard shortcuts on macOS are currently bananas due to a bug in Godot. Some of the existing shortcuts also do no...
2020-12-02 18:00:30 +0000 UTC
View Post
v0.11.1 should be functionally identical to v0.11.0. Many internal changes were made to get everything working on MacOS.
I am currently building only for x86 architecture however it is likely that I will be able to support running natively on Apple's new ARM processors in the future.
Edit: Seems to only be working with 10.15 Catalina and up. I will try to fix this and upload a new build tomorrow.
2020-12-01 16:55:12 +0000 UTC
View Post
Update Notes:
- Feature: Basic song rendering (from workspace context menu). If there is a sample start block on the workspace then rendering will start from there and stops at the end of the last block that makes a noise.
- Bugfix: Custom song start value is not sent to the engine on project load
- Bugfix: Song start is not reset to zero when start block is removed
- Bugfix: Playback reset event has to occur twice before playback is reset
- Bugfix: File ...
2020-11-28 13:30:30 +0000 UTC
View Post
Update Notes:
- Feature: Added "Resample" checkbox to export dialogs (visible when a sample rate is selected which differs from the source sample rate). When enabled the resulting file will be the same length/pitch as it is in-DAW though upsampling or downsampling may need to be performed to achieve this.
- Bugfix: Downsampling effect produced in very long projects/samples caused by song traversal precision errors
- Bugfix: Default sample rate is not set correctly...
2020-11-26 17:09:21 +0000 UTC
View Post
There's a pretty bad bug in Blockhead at the moment where if you go far enough left or right in the workspace and start playing audio all the way over there then you will start to hear a sample reduction effect, which gets worse the further to the left or right you go. This is the most audibly noticeable bug in a family of related bugs that I am currently working on related to floating-point precision errors.
The engine processes audio in buffers of 64 frames. At the start of each buffe...
2020-11-24 15:37:42 +0000 UTC
View Post
Update Notes:
- Feature: MP3 sample support
- Update: Sample data is now stored in project files in WavPack format. 32-bit samples are no longer converted to 24-bit. Any existing FLAC format project files should still be openable
- Update: FLAC removed from exportable formats
- Update: WavPack (.wv) added to exportable formats (pure + lossless mode only)
- Update: Dropped support for Ogg Vorbis, AIFF, and some other more obscure audio formats
2020-11-23 17:52:04 +0000 UTC
View Post
When a Blockhead project is saved it currently encodes all the samples as 24-bit FLAC files to save space. This means 32-bit samples are converted to 24-bit when the project is saved which is not ideal. The FLAC format does technically support 32-bit float but most FLAC encoders don't.
Thankfully there is a nice alternative - a lesser known lossless compression format called WavPack. The compression ratio seems to be similar to that of FLAC but the official codec also supports 32-bit fl...
2020-11-21 15:27:36 +0000 UTC
View Post
Update Notes:
- Feature: Block export (From sample block context menu)
- Feature: Can now drop a single *.blkhd file onto the Blockhead window to open it
- Update: Users are now prompted to save unsaved changes on New Song, Open Song and Quit operations.
- Update: Internal changes to the way sample data is stored which might speed up some operations a bit (though I have not benchmarked this)
- Bugfix: Bounced effect data can produce a click at the end
2020-11-19 16:50:51 +0000 UTC
View Post
Update Notes:
- Feature: Sample export (Triggered from the context menu in the sample list). Supported export formats are currently WAV and FLAC. Block exporting is still in progress.
- Update: Background tasks that fail for some reason will keep a dismissable error message in the task list
- Update: Background tasks will no longer be aborted except when there are no references remaining in the undo/redo history
- Update: Background tasks that are aborted d...
2020-11-17 13:57:03 +0000 UTC
View Post
Update Notes:
- Update: Zoom and scroll position is now saved with project
- Update: Slight visual improvements to waveform rendering.
- Update: Several small waveform glitches were fixed and LODs should be more accurately sampled now
- Update: Waveforms should be quicker to generate but larger samples might use a bit more memory than before. Probably needs more tuning to balance this
- Update: Grain offset generation should be a bit faster now
- U...
2020-11-14 12:52:27 +0000 UTC
View Post
Blockhead is a mixture of C++ and a language called GDScript, Godot's built-in scripting language. All of the audio/performance critical code is C++ whereas the majority of the UI is written in GDScript.
GDScript makes it really easy to prototype new UI ideas and get things working very quickly. It's no good for professional audio code because it's so dog slow but performance wise it's perfectly good for UI/event processing which is really what it's meant for. However one of the problem...
2020-11-12 12:20:12 +0000 UTC
View Post
Update Notes:
- Bugfix: Possible crash occurs while placing a new sample block at the current playhead position while the song is playing.
- Bugfix: Grain uniformity defaulting to 0% in engine when there are no modulation points.
- Bugfix: Middle mouse button no longer panning the catch buffer.
- Bugfix: Catch buffer waveforms are not fully generated upon opening the catch buffer after leaving it closed for more than half a catch cycle.
- Bugfix: Slice ho...
2020-11-11 16:40:49 +0000 UTC
View Post