text-based modular synth
  • Rust 98.5%
  • Makefile 1.5%
Find a file
2025-08-04 20:24:22 -07:00
.github/workflows actions 2025-07-12 15:47:28 -07:00
docs vc slew with gates 2025-07-21 21:21:32 -07:00
examples usermodules make sound 2025-08-04 18:13:06 -07:00
isolated_test search path 2025-08-04 20:22:15 -07:00
src search path 2025-08-04 20:22:15 -07:00
test_search/subdir search path 2025-08-04 20:22:15 -07:00
usermodules usermodules make sound 2025-08-04 18:13:06 -07:00
.gitignore seq8 works 2025-07-17 20:43:47 -07:00
Cargo.toml no test 2025-07-17 23:37:16 -07:00
CLAUDE.md repl 2025-07-13 21:45:49 -07:00
clippy.toml actions 2025-07-12 15:47:28 -07:00
debug_expansion.zim usermodules make sound 2025-08-04 18:13:06 -07:00
DESIGN_NOTES.md modules-spike 2025-07-21 22:29:57 -07:00
LICENSE lic 2025-07-14 21:35:29 -07:00
Makefile working sh 2025-07-22 19:28:50 -07:00
README.md init 2025-07-12 08:47:45 -07:00
rustfmt.toml actions 2025-07-12 15:47:28 -07:00

🎚️ Zim-DSP

A text-based modular synthesizer environment built on Rust's open audio ecosystem. Like patching hardware modules, but with the power of text and code.

🎯 Vision

Bring the modular synthesis paradigm to text:

  • First-class modules: VCO, VCF, VCA, LFO, ENV, etc.
  • Patch with simple syntax: vco -> vcf -> vca -> out
  • Discover emergent behaviors through experimentation
  • True open source - MIT licensed all the way down

🏗️ Architecture Ideas

Core Concepts

# A simple patch
vco: saw 440
lfo: sine 0.5
vcf: moog 1000 0.7
  <- vco
  <- lfo * 800 + 1000  # modulate cutoff

out <- vcf * 0.5

Design Principles

  1. Modular-first - Everything is a patchable module
  2. Text-native - Designed for text files, not GUI
  3. Live-codeable - Change patches while running
  4. Surprising - Enable happy accidents and feedback patches
  5. Unencumbered - Built on truly open source foundations

🛠️ Technical Foundation

Built on MIT/Apache licensed crates:

  • fundsp - Core DSP graph engine
  • cpal - Cross-platform audio I/O
  • ratatui - (Optional) TUI visualization
  • Neovim integration - Like zim-sequencer

📝 Module Ideas

Essential Modules

  • osc~ - Multi-waveform oscillator (sine, saw, square, tri)
  • filter~ - Various types (moog, ms20, svf)
  • env~ - ADSR envelope generator
  • lfo - Low frequency oscillator
  • vca - Voltage controlled amplifier
  • noise~ - White, pink, brown
  • mix~ - Multi-input mixer
  • seq - Step sequencer
  • clock - Master clock/divider

Creative Modules

  • compare~ - Comparator for generative patches
  • sample~ - Sample and hold
  • delay~ - Digital delay line
  • reverb~ - Algorithmic reverb
  • granular~ - Granular synthesis
  • fold~ - Wavefolding distortion

🎮 Usage Examples

Basic Subtractive Patch

vco1: saw 110
vco2: saw 110.5  # slight detune
mix: vco1 + vco2

lfo: tri 0.2
vcf: moog 800 0.8
  <- mix
  <- lfo * 600 + 800

env: adsr 10 100 0.7 500
vca: vcf * env

out <- vca * 0.5

Generative Chaos Patch

noise: white
sh: sample_hold
  <- noise
  <- clock 8

vco: square
  <- sh * 200 + 200  # random pitches

compare: noise > 0.3
gate: vco * compare  # gated by noise

out <- gate -> delay 250 0.6

🚀 Development Phases

Phase 1: Core Engine

  • Basic module trait system
  • Audio graph processing
  • Text parser for patch notation
  • Essential modules (osc, filter, env)

Phase 2: Live Environment

  • Hot-reload patches
  • Neovim plugin
  • Parameter automation
  • MIDI input

Phase 3: Extended Modules

  • Effects (delay, reverb, distortion)
  • Sequencing modules
  • CV utilities (attenuverters, logic, etc)
  • Sample playback

Phase 4: Integration

  • Zim-sequencer interop
  • OSC support
  • Plugin API for custom modules

🤝 Philosophy

This project embraces:

  • True open source collaboration
  • Modular synthesis as a creative practice
  • Text as a powerful interface for music
  • Emergent complexity from simple components

📄 License

MIT - Because audio tools should be truly free


For musicians who think in signal flow and love surprises