Skip to main content
ELSE (EL Locus Solus) is a massive library of over 570 Pure Data objects created and maintained by Alexandre Torres Porres. It’s the most comprehensive third-party library for Pure Data and is fully integrated into plugdata.

Overview

The ELSE library provides a modern, well-documented alternative to many vanilla and Cyclone objects, with enhanced functionality and consistent design philosophy.

Key Features

  • 570+ objects covering synthesis, audio processing, control, and utilities
  • Bandlimited oscillators for alias-free audio generation
  • Advanced filters including SVF, parametric EQ, and modeled filters
  • Rich modulation with LFOs, envelopes, and sequencers
  • MIDI utilities for note processing and generation
  • Live coding tools for algorithmic composition
  • Comprehensive help patches for every object
When both ELSE and Cyclone provide the same object name, ELSE is generally preferred for its richer features and better documentation.

Object Categories

ELSE objects are organized into functional categories:

Signal Generators

Oscillators, noise generators, and signal sources

Filters & EQ

Lowpass, highpass, bandpass, shelving, and parametric filters

Effects

Reverb, delay, distortion, chorus, flangers, and modulation

Envelopes

ADSR, ASR, function generators, and envelope followers

Sequencers

Step sequencers, pattern generators, and arpeggiators

MIDI

Note processing, MIDI utilities, and controllers

Data & Math

Mathematical operations, logic, and data manipulation

Analysis

FFT, pitch detection, and signal analysis

Essential Objects

Here are the most commonly used ELSE objects by category:

Signal Generators

bl.osc~ - Multi-waveform bandlimited oscillator
  • Supports saw, square, triangle, impulse waveforms
  • Adjustable number of partials
  • Hard and soft sync modes
  • MIDI frequency input option
bl.saw~, bl.square~, bl.tri~ - Individual bandlimited waveformsbl.saw2~, bl.imp~, bl.imp2~ - Specialized waveformsbl.wavetable~ - Wavetable oscillator with multiple waveformsThese oscillators are alias-free and sound significantly better than vanilla [phasor~] for audio synthesis.
brown~ - Brownian/brown noisepink~ - Pink noise (1/f spectrum)white~ - White noisegrey~ - Grey noise (psychoacoustically flat)crackle~ - Chaotic noise generatordust~, dust2~ - Random impulse generators
lfo - Multi-waveform control-rate LFOramp~ - Audio-rate ramp/envelope generatorimpulse~, impulse2~ - Precise impulse generatorssine~ - High-quality sine wave oscillator

Filters

lowpass~ - Simple lowpass with resonancelop~ - One-pole lowpasslp.filt~ - Multi-mode lowpass filtersvf~ - State variable filter (LP mode)
highpass~ - Simple highpass with resonancehip~ - One-pole highpasshp.filt~ - Multi-mode highpass filter
bandpass~ - Bandpass filterbandstop~ - Band-reject/notch filtersvf~ - State variable filter (LP/HP/BP/notch)slew~, slew2~ - Slew rate limiters
eq~ - Parametric equalizerhighshelf~, lowshelf~ - Shelving filtersresonbank~, resonbank2~ - Resonant filter banks

Envelopes

adsr~ - Classic ADSR envelope (audio rate)asr~ - ASR (Attack-Sustain-Release) envelopeenvgen~ - Breakpoint function generatorfunction~ - Multi-segment envelope editor
envelope~ - Audio envelope followeramp~ - Amplitude follower with smoothingrms~ - RMS level calculatorpeak~ - Peak level detector

Effects

rev1~, rev2~, rev3~ - Different reverb algorithmsfreerev~ - Freeverb implementationallpass.rev~ - Allpass-based reverb
del~ - Simple delay linefbdelay~ - Feedback delayping.pong~ - Stereo ping-pong delayshdelay~ - Short delay for effects
chorus~ - Chorus effectflanger~ - Flanger effectphaser~ - Phaser effectvibrato~ - Vibrato effect
drive~ - Overdrive/distortioncrush~ - Bit crusherdownsample~ - Sample rate reductioncompress~ - Compressorlimit~ - Limiter

Sequencers & Pattern Generators

sequencer - Multi-track step sequencersequencer~ - Audio-rate sequencerstepped - Value sequencer with GUI
euclid - Euclidean rhythm generatorlfnoise - Random stepped valuesrampnoise~ - Interpolated random valuesrandpulse~, randpulse2~ - Random pulse trains

MIDI & Note Processing

midi - MIDI note input/outputnoteout - Formatted MIDI note outputnotein - MIDI note inputpgmin, pgmout - Program changectlin, ctlout - Control change
suspedal - Sustain pedal handlervoices - Voice allocation managermono - Note to mono converterretune - MIDI note retuning
mtof - MIDI to frequencyftom - Frequency to MIDIscale - Scale/map values

Data & Math

add, sub, mul, div - Basic arithmeticadd~, sub~, mul~, div~ - Audio-rate mathceil, floor, round, trunc - Roundingsin, cos, tan - Trigonometrylog, exp, pow - Exponential functions
above, below - Threshold detectionchanged - Detect value changesgate - Route signals based on conditionpick - Select from multiple inputs
rand.f, rand.i - Random number generatorsrand.seq - Random sequence without repeatsrandpulse - Random pulse generatorprob - Probability gate

Analysis

pitch~ - Pitch detectionpitch.track~ - Pitch trackingzerocross~ - Zero-crossing detector
fft~, ifft~ - Fast Fourier Transformhann~ - Hanning windowbin.shift~ - Spectral bin shifter

Unique Features

Multi-Channel (MC) Support

Many ELSE objects support multi-channel audio with .mc~ versions:
  • autofade.mc~ - Multi-channel crossfade
  • mix.mc~ - Multi-channel mixer
  • merge.mc~, unmerge.mc~ - Channel merging/splitting

GUI Objects

ELSE includes many objects with built-in GUI:
  • slider2d - 2D XY controller
  • pad - Multi-point touch controller
  • keyboard - Piano keyboard input
  • pic - Image display
  • graph - Function/array editor

Live Coding

Objects designed for live coding and algorithmic composition:
  • hot - Hot inlet (always triggers output)
  • args - Access patch arguments
  • dollsym - Dollar symbol expansion
  • message - Formatted message box

Finding Objects

With 570+ objects, finding the right one is important:

By Category in Object Browser

  1. Open object browser (Cmd/Ctrl + Shift + N)
  2. Filter by “ELSE” library
  3. Browse categories: Signal Generators, Filters, etc.

By Naming Convention

  • ~ suffix - Signal-rate objects
  • No suffix - Control-rate objects
  • .mc~ suffix - Multi-channel versions
  • bl.* - Bandlimited generators

Search by Function

Common search terms:
  • “filter” - All filter objects
  • “osc” - Oscillators
  • “env” - Envelopes
  • “random” - Random/stochastic objects
  • “midi” - MIDI-related objects

Documentation

Every ELSE object has comprehensive help patches:
  1. Right-click object → “Help”
  2. Press Cmd/Ctrl + H with object selected
  3. Help patches include:
    • Detailed description
    • All inlet/outlet documentation
    • Argument explanations
    • Practical examples
    • Related objects
ELSE help patches are some of the best-documented in the Pure Data ecosystem. Always check them when learning a new object.

ELSE vs. Vanilla vs. Cyclone

When to Use ELSE

Choose ELSE when:
  • You need bandlimited oscillators
  • You want built-in GUI controls
  • You need advanced filters or effects
  • Documentation and examples are important
  • Working exclusively in plugdata

When to Use Vanilla

Choose Vanilla when:
  • Maximum portability across PD distributions
  • Minimal external dependencies
  • Simple, well-understood behavior

When to Use Cyclone

Choose Cyclone when:
  • Porting patches from Max/MSP
  • Specific Max compatibility needed
  • ELSE doesn’t have an equivalent

Performance Considerations

  • Bandlimited oscillators (bl.*~) use more CPU than vanilla oscillators
  • Complex effects (reverbs, FFT) can be CPU-intensive
  • GUI objects consume slightly more resources
  • Use block~ to optimize DSP performance

External Resources

  • ELSE Repository - github.com/porres/pd-else
  • Tutorial Patches - Included in ELSE distribution
  • Video Tutorials - Available on Alexandre Torres Porres’ YouTube channel

Build docs developers (and LLMs) love