Firmware

capicola-versio

Hype29/100

Capicola — Heavy Light Industries' keyframe time-stretcher and transient-driven granular auto-slicer — ported to the Noise Engineering Versio. AGPL-3.0.

capicola-versio is custom firmware for the Noise Engineering Versio, by @timncox. Open source under AGPL-3.0.

forNoise Engineering Versio·by@timncox

Unclaimed. Is this yours? Sign in with GitHub as @timncox to claim it.

Downloads
0
Stars
0
Forks
0
Commit
1
Last commit
Get the source

No release files yet. Build from source.

AGPL-3.0· timncox/capicola-versio·downloads come from the creator’s GitHub releases

1
Commits
0
Releases
1 commit and 0 releases in the last year
Activity · last 12 months

Capicola — Versio

Capicola — Heavy Light Industries' keyframe time-stretcher, pitch-shifter and transient-driven granular auto-slicer — ported to the Noise Engineering Versio as custom Daisy firmware.

Capicola stretches incoming stereo audio while a transient detector watches the same input; when a transient passes threshold the lagging read head snaps to the present with a short crossfade and stretches on from there. That is why it stays rhythmically locked to material it is radically slowing down. It is the hardware form of the DAFx26 paper Keyframe Time Stretching via Extrema Sampling.

Status: builds, unheard. Every off-hardware test passes and the firmware links inside the internal-flash budget, but this has not yet been run on a Versio. Treat the panel mapping as a proposal until it has been played.

Block diagram

Install

The shipping build is BOOT_NONE — a plain internal-flash image, so Noise Engineering's own web uploader installs it with no bootloader and no toolchain.

git submodule update --init          # NOT --recursive; the nested SDK is unused
make -C firmware APP_TYPE=BOOT_NONE  # → firmware/build/capicola_versio.bin
RegionUsedSize%
FLASH73,568 B128 KB56.1%
SRAM54,768 B512 KB10.5%
SDRAM50,387,008 B64 MB75.1%

That there is ~54 KB of flash headroom is worth a note, because smack-versio reached the opposite conclusion on identical silicon and had to ship BOOT_SRAM at ~137 KB: capicola's entire DSP core and engine is 9.9 KB of .text at -Os, where smack_core is 22.5 KB. SDRAM is the region actually under pressure, at 75% — the two keyframe rings are 2²¹ frames × 12 B × 2 channels.

See FLASHING.md for the bootloader build.

Panel

K0 Stretch    K1 Pitch     K2 Threshold   K3 Grain
K4 Quality    K5 Feedback  K6 Mix

Hold the button for the VOICE page (pickup-gated, so nothing jumps):

K0 Mod depth  K1 Mod target  K2 Drive     K3 Character
K4 FB tone    K5 Env smooth  K6 Fade trim
SW_0    mod source   off / input follower / output follower
SW_1    fade         snap 10 ms · normal 20 ms · wash 120 ms
button  press = force a splice · hold = VOICE page
gate in TRIG IN — external slice trigger
LEDs    in-gate · out-gate · in-env (red = clip) · out-env

The Versio has no CV outputs, so capicola's ENV 1/2 and TRIG 1/2 jacks — the "self patching" half of the module — cannot exist here. Those four signals drive the four RGB LEDs instead. Offsetting that: every Versio knob is summed with its own CV input in analog before the ADC, which is upstream's Depth/Routing page for external CV, at full resolution and with no menu.

DESIGN.md has the full reasoning and two alternative mappings.

Testing

./scripts/test.sh

Three suites, all on a laptop, no board and no SDK:

  • upstream's own DSP core (upstream/lib, unmodified) — 220,158 checks
  • the port layer (core/) — 36 checks, including that a long host block is chunked rather than truncated
  • fidelity — compiles upstream's audio_engine.cpp unmodified against a fake daisy header and asserts the port is sample-exact against it. 0 differing samples in 144,000. This is the only test that can catch a transcription error in a hand-port; it is the reason the port can be trusted before it has ever been heard.

Relationship to the Move port

The shared port layer in core/ is duplicated verbatim in capicola-move — the two repos are deliberately standalone so each can be cloned and flashed on its own. A change to core/ belongs in both, and the fidelity test in each will catch drift against upstream immediately.

License

Upstream capicola is AGPL-3.0, so this is AGPL-3.0. Shipping hardware running a modified capicola obliges you to offer the corresponding source. Structural shape of the firmware shim is borrowed from smack-versio (MIT, © Tim Cox); MIT into AGPL is permitted, the reverse is not.