Overview
Vanilla PD includes approximately 290 objects covering audio synthesis, control flow, data manipulation, MIDI, and more. These objects form the foundation of Pure Data and are essential knowledge for every user.Why Use Vanilla?
✅ Universal compatibility - Works in Pd-vanilla, Pd-extended, plugdata, and all forks✅ Rock-solid stability - Decades of testing and refinement
✅ Well-documented - Extensive documentation and tutorials
✅ Lightweight - Minimal CPU overhead
✅ Portable - Patches work everywhere without external dependencies
Object Categories
Signal Generators
Basic oscillators and audio sources
Signal Math
Audio-rate mathematical operations
Filters
Audio filtering objects
Control Flow
Logic, routing, and timing
Data Math
Control-rate mathematical operations
MIDI
MIDI input, output, and processing
Arrays & Tables
Data storage and manipulation
Data Structures
Lists, symbols, and messages
Essential Objects Everyone Should Know
These are the fundamental objects every Pure Data user must understand:Core Building Blocks
Basic Objects
Basic Objects
[bang] / [bng] - Trigger an event[float] / [f] - Store and output a number[int] / [i] - Store and output an integer[symbol] - Store and output a symbol/text[send] / [s] - Send messages wirelessly[receive] / [r] - Receive wireless messages[print] - Print messages to console[loadbang] - Send bang when patch loads
Control Flow
Control Flow
[metro] - Send periodic bangs (metronome)[delay] / [del] - Delay a message[trigger] / [t] - Convert and send to multiple outlets[select] / [sel] - Match and route specific values[route] - Route messages by first element[spigot] - Gate messages on/off[moses] - Split numbers by threshold[until] - Loop until condition met
Math & Logic
Math & Logic
[+], [-], [*], [/] - Basic arithmetic[>], [<], [>=], [<=], [==], [!=] - Comparisons[&], [|], [&&], [||] - Logical operations[mod], [div] - Modulo and integer division[pow] - Exponentiation[abs] - Absolute value[random] - Random integersLists & Data
Lists & Data
[pack] - Combine multiple values into a list[unpack] - Split a list into separate values[list] - List operations[list append] - Append to list[list split] - Split list at index[list length] - Get list length
Audio Objects
Signal Generators
Oscillators
Oscillators
[osc~] - Cosine wave oscillator
- Inlets: frequency (signal/float), phase reset (0-1)
- Outlets: cosine wave (-1 to 1)
- Example:
[osc~ 440]for A440 sine wave
- Outputs 0-1 ramp, useful for wavetable reading
- Inlets: frequency, phase reset
- Example:
[phasor~ 1]for 1Hz ramp
- Converts input range to cosine output
- Useful for wavetable oscillators
Noise & Audio I/O
Noise & Audio I/O
[noise~] - White noise generator
- No inlets, outputs random values -1 to 1
- Arguments: channel numbers (e.g.,
[adc~ 1 2])
- Arguments: channel numbers (e.g.,
[dac~ 1 2]) - No output needed, connect signals to inlets
Sample Playback
Sample Playback
[tabread4~] - 4-point interpolated table reading
- Best for audio sample playback
- Inlet: read position (use [phasor~] for playback)
- Inlet: bang to start, number for sample count
- Inlet: signal to record, bang/number to start
Signal Processing
Filters
Filters
[lop~] - One-pole lowpass filter
- Arguments/inlet: cutoff frequency in Hz
- Simple, smooth lowpass
- Arguments/inlet: cutoff frequency in Hz
- Arguments: center frequency, Q factor
- Classic resonant lowpass (Moog-style)
- Inlets: signal, center frequency, Q
Delays & Envelopes
Delays & Envelopes
[delwrite~] / [delread~] - Delay line read/write
[delwrite~ name 1000]- Create 1000ms buffer[delread~ name 500]- Read at 500ms delay
- For time-varying delays (chorus, flanger)
- Message:
[target_value time_in_ms( - Essential for envelopes and smooth changes
- More precise than [line~], for complex envelopes
Signal Math
Signal Math
[+~], [-~], [*~], [/~] - Audio-rate arithmetic
- Accept signals or floats
- Example:
[*~ 0.5]for -6dB attenuation
- Arguments: low, high (default: -1, 1)
Analysis
Analysis
[env~] - Envelope follower
- Tracks amplitude of input signal
- Argument: window size in samples
- Inlet: bang to sample, metro for periodic sampling
- For spectral processing
- Use with [rfft~] and [rifft~] for real signals
DSP Control
Audio Settings
Audio Settings
[block~] - Set block size and overlap
- Arguments: block size, overlap factor
- Example:
[block~ 4096 4]for FFT processing
- Inlet: 1 to enable, 0 to disable
- Saves CPU by disabling unused processing
- Useful for frequency calculations
Signal Conversion
Signal Conversion
[sig~] - Convert float to signal
- Example:
[sig~ 440]creates constant 440 signal
[mtof 69]outputs 440 (A4)[ftom 440]outputs 69 (A4 MIDI note)
- Convert between dB and RMS amplitude
Control Objects
Timing & Clocks
Metronomes & Delays
Metronomes & Delays
[metro] - Metronome, sends periodic bangs
- Arguments: interval in ms, optional tempo scaling
- Inlets: on/off, interval
- Example:
[metro 1000]sends bang every second
- Arguments: delay time in ms
- Inlets: message to delay, delay time
- Example:
[delay 500]delays by 500ms
- Like [delay] but can delay different messages separately
- Left inlet starts, right inlet stops and outputs time
Routing & Logic
Message Routing
Message Routing
[trigger] / [t] - Trigger multiple outputs
- Arguments: output types (f=float, b=bang, s=symbol, l=list, a=anything)
- Example:
[t b f f]- bang, then two floats - RIGHT TO LEFT execution order
- Arguments: values to match
- Example:
[select 0 1 2]- 3 outlets + 1 default
- Example:
[route pitch velocity]routes based on selector
- Right inlet: 1=open, 0=closed
- Argument: threshold value
- Left outlet: below threshold, right: at or above
Flow Control
Flow Control
[until] - Loop until stopped
- Inlet: number of iterations or bang for infinite
- Send to right inlet to stop
- Filters out repeated identical values
- Argument: minimum interval in ms
Data Manipulation
Lists
Lists
[pack] - Combine values into list
- Arguments: types and initial values
- Example:
[pack f f f]- pack 3 floats
- Example:
[unpack f f f]- unpack 3 floats
- Subcommands: append, prepend, split, trim, length
Text & Symbols
Text & Symbols
[symbol] - Store symbol/text
- Like [float] but for text
- Example:
[makefilename patch-%d]creates “patch-1”, “patch-2”, etc.
- Multi-line text data structure
MIDI Objects
MIDI Input
MIDI Input
[notein] - MIDI note input
- Outlets: pitch, velocity, channel
- Outlets: value, controller number, channel
MIDI Output
MIDI Output
[noteout] - MIDI note output
- Inlets: pitch, velocity, channel
- Inlets: value, controller number, channel
MIDI Utilities
MIDI Utilities
[makenote] - Generate note on/off pairs
- Inlets: pitch, velocity, duration
- Automatically sends note-off after duration
- Only passes note-on messages
Arrays & Tables
Array Creation & Access
Array Creation & Access
[array] - Create named array
- GUI object for visualization and editing
- Right-click to set size and properties
- Like [array] but without graphical display
- Control-rate, instant reading
- Control-rate with interpolation
- Control-rate, instant writing
Array Operations
Array Operations
[arraysize] - Get/set array size[array get] - Get entire array as list[array set] - Set entire array from list[array sum] - Sum all values[array max] / [array min] - Find max/min value[array random] - Fill with random values[array quantile] - Statistical quantiles
Subpatches & Abstraction
Encapsulation
Encapsulation
[pd subpatch] - Create subpatch
- Organize complex patches
- Click to open subpatch window
- Create inlets/outlets for subpatches and abstractions
- For signal connections
- Efficient for polyphony
- Example:
[clone my-voice 8]creates 8 voices
Arguments & Variables
Arguments & Variables
2, $3… - Arguments passed to abstraction
- In abstraction,
$1is first creation argument - Example: Create
[my-osc 440], inside use[osc~ $1]
- Useful for unique send/receive names
- Example:
[s $0-output]creates unique sender
Message Formatting
Message Boxes & Construction
Message Boxes & Construction
[message] / [msg] - Message box
- GUI box for sending preset messages
- Use 2 for substitution
- Example:
[; pd dsp 1; metro 1000(
- Example:
[1, 0 1000(- send 1 now, 0 after 1000ms
Special Objects
System & Initialization
System & Initialization
[loadbang] - Bang when patch loads
- Essential for initialization
- Configure with delay options
- Example:
[declare -path ../abstractions]
- Run subpatch in separate process/thread
Communication
Communication
[send] / [s] - Wireless message sender
- Example:
[s global-tempo]
- Example:
[r global-tempo]
- Within same window only
- [throw~] sends, [catch~] receives and sums all senders
Best Practices
Performance
- Use [block~] to optimize FFT and heavy processing
- Turn off unused DSP with [switch~]
- Prefer [tabread4~] over [tabread~] for audio (better quality)
- Use [change] to filter redundant updates
Compatibility
- Vanilla objects work in all Pure Data distributions
- Avoid externals when vanilla can do the job
- Use [declare] to specify paths for portability
Code Organization
- Break complex patches into subpatches and abstractions
- Use send/receive sparingly (hard to debug)
- Use $0 for unique identifiers in abstractions
- Comment with [comment] or regular comments
Learning Resources
- Help patches - Right-click any object → Help
- Pure Data Manual - Comprehensive reference (Help → Pd Manual)
- FLOSS Manuals - Free online Pure Data book
- Miller Puckette’s examples - Included with Pd
Related Documentation
- ELSE Library - Extended objects for plugdata
- Cyclone Library - Max/MSP compatibility
- Objects Overview - All available libraries
- Getting Started - Begin learning Pure Data
