01
Overview
Capicola listens constantly. Two independent channels, left and right, each run a transient detector over the input. Every detected transient, or a tap of B2, or a rising edge on a jack assigned to Slice, splices the granular playback head onto fresh material. Pitch and time-stretch are fully decoupled, and the stretch grid re-anchors on every trigger, so stretched tails ring out underneath while the output stays locked to the incoming rhythm.
The wet path's latency is the OLA crossfade: 20 ms by default, adjustable 10 to 250 ms on the secondary page. The fade limits automatic retriggering; B2 and a jack assigned to Slice can bypass it. Audio runs at 48 kHz, 24-bit stereo.
Driven by six pots across four pages in two groups, three buttons, six CV jacks, and a preset store.
02
The engine
The DSP is keyframe time stretching via extrema sampling, peer-reviewed for DAFx26. Incoming stereo is stretched, and in parallel its envelope and transients are extracted. When a transient passes the threshold, the lagging read head snaps to the current time with a short crossfade and stretches on from there. That is time stretching that stays true to the rhythm of the input.
Both detectors run on their own smoothed TKEO envelopes: the input side is the max of left and right, the output side runs on the post-mix sum. The output follower never triggers a slice; it is a signal source only.
03
Getting around
Four pages in two groups, each rotated by a single press of its own button. Each group remembers where it was left: pressing the other group's button jumps straight to that group's remembered page, and the next press of the same button advances within the group.
B1 group. Primary (orange) to Depth (pink). The six knobs you play, and their bipolar modulation depths.
B3 group. Routing (blue) to Secondary (teal). Per-knob modulation source, and the deeper voicing controls.
Every page stores its own value per knob. After boot or a page switch a knob is decoupled until the physical pot sweeps through the stored value, shown as a muted pip on the ring. Then it catches and tracks; nothing ever jumps. On the routing page the catch is zone-granular: entering the stored zone is enough.
04
Primary page (B1, orange)
The six performance knobs.
P1 Pitch, −2× to +2×.
Grain playback speed and direction. It is decoupled from time: the stretch clock keeps its own rate. CW of noon the grains play forward, CCW they play backward, up to 2× either way. Noon stops the head; near noon is just very slow.
- Noon: Stop
- Unity: At ¼ and ¾, held by a ±0.03× detent
P2 Stretch, bipolar.
Playback rate of the keyframe grid. At noon the grid stops instead of crawling. CW runs it forward up to realtime, CCW runs it backward up to realtime reverse.
Running out of buffer
The recorder writes sparse keyframes into a ring buffer of fixed size: 2^21 keyframes per channel, about 44 seconds of full-rate stereo audio. Only extrema are kept, so in practice it holds minutes, and longer at low Quality. If a freeze or a reverse leaves the grid behind the oldest keyframe, it jumps back to now with a full crossfade rather than a click.
- Noon: True freeze
- Taper: |u|^2.5 each side; ¾ ≈ 5.7× slower
P3 Threshold, self-calibrating. Events are kept at a running average of the detector's own envelope, so it is a ratio, not an absolute level: no gain-staging, and it survives level changes. The very top of the knob mutes auto-triggering; only B2 or a jack assigned to Slice can start a slice.
P4 Grain size, 32 to 4096 keyframes. How much keyframe material a grain covers before the head is sliced on.
P5 Quality, ε 0.03 to 0.001. The analyzer keyframe threshold. CW is full fidelity; CCW drops keyframes for a sparse, crunchy reconstruction. Lower quality means a longer buffer.
P6 Feedback, 0 to 1.5. Loop gain. The wet output runs through a sinc saturator and a bandpass, then back into the recorder where it is re-sliced and re-pitched. Above unity is deliberately unstable. The tap sits before the mix blend, so pulling mix down never starves it.
05
Depth page (B1, pink)
One bipolar modulation depth per Primary knob. Noon is off; a faint pink glow marks a centred depth. Each pot sets how hard its modulation source pushes the same-numbered Primary knob: source × depth.
The two followers are unipolar, 0 to 1. The CV inputs are bipolar.
Hold B3 and nudge a depth toward noon to snap it to exactly zero; nudge it back to return. B1+B3 returns every page to factory, every depth included.
06
Routing page (B3, blue)
Each potentiometer is divided into colored segments that set which source that control's modulation comes from:
- Orange · input envelope follower
- Blue · output envelope follower
The selected segment glows with its source's live level, so you can see whether anything is arriving. The default is the input follower; how hard each source pushes is set on the Depth page.
Assigned CV is added to the internal modulation before the parameter is limited to its range.
07
Secondary page (B3, teal)
Deeper voicing controls, saved with everything else in the preset store.
P1 Smoothing. Cutoff of the follower both envelopes run through. Low-pass filters the signal before detection.
P2 Fade, 10 to 250 ms. Real-time latency, and button-triggered slice duration. Longer times mean more latency with longer crossfades on button press. This also limits automatic retriggering.
P3 Drive. Gain into the keyframe shaper, applied to the keyframes themselves to reduce aliasing.
P4 Character. A morph from a tape-like dropout saturation curve, to clean, to a wobbly boost saturator. The tape saturator reduces the volume of low-amplitude signals; the boost saturator boosts them.
P5 Mix. Dry/wet. The wet path lags the dry by the fade, so mid-mix settings comb against sustained material. Full wet is the classic Capicola behavior.
P6 FB Tone. Bandpass centre inside the feedback loop. Affects the tonality of the feedback.
08
Buttons
B1, Page.
Primary ↔ Depth, on release
Saves all four pages as your save point, which is also what the module boots into.
- Gesture: Hold B1 + B2 for 0.33 s
- Writes: Slot 1, the boot slot
- History: The save it replaces joins slots 2–16; the oldest drops off
- Confirms: Three white flashes
Every page returns to its factory defaults, whichever page you're on. Your save is untouched, so B2+B3 brings it back.
- Gesture: Hold B1 + B3 for 0.5 s
- Affects: All four pages
- Confirms: Three white flashes
B2, Slice / Flip.
Slice both channels, on release
Hold B2 and nudge Pitch or Stretch, and its value flips polarity at the same rate: 1.5× forward becomes 1.5× reverse. Flip back and forth for as long as B2 is held. On release, whichever polarity it's in becomes the new setting, and B2 doesn't slice.
- Gesture: Hold B2, nudge Pitch or Stretch
- Where: Primary page
Brings your save point back on all four pages. Catch pips show on any setting that was different. It also undoes a factory reset, which never touches the save.
- Gesture: Hold B2 + B3 for 0.5 s
- Reads: Slot 1; nothing if empty
- At power-up: Slot 1, or factory defaults if empty
- Confirms: Three white flashes
B3, Page / Shift.
Routing ↔ Secondary, on release
Hold SHIFT and nudge any knob, on any page, and it snaps to its factory default: depths to exactly zero. Nudge back the other way while still holding and it returns. It's the per-knob factory reset.
- Gesture: Hold B3 (SHIFT), nudge any knob
- Where: Every page
- Target: Factory, or your save point (web programmer)
Shift Snap Target.
Shift Snap Target (web programmer, Options) picks where a knob snaps: Factory, or Save point, its value in your latest save (slot 1), so each knob toggles between where you are and where you saved. Save point falls back to factory while nothing is saved.
All three buttons wear the visible page's color, so activity reads against it: B2 blinks dark on every slice, and a save, load or factory reset confirms with three bright white flashes on all three buttons.
The pips at six o'clock under P3–P6 always show the four followers, on every page and whatever the jacks are set to carry. The trigger pips hold for 60 ms, so a 10 ms pulse is easy to see.
- P3 pip: Slice triggers
- P4 pip: Output triggers
- P5 pip: Input envelope; red on input clip
- P6 pip: Output envelope
- Slice: B2 blinks dark
- Save, load, reset: Three white flashes on all three buttons
09
Jacks
Assign J3–J8 in Options in the web programmer.
IN L / IN R. Left and right inputs. The two channels are detected and sliced independently.
Pitch.
Incoming voltage modulates pitch.
Stretch.
Incoming voltage modulates stretch.
Threshold.
Incoming voltage modulates threshold.
Grain Size.
Incoming voltage modulates grain size.
Quality.
Incoming voltage modulates quality.
Feedback.
Incoming voltage modulates feedback.
Slice.
An incoming trigger starts a new slice.
Input envelope out.
Sends the input envelope from this jack.
Output envelope out.
Sends the output envelope from this jack.
Slice trigger out.
Sends a trigger whenever a slice starts.
Output transient out.
Sends a trigger when the output detector finds a transient.
Output is the mix; there is no dry normalling in hardware.
10
Presets and boot state
The slots are a save history. Slot 1 is always your latest save, and slots 2–16 keep the fifteen before it; once they're full, each new save replaces the oldest. Panel saves name themselves Save 1, Save 2 and so on, so the programmer shows their order; a name you give a save in the programmer is kept. Recall an older one from the web programmer: load it onto the module, then save from the panel to make it your latest.