A granular synthesizer/sampler/looper/delay external for Pure Data with real-time recording, splice-based sample organization, multi-mode filtering, distortion, and chaotic parameter modulation.
You can try out the still-in-development UI here: https://sbenjam1n.github.io/ligase/
- Asynchronous granular synthesis with configurable grain pool (1-2000 grains)
- Splice-based organization — divide a 10-minute stereo buffer into up to 64 segments for non-linear playback
- Real-time recording with sound-on-sound mixing and three record modes
- Three playhead modes — static, scanning, and clock-advance
- Multiple delay types — DD-4 analog delay, pitch-preserving grain delay, and rhythmic stutter delay
- Multi-mode distortion — 5 waveshaper modes (tanh, arctan, asymmetric, blend, polynomial) with pre/post emphasis filters
- Moog ladder filter — classic 4-pole 24dB/octave lowpass with resonance
- Chaotic parameter modulation — random, Perlin noise (1D/2D), Lorenz attractor, and N-body gravitational simulation
- Pitch modes — semitone, range, scale, and MIDI pitch control
- Timing quantization — independent grids for IOT, grain size, and delay time with BPM and note division support
- Allpass smear — cascade of tunable allpass sections (spectral smear / dispersion); with feedback, a pitched bell-like resonator
grains → delay → [RECORDING] → smear → distortion → Moog → dac~
- Pure Data (Pd)
- C compiler (GCC, Clang, or MSVC)
- Sample rate: 48kHz
The simplest way is the included Makefile, which detects your OS and links the
correct sources from src/:
make # builds ligase~.pd_linux (Linux) or ligase~.pd_darwin (macOS)
make install # copies the external (+ help patch) to ~/Documents/Pd/externalsOn Linux the Makefile expects Pd headers at /usr/local/include/pd; on macOS at
/Applications/Pd-0.53-2.app/Contents/Resources/src. Adjust PD_INCLUDE in the
Makefile if yours differ.
To build by hand instead, compile every source in src/. The Pd API header
m_pd.h is vendored there, so -Isrc is all the include path you need:
Linux:
gcc -fPIC -shared -o ligase~.pd_linux src/*.c -Isrc -lmmacOS:
cc -bundle -undefined dynamic_lookup -o ligase~.pd_darwin src/*.c -Isrc -lmWindows (MinGW):
gcc -shared -o ligase~.dll src/*.c -Isrc -L<pd-path>/bin -lpdCopy the compiled external (ligase~.pd_linux, ligase~.pd_darwin, or ligase~.dll) to your Pure Data externals directory, then create a [ligase~] object in your patch.
Optionally create a ligase.conf file in the same directory as the external:
max_grains = 200
This sets the maximum grain pool size (range 1-2000, default 200).
See ligase_manual.pdf for full documentation covering all inlets, outlets, messages, parameters, and default values.
GNU General Public License v2 Copyright (C) 2025 Steven Benjamin