draft: false Name: Goldfish short-description: Weird delay/looper for audio and CV Language: C++ (Pico SDK + ComputerCard) Creator: Dune Desormeaux Version: 2.0 Status: Released demo-link: https://youtu.be/pdzMC6afrHY date-created: 2025-01-25 date-updated: 2026-07-06 tags: - delay - looper - cv - glitch summary: | Goldfish is a multi-mode stereo delay/looper with synchronized pulse/CV outputs. The switch selects record, delay, and play behaviors. Audio is streamed to flash (IMA-ADPCM), so loops/delays run from ~55s on a 2MB card up to ~9min on 16MB. Pulse inputs provide clock/reset (and gated recording); the CV/audio inputs modulate delay time, playback position and speed, and the generated CV/pitch material. panel: inputs: - id: AudioIn1 name: Left Audio Input description: Left channel audio input for record/delay/play (true stereo) - id: AudioIn2 name: Right Audio Input description: Right channel audio input for record/delay/play (true stereo) - id: CVIn1 name: X Mod description: Modulates X-dependent CV mix and playback position - id: CVIn2 name: Y Mod description: Modulates Y-dependent CV mix and playback position - id: PulseIn1 name: Sample Trig / clock description: Advances divider, triggers S&H - id: PulseIn2 name: Reset / Rec Gate description: In play, a rising edge resets/cuts to the start position; when patched in delay, gates recording (punch in on the rising edge, hand off to play on the falling edge) outputs: - id: AudioOut1 name: Left Audio Output description: Left channel processed audio output - id: AudioOut2 name: Right Audio Output description: Right channel processed audio output (independent stereo channel) - id: CVOut1 name: CV Mix Output description: In delay/record, the live CV mix (from X/Y and the CV inputs); in play, the recorded CV track - id: CVOut2 name: Quantized CV Output description: The CV output quantized to a major scale, sampled/held and latched on each clock pulse - id: PulseOut1 name: Internal Clock Output description: Timed pulse output tied to clock/divider events - id: PulseOut2 name: Clock Divider Output description: Secondary timed pulse output tied to divider events controls: switch: up: name: Delay description: Enter delay behavior middle: name: Play description: Enter loop playback behavior down: name: Record description: Enter record behavior (clears the loop and records fresh) knobs: - when: { z: any } main: name: Time / Speed description: Delay time in delay; playback speed and direction (full reverse - stop at noon - full forward) in play; also crossfades the CV mix x: name: Int Clock Rate description: Sets the internal clock rate; also attenuverts CV mix input 1 and maps playback position y: name: Clock Div description: Sets the clock divider amount; also attenuverts CV mix input 2 and maps playback position