Lab notes

Bitcrust 1.0.8: pedal, sync, sweep, dice

Sustain pedal, sync mod destinations, modulation sweep on knobs, and per-step trigger probability.

Bitcrust 1.0.8 went up today. Mac and iPad App Store builds are uploaded and processing; the public macOS distro is on GitHub releases, Linux x64, Linux arm64, and Windows builds are on Gumroad. macOS is now a universal binary, so the same .app, .vst3, and .component run natively on Apple Silicon and Intel from a single artefact.

Four user-facing changes landed, none of them earth-shaking and all of them things I wanted bitcrust to have for a while.

Sustain pedal (CC 64)

Notes you’re holding when the pedal goes down keep sounding until the pedal lifts. Re-triggering a held note cancels its pending release so the next note-off doesn’t double-fire. Voice steal, voice-mode change, and panic (CC 120 / 123) all flush the deferred list. CC 64 is still routable to anything via MIDI-learn if you’ve remapped your pedal for something else.

Follow-up to the panic-CC handling that shipped in 1.0.2. The CC 64 ask had been sitting open since then, mostly because the bookkeeping around “which voices are pretending to be released and need a real release later” was the kind of thing easier to put off than to think through. Turns out it’s not that hard once you stop putting it off.

Sync Ratio + Sync Detune are mod destinations

Hard-sync (SYNC on a VCO) gives you the classic Oberheim “sync sweep” sound when you modulate its source pitch. Until 1.0.8 you could modulate the syncing VCO’s pitch (Coarse / Fine, both already mod destinations) but Sync Ratio and Sync Detune were static set-and-forget.

Now they’re matrix destinations too, per VCO and as ALL VCOs fan-outs. Concrete things this unlocks:

  • LFO -> Sync Detune for a slow chorus-like sweep on a sync tone.
  • Velocity -> Sync Ratio for octave-up jumps on accented hits.
  • Mod Env -> Sync Detune for one-shot sync-sweep transients.

Mirrors the existing ring-mod ratio / detune plumbing exactly, so the audio path was the small part of the work; the bulk was wiring the destination registry and the matrix UI labels.

Modulation sweep on destination knobs

This is the visible change. When a knob’s parameter is being actively modulated, a short accent arc draws along the same value ring as the main knob, starting at the current value and extending to where modulation is pushing it. Length scales with the mod offset, direction shows polarity (clockwise for positive, anti-clockwise for negative), and a small pip marks the modulated endpoint.

The point: you can see at a glance which knobs on the page are alive, and roughly how hard, without staring at the modulation matrix and cross-referencing slot to destination in your head. With three global LFOs, a mod envelope, MIDI sources, and 80-something destinations in the matrix now, the matrix view alone had become too dense to read in motion.

First pass was a magnitude-mapped glow ring outside each knob. It worked, but conveyed only magnitude, not direction or position. Replaced it with the Pigments-style sweep above before merge.

MVP scope: single accent colour, no per-source mapping yet. Per-source colour and multi-source layering are tracked as a follow-up.

Per-step trigger probability in the sequencer

Every step in the 16-step sequencer now has a 0-100% chance of firing on each pass through the pattern. Default 100%, so existing patterns sound identical until you touch it. A new PROB row in the step grid, edited the same way the other per-step rows are. Skipped steps emit nothing on MIDI-out, so no ghost notes leak to an external host or hardware.

The pattern randomizer (dice button) now varies probability uniformly across the full range too. Before, even with randomization, every step was either 0% (silent) or 100% (every loop) depending on the velocity gate; now you get genuine probabilistic variation as part of a random patch.

Asked for by Krupa in the Loopy Pro forum thread. Filed it as a public issue at the time, kept putting it off until the right balance of “small enough to land cleanly” and “I want it for myself too” lined up.

What’s next

  • iPhone UI for 1.1.x is still the big rock. Still going to take a while.
  • Per-source colouring and multi-source layering for the modulation indicator. The hard part is the engine helper for per-source contribution decomposition; the paint code is straightforward once that’s there.

More notes when there is more to say.