TouchVink, image 1 from its README
Firmware

TouchVink

Hype22/100

Jaap Vink style feedback instrument for the Synthux Simple Touch (Daisy Seed)

TouchVink is custom firmware for the Synthux Academy Simple Touch, by @jonwaterschoot. Open source under MIT, latest release v0.2.0 (September 2026).

forSynthux Academy Simple Touch·by@jonwaterschoot

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

Downloads
0
Stars
0
Forks
0
Commits
11
Last commit
Download v0.2.0

touchvink-v0.2.0.bin· 125 KB

MIT· jonwaterschoot/TouchVink·jonwaterschoot.github.io/TouchVink/·downloads come from the creator’s GitHub releases

11
Commits
1
Releases
11 commits and 1 release in the last year
Activity · last 12 months

TouchVink

A feedback instrument for the Synthux Simple Touch, after the self-regulating tape/ring-mod/reverb patches of Jaap Vink (Institute of Sonology). One knob, one function.

A delayed copy of the output is ring-modulated, reverberated and passed through a VCA that is turned down by the loop's own loudness. That compressor lets the loop run above unity gain without blowing up, so it keeps moving by itself. Pads excite the loop, set the oscillator pitch, pick a distortion, or let the loop "steer" its own oscillator.

Status: v0.2 — compiles for the Daisy Seed, DSP tested on desktop, not yet tested on hardware. See docs/PLAN.md.

Interactive manual: jonwaterschoot.github.io/TouchVink — the panel drawn live in the browser, with the screen and a manual entry for every control. It plays on its own, or mirrors and plays the device over USB MIDI (Chrome/Edge). Source in webmanual/.

Firmware: download the .bin from Releases and flash it at flash.daisy.audio (Seed in DFU mode: hold BOOT, tap RESET), or build it yourself below.

Signal flow

flowchart LR
    EXT["EXT IN (stereo)<br/>S31 level"] --> MIX
    OSC["OSC<br/>SW1 lfo/steady/drunk"] --> BAL["S30 osc ↔ noise"]
    NOISE["NOISE<br/>SW2 pink/drift/brown"] --> BAL
    BAL --> AD["AD env<br/>P10 att / P11 dec"] --> MIX["S36 source mix"]
    BAL -. carrier .-> RING
    EXT -. carrier .-> RING
    MIX -- excitation --> RING
    DEL["REC loop delay<br/>S35"] --> RING["AC-MUP ring / add<br/>S32"]
    RING --> REV["REV<br/>S33"] --> VCA["V-AMM VCA"]
    VCA --> DIST["DIST<br/>pads, pressure"] --> OUT["OUT<br/>S37"]
    DIST --> ENV["AMD env follower"] -- inverted --> VCA
    DIST -- "× S34 loop gain" --> DEL
    ENV -- "swell (P1 steer)" --> SAH["T-SAH"] --> OSC

Controls

TouchVink: what each control does

The labels come from simple-touch-labels.json, made with Simple Touch labels; the library shows them in this look and can play TouchVink in the browser.

S30Internal source: osc ↔ noise
S31External input level (0 → +12 dB)
S32Ring modulation: loop straight ↔ loop × carrier
S33Reverb
S34VCA / loop gain — above ~60 % the loop sustains itself
S35Loop delay, 2 ms (pitched comb) → 1.9 s (tape echo)
S36 faderSource: internal (bottom) ↔ external (top)
S37 faderOutput level
SW1Osc motion: LFO sweep / steady / drunk walk (pitch and sine↔saw shape)
SW2Noise: pink / pink↔brown drift / brown
P0Pads → OSC mode (LED 1 blink)
P2Pads → DIST mode (LED 2 blinks)
P1Steering (loop swells re-pick the osc pitch): tap = on/off, hold = momentary. Not a note latch.
P3–P9OSC mode: pick pitch (0.8, 5, 27.5, 55, 110, 220, 440 Hz) + excite; pressure bends up to +1 oct
DIST mode: clean, soft, hard, fold, half-rect, full-rect (octave), crush; pressure = drive
P10Attack step: 2 ms / 60 ms / 600 ms
P11Decay step, tap: 120 ms → 2 s → drone. Hold 0.5 s: back to 120 ms. Drone holds the excitation and freezes pad pressure at its peak
P10 + P11 1 sRecalibrate pads

Screen, MIDI, web manual

OLED (optional). A 128×32 SSD1306 on I2C at D11/D12 (the pads' bus, address 0x3C), as on TouchPlaited. It plays the TouchVink boot animation, names whatever you touch with its value in real units (dB, ms, Hz, loop gain), draws a bar for the P10+P11 and long-P11 holds, shows a pickup track when MIDI holds a knob, and otherwise shows the pad mode, A/D steps and the pitch or distortion in play. Without a screen fitted nothing changes.

USB MIDI, both ways:

InOut
ch 1 notesOsc pitch (the note is the pitch) + excite
ch 10 notes 36–47Pads P0–P11, as if touched; poly aftertouch = pressurePad touches, with poly aftertouch
CC 20–27S30–S37; the pot takes over again once turned through the valuePot moves
CC 28–34SW1, SW2, pad mode, attack, decay, steer, distortionChanges made on the panel

The device also streams its state as SysEx, which the web manual reads. Full map: webmanual/README.md.

Build

To flash a release, you don't need any of this: see Firmware at the top.

git clone --recurse-submodules <this repo>
make libs      # once
make           # build/TouchVink.bin
make program-dfu

make NO_USB_MIDI=1 gives the USB port to serial logging instead. TRS MIDI (D13/D14, modded boards) is opt-in with make TRS_MIDI=1; see midi/midi_io.h for why.

For a release, make release VERSION=0.3.0 writes build/touchvink-v0.3.0.bin. Upload that file, so release assets keep a lowercase, versioned name.

Uses the Synthux fork of libDaisy and DaisySP (with DaisySP-LGPL for the reverb), as submodules.

Listen without hardware

make -C host && ./host/render    # run from the repo root, writes host/out/*.wav

Layout

TouchVink.cpp        main: audio callback, pad/knob/switch logic, LED
common/config.h      every tunable number
dsp/engine.*         the Vink loop (portable, no libDaisy)
dsp/blocks.h         small DSP blocks: noise colours, env follower, AD, delay, distortion
hw/simple_touch.*    knobs, switches, MPR121 pads with pressure + velocity (+ MIDI touches)
midi/                USB (and optional TRS) MIDI I/O, SysEx telemetry for the web manual
display/             OLED: screen driver, UI, boot animation
webmanual/           interactive web manual (Vite + TypeScript), deployed to GitHub Pages
host/                desktop renderer for listening tests
docs/SKETCHES.md     notebook sketches translated, with every interpretation marked
docs/PLAN.md         bring-up checklist, tuning, filter options, roadmap

To-Do / Roadmap

In no particular order

  • midi controls
  • oled screen info
  • interactive webmanual

Credits

  • Jaap Vink — the original patch and technique
  • AudreyTouch (Nick Donaldson / Infrasonic, Synthux Academy) — Simple Touch feedback-synth structure
  • TouchString (vincentltm) — MPR121 pressure-sensing approach
  • TouchPlaited — MIDI I/O, SysEx telemetry, OLED driver and boot screen, and the visualizer the web manual is built from
  • libDaisy (Synthux fork), DaisySP

Licence

The TouchVink code is released under the MIT License.

It builds on:

  • libDaisy (Synthux fork) and DaisySP: MIT License.
  • DaisySP-LGPL for the reverb (ReverbSc, USE_DAISYSP_LGPL = 1 in the Makefile): LGPL-2.1. The firmware (.bin) and the browser build (.wasm) contain it, so for that part those builds fall under the LGPL. Its source comes with the DaisySP submodule, and this repository has everything needed to rebuild them with a changed version of it (see Build).

Not covered by the MIT License:

  • The Simple Touch panel drawing, © Roey Tsemah / Synthux Academy: img/simpletouchdrawing_blank.svg, webmanual/assets/panel.svg (made from it) and the images that show it (docs/touchvink-controls.png, img/screenshotcontrols_TouchVink.png).
  • The faceplate, img/faceplate.jpg: a heavily pixelated photo of Jaap Vink, found at France Musique and in many other places; the photographer is unknown. It is credited here as a tribute and will be removed on request.