| project name: | ashsynth |
| project url: | https://github.com/nunosmash/ashsynth |
| author: | Ash |
| description: | Norns monophonic synthesizer: dual oscillators, FM, split envelopes, clock-synced delay & reverb |
| documentation url: | https://github.com/nunosmash/ashsynth/blob/main/README.md |
| tags: | synth engine midi grid |

Demos: Demo 1 · Demo 2 (Shorts)
AshSynth is a monophonic synthesizer script for norns. It starts from a familiar dual-oscillator → LP filter → dual-ADSR layout, then adds norns-friendly UI and a few sound-design choices of its own. The screen stays live; parameters show as bar graphs so you can read the patch at a glance.
AshSynth is designed to be a genuine standalone synth, capable of serving as a complete instrument in its own right.
K1 + K3 randomizes for quick patch discovery; K1 + K2 restores factory defaults after experiments.
| Area | Details |
|---|---|
| OSC | Sine / Saw / Pulse, ±2 oct, 0.1 semitone pitch, per-osc detune (0–50 ct) |
| Phase lock | When settings match and detune returns to 0, OSC2 locks phase to OSC1 — less “stuck” beating after detune |
| MIX | Noise, FM, glide (All / Legato) |
| Filter | LP + resonance, key tracking, dedicated filter ADSR |
| Envelopes | Separate FENV / AENV pages; LINK syncs ADSR knobs; LINK on → amp follows filter env |
| LFO1 / LFO2 | 5 shapes + Random, master depth, 16 destinations each; rate LED on LFO pages; E2 scrolls destinations |
| LFO destinations | Amp, Pitch, Filter, FEnv A / D / S / R, PW, Detune 1 & 2, Noise, FM, Glide, Drive, Delay mix, Reverb mix |
| FX | Delay (free or clock, 19 divisions), reverb (room / damp) |
| Performance | MIDI (bend, velocity), 5×8 grid keyboard, TouchOSC via toga |
| Navigation | 10 pages; hold K2 / K3 to scroll pages quickly; K1 combos for INIT / RAND |
| Presets | ashsynth-NN.pset; MIDI Program Change recall |
What sets AshSynth apart: a page-based norns workflow over the whole synth, a touch of passersby-style FM without leaving the mono voice, and two LFOs aimed at moving patches rather than static tones.
OSC1 + OSC2 (+ FM layer) + noise
→ LP filter (filter env, key track, LFO1 + LFO2)
→ amp (amp env or linked filter env, drive, velocity, LFO)
→ delay → reverb → out
LFO1 and LFO2 run on separate control buses and feed the voice, glide, FM, drive, delay, and reverb in parallel.
| E1 | Page |
| E2 | Parameter (LFO1 / LFO2 pages: scroll destinations) |
| E3 | Adjust value (pitch steps: 0.1 semitone) |
| K2 | Previous page (hold to scroll quickly) |
| K3 | Next page (hold to scroll quickly) |
| K1 + K2 | Factory defaults (on-screen: INIT) |
| K1 + K3 | Random patch (on-screen: RAND; OSC pitch picks from −12 / 0 / 7 / 12 st) |
OSC1 · OSC2 · MIX · FILTER · FENV · AENV · LFO1 · LFO2 · DELAY · REVERB
On LFO1 and LFO2 pages, ^ / v on the right means more destinations below — use E2 to scroll. Destinations: Amp, Pitch, Filter, FEnv A / D / S / R, PW, Detune 1 & 2, Noise, FM, Glide, Drive, Delay, Reverb.
dust/code/ashsynth/
ashsynth.lua
lib/ash_engine.lua
lib/Engine_Ash.sc
Run ashsynth from norns SELECT. The same control summary lives in the comment block at the top of ashsynth.lua.
For a TouchOSC grid, install code/toga and keep the togagrid include line in ashsynth.lua active (code/toga or a toga/ folder where your norns setup expects it).
dust/data/ashsynth/ashsynth-NN.psetWhile the script is running, the display redraws at 15 fps and calls screen.ping() so norns does not put the OLED to sleep. Parameter bars, envelopes, LFO rate LED, and a note LED stay visible without waiting for encoder input.
UI ashsynth.lua v1.3.8 · Engine Engine_Ash.sc v1.1.4 — built for norns with the SuperCollider Crone engine.