| project name: | awake-ashsynth |
| project url: | https://github.com/nunosmash/awake-ashsynth |
| author: | Ash |
| description: | Awake dual sequencer with AshSynth — TIE legato, glide, grid |
| discussion url: | https://llllllll.co/t/awake/21022 |
| documentation url: | https://github.com/nunosmash/awake-ashsynth/blob/main/README.md |
| tags: | sequencer grid synth midi |

A norns script that pairs the Awake sequencer with the AshSynth engine.
It follows the same sequencing structure as awake-passersby, but uses the Ash engine instead of Passersby.
Awake uses two overlapping sequencers:
| Layer | Role |
|---|---|
| Top (one) | Melody. Sound only triggers when this layer has a note |
| Bottom (two) | Pitch offset. Added to the top layer to set the final pitch |
final pitch = scale[ one[step] + two[step] ]
A bottom value of 0 is not a rest — it means offset 0. If the top layer has a note, sound still plays even when the bottom is 0.
ashsynth/lib/Engine_Ash.sc)Engine_Ash.sc inside awake-ashsynth will cause duplicate engine errorslib/ash_engine.lua and lib/beatclock-crow.lua are included in this scriptnorns/dust/code/awake-ashsynth/ ← this script
norns/dust/code/ashsynth/ ← Ash engine (required)
engine.name = "Ash" — same as ashsynthlib/ash_engine.lua — same Ash parameter set as ashsynthnoteOff → noteOn each step to retrigger ADSR (sequencer behavior)E1 cycles modes: STEP → LOOP → SOUND → OPTION
| Input | Action |
|---|---|
| E2 | Move edit position |
| E3 | Change note value (current channel: one / two) |
| K2 | Switch one ↔ two channel |
| K2 + K1 hold | Clear entire pattern (including TIE) |
| K3 | Morph (current channel) |
| K3 + K1 hold | Random (resets TIE) |
| K1 hold + E2 | Probability |
| Input | Action |
|---|---|
| E2 | Top loop length |
| E3 | Bottom loop length |
| K2 | Reset playhead |
| K2 + K1 hold | Reset clock |
| K3 | Random jump |
| Input | Action |
|---|---|
| K2 / K3 | Select parameter pair |
| E2 / E3 | Adjust selected Ash parameters |
Shortcuts: cutoff, reso, drive, reverb, delay, fdbk
| Input | Action |
|---|---|
| E2 | BPM |
| E3 | Root note |
| K1 hold + E2 | Step length |
| K1 hold + E3 | Scale |
one patterntwo patternOn an 8-row grid, use K2 to switch between one / two.
Awake retriggers every step (noteOff → noteOn), so every note is the same length and legato glide does not work on its own.
TIE connects one step into the next: the gate stays open, the envelope is not retriggered, and glide can slide pitch across steps.
Default Glide Mode is Legato — glide applies on TIE-connected steps. Raise the glide amount in params or SOUND mode.
Works on top or bottom layer. On a 16-row grid, use the upper half for top TIE and the lower half for bottom TIE.
A TIE on step N means: when the sequencer reaches step N+1, do not cut the note first.
| Layer | Effect |
|---|---|
| Top TIE | Melody degree carries into the next step |
| Bottom TIE | Pitch offset carries into the next step (works even if bottom goes to 0) |
Either layer can trigger legato. Sound still only plays when the top layer has a note.
| Display | Normal note | TIE step |
|---|---|---|
| Grid | Bright cell at note position | Entire column dim; note cell off |
| norns screen | Horizontal note bar | Dim vertical line; note bar dark |
| Playback | — | Current step highlighted on top of TIE display |
| Glide Mode | Behavior |
|---|---|
| All | Glide on every step |
| Legato (default) | Glide only on TIE-connected steps |
Without TIE, each step is a fresh attack. With TIE + Legato + glide, pitch slides into the next step.
Bottom layer glide (common case — top holds, bottom moves):
Top (one): 3 3 3 3
Bottom (two): 2 5 7 0
TIE: ● (TIE on step 2 → legs into step 3)
→ pitch glides from scale[3+5] to scale[3+7]
Top layer glide:
Top (one): 2 5 7 4
TIE: ● ●
Bottom (two): 0 0 0 0
→ melody glides across tied top steps
TIE state is saved with norns params / presets on your device.
params output: audio / midi / audio + midi / crow, etc.
MIDI Program Change (PC 0–15) can recall saved presets on your norns (dust/data/awake-ashsynth/).
| awake-passersby | awake-ashsynth | |
|---|---|---|
| Engine | Passersby | Ash (ashsynth) |
| Delay | halfsecond softcut | Engine delay only |
| SOUND shortcuts | filter, resonance, lfo rate, lfo depth, delay, delay fb | cutoff, reso, drive, reverb, delay, fdbk |
| TIE / legato | No | Yes |
| Sequencer / UI / grid | Same | Same |
awake-ashsynth/
├── awake-ashsynth.lua # main script
└── lib/
├── ash_engine.lua # Ash params & engine bridge
└── beatclock-crow.lua # clock
ashsynth/
├── ashsynth.lua # main script
└── lib/
├── ash_engine.lua # Ash params & engine bridge
└── Engine_Ash.sc # engine
Presets are saved locally on norns under dust/data/awake-ashsynth/ (not included in this repo).
This project is licensed under the GNU General Public License v3.0 (GPL-3.0).
See LICENSE for the full text.
| Component | License | Notes |
|---|---|---|
| awake | GPL-3.0 (norns ecosystem) | Sequencer structure & UI |
| awake-passersby | GPL-3.0 | Direct basis for this script |
| passersby | GPL-3.0 | awake-passersby engine reference |
| ashsynth | Apache 2.0 | lib/ash_engine.lua; requires Engine_Ash.sc from ashsynth |
lib/ash_engine.lua is derived from ashsynth (Apache 2.0) and is included in this GPL-3.0 distribution per Apache–GPL compatibility.