| project name: | spre |
| project url: | https://github.com/puyoma/spre |
| author: | Puyoma |
| description: | generative synthesizer with evolving melodies, polyphonic voicings, strum, MIDI, grid, and loopers |
| documentation url: | https://github.com/puyoma/spre/blob/main/README.md |
| tags: | synth generative engine midi grid looper softcut |
A generative synthesizer for monome norns.
spre combines a 12-voice SuperCollider synthesis engine with five melody generators, eight polyphonic voicings, adjustable chord strum, scale quantization, MIDI and grid performance modes, and two kinds of looping. It can play by itself, respond to an external MIDI keyboard, or become a scale-aware instrument on a 16×8 grid.
The sound moves between clean, resonant tones and saturated, dusty, tape-worn textures. Melody and harmony can be reshaped while the instrument is running.
spre includes its own SuperCollider engine. After the first installation, shut norns down completely and turn it back on; a software restart may not be sufficient.
Project structure:
spre/
├── spre.lua
├── README.md
├── README_ja.md
└── lib/
└── Engine_Spre.sc
In the Maiden REPL:
;install https://github.com/puyoma/spre
After installation, shut norns down completely, turn it back on, then launch spre from SELECT. If only a software restart is performed, norns may report AUDIO SYSTEM FAIL until the next full power cycle.
spre starts in AUTO mode and begins generating notes automatically.
Start with the norns output/headphone level low. Saturation, resonance, chords, and high FLOCK and RAIN settings can create sudden level changes.
These controls work from the main parameter page unless noted otherwise.
| Control | Action |
|---|---|
| E1 | When FILTER is selected: choose AIR / GLASS / AMBER / WOOD |
| E2 | Select parameter |
| E3 | Change selected parameter |
| K2 | Jump to the next parameter row |
| K3 | Toggle between parameter and MEL / POLY / STRUM pages |
| K1 + E1 | Cycle parameter, MEL / POLY / STRUM, and visualizer pages |
| K1 + K2 | Octave down |
| K1 + K3 | Octave up |
| K2 + K3 | Clear the selected audio loop, or note-loop slot 1 |
When LOOP is selected, K2 operates the loop instead of jumping to the next row.
On the MEL / POLY / STRUM page:
| Control | Action |
|---|---|
| E2 or K2 | Select MEL, POLY, or STRUM |
| E3 | Choose the melody algorithm or voicing, or adjust strum amount |
| K3 | Return to the parameter page |
The visualizer page shows an animated rainy alley and has no dedicated editing controls. Use K1 + E1 to leave it.
The internal generator creates notes from the selected ROOT and SCALE.
Incoming MIDI notes are quantized to ROOT and SCALE, then played with an ADSR envelope. ATTACK, DECAY, SUSTAIN, and RELEASE become available on the parameter page. A connected grid can also be played as a scale keyboard without leaving MIDI mode.
A connected 16×8 grid becomes a scale-based keyboard. Notes sound while held and use the same ADSR envelope as MIDI mode.
| Name | Behaviour |
|---|---|
| RAND | Uniform random notes, with occasional octave jumps |
| GAUSS | Random movement weighted toward the middle of the range |
| MRKV | Markov-like movement that tends to stay near the previous note |
| ORBIT | Movement attracted to chord tones, with approaches and occasional jumps |
| FOLD | A four-note motif that gradually climbs and descends |
Intervals follow degrees of the selected scale.
| Name | Voicing |
|---|---|
| MONO | Single note |
| OCT | Note plus octave |
| 5TH | Note plus four scale degrees |
| TRIAD | Note plus two and four scale degrees |
| 7TH | TRIAD plus six scale degrees |
| RAND | One or two random upper scale tones |
| ADD4 | Note plus two and three scale degrees |
| JAZZ | Note plus two and six scale degrees |
STRUM controls the timing between notes in AUTO-mode chords. At zero, every note starts together. Higher values spread the note-ons with slight random variation, up to approximately 130 ms, for a strummed or humanized feel. It does not change single-note MONO voicing.
| Parameter | Description |
|---|---|
| ATK | Attack |
| DEC | Decay |
| FM | Pitch modulation depth |
| BRIT | Tonal brightness |
| SAT | Saturation and drive |
| TAPE | Sample-rate reduction and tape noise |
| FILTER | E3 controls cutoff/resonance: left is darker and more resonant; right is brighter and more open. E1 selects AIR, GLASS, AMBER, or WOOD |
| DUST | High-frequency noise |
| SPREAD | Randomized stereo placement |
| INTONE | Tuning color: center is equal temperament; turning away introduces interval-dependent offsets |
| SUSTAIN | ADSR sustain in MIDI / GRID |
| RELEASE | ADSR release in MIDI / GRID |
Turn E1 while FILTER is selected, or use FILTER TYPE in PARAMS, to choose a model. A change applies to notes triggered afterward; notes already sounding keep their original filter.
| Type | Character |
|---|---|
| AIR | Bright, open 12 dB low-pass with pronounced resonance |
| GLASS | Smooth, clean 24 dB low-pass with restrained resonance |
| AMBER | Thick, warm ladder filter with a little grit |
| WOOD | Vactrol-style low-pass gate with an organic decay |
spre has two loop systems.
The note looper records AUTO-generated notes and notes played from the grid in MIDI or GRID mode. External MIDI input is not currently captured. Timing is recorded as performed and is not beat-quantized.
Two softcut audio slots are available. Each slot can record up to approximately 30 seconds.
The audio looper receives spre's engine output as well as the norns audio inputs.
Ending a new audio recording sets FLOCK to zero so the recorded loop can be heard clearly.
| Grid area | Function |
|---|---|
| Row 1, columns 1–12 | Root pitch class |
| Row 1, columns 15–16 | Octave down / up |
| Row 2, columns 1–16 | Scale selection |
| Row 3, columns 1–8 / 9–15 | FLOCK / BRIT |
| Row 4, columns 1–8 / 9–15 | RAIN / SAT |
| Row 5, columns 1–8 / 9–15 | ATK / TAPE |
| Row 6, columns 1–8 / 9–15 | DEC / DUST |
| Row 7, columns 1–8 / 9–15 | FM / SPREAD |
| Row 8, columns 1–8 / 9–15 | FILTER / INTONE |
| Column 16, rows 3–8 | Loop slots 1–6; audio looper uses slots 1–2 |
| Grid area | Function |
|---|---|
| Row 1, columns 1–12 | Root pitch class |
| Row 1, columns 15–16 | Octave down / up |
| Row 2, columns 1–16 | Scale selection |
| Rows 3–8, columns 1–15 | Scale-note keyboard |
| Column 16, rows 3–8 | Loop slots |
The grid directly plays notes in both MIDI and GRID modes.
Minor pentatonic, major pentatonic, major, minor, Dorian, Lydian, Mixolydian, Phrygian, Locrian, Phrygian dominant, blues, whole tone, diminished, Hungarian minor, In Sen, Hirajoshi, Arabic, bebop major, enigmatic, and chromatic.
The norns interface and MIDI CC 20 can access all 20 scales. The 16×8 grid’s second row directly selects the first 16.
| CC | Function |
|---|---|
| 1–12 | FLOCK, RAIN, ATK, DEC, FM, FILTER, BRIT, SAT, TAPE, DUST, SPREAD, INTONE |
| 13 / 14 | Octave down / up when value is above 63 |
| 15 / 16 | SUSTAIN / RELEASE |
| 17 | Filter type |
| 18 | AUTO / MIDI / GRID mode |
| 19 | Root, MIDI notes 48–72 |
| 20 | Scale |
| 21 | Octave shift, −3 to +3 |
| 22 | Melody generator |
| 23 | Note / audio looper selection |
| 24–29 | Loop slots 1–6 when value is above 63 |
| 30 / 31 | Selected audio-loop speed / level |
| 32 | softcut pre-level |
| 33 | Selected audio-loop direction: reverse / forward |
MIDI notes generated by spre are also sent to MIDI port 1 on channel 1.
spre is free to use. If you enjoy it and would like to support future development, you can buy me a coffee. Thank you — every cup helps keep the melodies growing.
Puyoma
MIT License. See LICENSE.
Version 1.0. Feedback, bug reports, and recordings are welcome.