Files
galdr/README.md
T
Bendik Aagaard LynghaugandClaude Opus 4.8 d2778e169a
Release / build (x86_64, ubuntu-latest, /sccache, x86_64-unknown-linux-gnu) (push) Successful in 2m3s
Release / build (aarch64, aarch64, /var/lib/gitea-runner/sccache, aarch64-unknown-linux-gnu) (push) Successful in 2m46s
Release / update-aur (push) Successful in 23s
galdr 0.1.0: terminal grid synthesizer (MIDI in, PipeWire out)
Signal flows downward through single-glyph unit generators; each MIDI note
voices the whole grid; the mix renders low-latency to PipeWire (reusing the
native path from spectrust). Grid edits recompile and hot-swap without
dropping audio. Pairs with orca (note/CC source) and spectrust (visualizer).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GLUwWE2KmFPzhKaf67tWbx
2026-09-13 13:24:18 +02:00

1.8 KiB
Raw Permalink Blame History

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. The left and right neighbour glyphs are parameters — a digit 0–9 is a constant, a letter a–z reads MIDI CC (a = CC 0).

glyph unit generator
~ sine (ratio ← left)
^ saw (ratio ← left)
_ pulse (width ← left)
v triangle
* noise
f lowpass (cutoff ← left)
e envelope, attack/release ← left/right, gated by the note
s shaper / drive ← 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:

^        saw at the note pitch
f        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.

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.