Workshop Journal · Chapter 09
The bucket brigade · CPU hunt, part II
FLUX stops being tape, two days paying the CPU bill, a delay too strange to stay an effect, and two cracks somebody else found
28 Jul–3 Aug
28 Jul 2026
The clock is the instrument
FLUX has been a tape echo since the fork. It is now a bucket-brigade delay, modelled on the Deluxe Memory Man. A bucket brigade is what it sounds like: the signal is handed down a chain of 8192 tiny buckets, one step per tick of a clock. Nothing is stored at an address, so there is no such thing as reading it back from 300 ms ago — the delay time is simply how fast you tick. Speed RATE up and everything still in the chain comes out pitch-shifted. Tick slowly and the highs don’t survive the trip, which is why long delays go dark. No filter is doing that.
Two knobs got their real names. DUST became DRIVE and sits inside the loop, so every repeat saturates again. ROT became STAGES, 512 to 16384 — physically that is swapping the chip, five octaves of brightness at a fixed delay time. And the delay-time modulation lane finally reaches the clock: ±2 octaves, with the Memory Man’s whole chorus range in the bottom tenth. No knob was added.
Then DRIVE turned out to be inaudible — not silent, just 14 dB quieter across the knob, because the makeup gain was shrinking the saturator’s ceiling. Fixing that made FEEDBACK bloom too early, so DRIVE was divided back out of it. On the Seed one line costs 5.61 % of the block budget at its worst, and the delay memory dropped from 4.19 MB to 128 KB. Shipped as v2.15.0.
28 Jul 2026
It boots humming
Dropping the module in used to get you polite silence and a table of code defaults. It now gets you a drone. The init patch is a snapshot of a session that was worth keeping — touch nothing, and that is already what comes out. Shipped as v2.15.1, in the current build.
30 Jul 2026
Two days, nothing to hear
Filed under: venting · see the addendum
The CPU hunt has swallowed two days and produced not one audible change, which makes profiling the last job on this project that AI has sped up by exactly nothing — so here is a drone instead.
Addendum · 31 Jul 2026
It landed. The workload the whole hunt was chasing is the full eight-voice instrument with the bucket-brigade delay on top; laid out the ordinary way, in the far SRAM, it measured 108.9 % of one audio block — the polite way of saying the sound stops. Moving the audio hot set into the chip’s tightly-coupled instruction memory took it to 102.8. Keeping the instrument’s state in the tightly-coupled data memory took about half a point more. Compiling at -O3 — the last thing tried, and the cheapest — took it to 99.5 % in the real audio callback. Under the gate by 0.46 of a percentage point, which is less a margin than a rounding error with an opinion. Link-time optimisation was measured too, and rejected.
So: two days, and still nothing you can hear. That was always the point — the drone below is the same one, it just fits now.

2 Aug 2026
Too strange to be an effect
A bucket brigade does something a tape echo cannot: it bends the pitch of what is already inside it. Push it, and the repeats come back in tune and on the grid, with long gaps between them. Wonderful. Also completely useless as something you hang across a finished mix — it does not colour the music, it writes some. Too strange to be an effect. So it stopped being one.
BBD is the fifth engine, and the first with nothing to play: no oscillator, no sampler, no voices. Put a deck on it and that deck stops making sound and starts eating it — the other deck plays through it, and the same five lanes that used to shape a voice now set the clock, the feedback, the mix. It is the first patch on this instrument where the second half is not a second instrument, but what happens to the first one.
That cost the decks a proper audio path to each other, which was most of the work and none of the fun — and it paid, sideways, for something that has been sitting on the ideas list since the sampler landed: resampling. Now that one deck hears the other at full rate, letting the sampler record what the other deck is playing stops being a plumbing problem and becomes a question of which button. FLUX, meanwhile, lost its job and went back to being a tape echo, which it is better at. Whether any of it was worth doing is not an argument to have in writing. Take 106 is below. Shipped as v2.17.0, in the current build.
3 Aug 2026
Somebody read the whole thing
Olli — Blipps — read this diary. Not skimmed: all forty-two entries, end to end, a week of evenings to get through them, and then he went and played the module long enough to find something in it. That is a lot of somebody else’s week spent on a project only its author had ever heard. Thank you.
What he found was a click. Right channel only, and only while the bucket brigade’s COLOR is moving. COLOR hands the two stereo lines different stage counts, MOTION moves COLOR at the lane’s rate, and every time a count changed the delay line was resized underneath the playhead — the read index jumped to a different charge packet, and the output filter turned that step into an impulse. The test that existed proved a stage change left the engine finite. Nothing proved it left the engine continuous, so the crack lived in the one gap the tests left open.
The fix: the ring now always spans its full memory, the stage count only picks how far behind the write head to read, and a change crossfades from the old tap to the new one over a few ticks. Fixed stages stay bit-identical — if they don’t, the fix is wrong. Shipped as v2.17.1, in the current build. Which is the part worth keeping: an instrument only one person has ever played has bugs shaped like that person’s habits. I never push COLOR that hard. Blipps did.
3 Aug 2026
Every knob says what it does
The faceplate got a redesign, which mostly means it stopped lying. SCAN sat beside MELO and LEN beside SUB on every engine — true on one deck, decoration on the other five. Now each engine writes its own words at the knob, REC shows up only where it records, and MELO is called VARY, which is what it always did.
Then Blipps came back with another one: turn SMEAR up and the room went gritty, as if something cheap had been sampled into it. To save CPU, the slow random drift inside the reverb was only refreshed now and then and stood still in between, so the room jumped where it should have slid. It slides now, and the saving survived. Shipped as v2.18.1, in the current build.
Which leaves the bloom. Wind DECAY up far enough and the reverb starts feeding itself, and it comes back louder than anyone asked for. A lid alone was not the answer — quick enough to catch the swell, it pumped. So the room got a soft ceiling that moves in seconds, and past the point where it takes over, the dry sound steps aside and lets the tail through. DECAY reads out in percent now, so that point is visible instead of hunted by ear.