- Operators are now UPPERCASE (orca-style): O A U V N sources, L H B SVF filters (with resonance), E G R envelope/gain/ringmod, S C F D shapers (soft/clip/fold/decimate), M mix, ! out. Digits = constants, lowercase = CC. - TUI rewritten on crossterm reusing orca-rs's grid-view approach (centered canvas, per-glyph colour); the spectrum is gone - run spectrust on the side. - Drops the ratatui and rustfft deps. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GLUwWE2KmFPzhKaf67tWbx
galdr
A terminal grid synthesizer. Signal flows downward through a field of single-glyph unit generators; every incoming MIDI note voices the whole grid; the mix is rendered low-latency to PipeWire. It is orca's voice — the same esoteric, spatial approach to programming, but for making sound instead of sending events.
orca-rs ──MIDI/OSC/UDP──▶ galdr ──PipeWire──▶ speakers
compose the pattern voice it (spectrust -p visualizes it)
The grid
Signal flows down: each cell takes the sample from the cell above as its
input. Glyphs are UPPERCASE operators. A digit 0–9 to the left/right is
a constant parameter; a lowercase letter a–z reads MIDI CC (a = CC 0).
| glyph | unit generator | left / right param |
|---|---|---|
O |
sine | ratio |
A |
saw | ratio |
U |
pulse | width |
V |
triangle | — |
N |
noise | — |
L H B |
low / high / band-pass (SVF) | cutoff / resonance |
E |
envelope (gated by the note) | attack / release |
S |
soft clip (tanh) | drive |
C |
hard clip | threshold |
F |
wavefolder | amount |
D |
decimate / bitcrush | rate |
G |
gain | amount |
R |
ring modulator | ratio |
M |
mix — adds the cell to its left | — |
! |
output to master | — |
Each ! sums into the master, so parallel columns stack timbres or voices.
A note plays every column at once.
Example — a filtered saw with an envelope:
A saw at the note pitch
L lowpass, cutoff from the digit to its left...
E ...enveloped by the note gate
! ...to master
Editing the grid recompiles and hot-swaps the running program without dropping
audio. There is no embedded scope — run a spectrum analyzer (e.g. spectrust)
on the side if you want one.
Usage
galdr [--latency <frames>] [--poly <n>] [--rate <hz>] [--midi-name <s>]
galdr creates a virtual MIDI input port named galdr; connect orca or any
sequencer/DAW to it. --midi-name connects to an existing port instead.
Cursor keys move; type a glyph to place it; Backspace clears; Esc quits.
Runtime deps: PipeWire and ALSA (MIDI). Built in Rust; reuses the native PipeWire path from spectrust.