Skip to main content
Cyclone is a library of Pure Data objects that clone the functionality of Max/MSP objects, making it easier to port patches between the two environments. It includes over 220 objects covering audio processing, control flow, and data manipulation.

Overview

Cyclone was created to provide Max/MSP compatibility in Pure Data, allowing patches to be ported with minimal changes. While very useful for compatibility, ELSE library objects are generally preferred when not specifically porting from Max.

Key Features

  • 220+ Max/MSP clones covering most common Max objects
  • High compatibility with Max patch behavior
  • Familiar names for Max users (gate, counter, cycle~, etc.)
  • Well-tested implementations of Max algorithms
When choosing between Cyclone and ELSE versions of the same object, prefer ELSE unless you specifically need Max/MSP compatibility. ELSE objects typically have richer features and better documentation.

Object Categories

Cyclone objects mirror Max/MSP’s organization:

Audio Generators

Oscillators, noise, and signal sources

Audio Processing

Filters, effects, and signal manipulation

Control Flow

Logic, routing, and message processing

Data Structures

Collections, tables, and data storage

Math & Logic

Mathematical operations and comparisons

MIDI

MIDI input, output, and processing

Common Objects

Here are frequently-used Cyclone objects organized by function:

Audio Generators

cycle~ - Sinusoidal oscillator (Max equivalent of osc~)saw~ - Sawtooth oscillatortri~ - Triangle wave oscillatorrect~ - Rectangular/pulse wave oscillatorphasor~ - Ramp/sawtooth generator
Cyclone oscillators are not bandlimited and will alias at high frequencies. For better audio quality, use ELSE bandlimited oscillators (bl.saw~, bl.square~, etc.)
rand~ - White noise generatorpink~ - Pink noise (1/f spectrum)

Audio Processing

svf~ - State variable filter (LP/HP/BP/BR modes)biquad~ - Biquad filterallpass~ - Allpass filtercomb~ - Comb filterreson~ - Resonant bandpass filter
delay~ - Simple delay linetapout~, tapin~ - Tap delay systemphaseshift~ - Phaser effect
average~ - Running averageslide~ - Exponential smoothersnapshot~ - Sample signal value

Control Flow

gate - Route messages to selected outletswitch - Route input to selected outletselector - Select from multiple inputssplit - Split numbers by rangeroute - Route messages by selector (enhanced vanilla route)
==, !=, >, <, >=, <= - Comparison operators&&, || - Logical AND/OR! - Logical NOT
counter - Counting object with min/max/wrapmetro - Metronome (alternative to vanilla metro)delay - Delay messages (alternative to vanilla del)clocker - Multi-output metronome

Data Structures

coll - Named collection/dictionary storagetable - Data table with indexingbucket - Randomize lists and sequences
zl - List processing (multiple modes)join - Join multiple liststhresh - Threshold/debounce values

Math Operations

accum - Accumulator (add/multiply to value)scale - Scale/map values from one range to anotherclip - Constrain values to rangeabs - Absolute value
asin, acos, atan, atan2 - Inverse trig functionssinh, cosh, tanh - Hyperbolic functionsasinh, acosh, atanh - Inverse hyperbolic
pow - Exponentiationlog, ln - Logarithmssqrt - Square root

MIDI

midiparse - Parse MIDI messagesmidiformat - Format MIDI messages

Max/MSP Compatibility

Object Name Mapping

Most Cyclone objects use identical names to their Max counterparts:
Max ObjectCyclone/PDNotes
cycle~cycle~Same name
countercounterSame name
collcollSame name
gategateSame name
osc~osc~Use vanilla [osc~] or ELSE [sine~]
scalescaleSame name

Porting Max Patches

When porting from Max/MSP:
  1. Install Cyclone - Already included in plugdata
  2. Check object names - Most work identically
  3. Test behavior - Some edge cases may differ
  4. Replace incompatible objects - Not all Max objects are cloned
  5. Consider ELSE alternatives - Often better for new work

Known Differences

While Cyclone aims for high compatibility, some differences exist:
  • GUI objects - Max’s UI objects are not included
  • Gen/Codebox - Not supported (use Heavy or pd-lua instead)
  • MSP-specific features - Some Max-only features unavailable
  • Timing precision - Minor differences in scheduling

Cyclone vs. ELSE

Many objects exist in both libraries. Here’s when to choose each:

Choose Cyclone

Use Cyclone when:
  • Porting patches from Max/MSP
  • Need exact Max behavior compatibility
  • Working with Max-specific workflows
  • Collaborating with Max users

Choose ELSE

Use ELSE when:
  • Starting a new patch from scratch
  • Need bandlimited oscillators (better sound)
  • Want comprehensive documentation
  • Need GUI objects
  • Working exclusively in plugdata

Example: Oscillators

Cyclone approach (Max compatible):
[cycle~ 440]  // Simple sine wave, may alias
ELSE approach (better quality):
[bl.osc~ sine 440]  // Bandlimited, no aliasing

Example: Filtering

Cyclone approach:
[svf~ 1000 0.7]  // State variable filter
ELSE approach:
[svf~ 1000 0.7]  // ELSE also has svf~, choose based on preference

Performance

  • CPU Usage - Generally similar to vanilla/ELSE equivalents
  • Memory - Minimal overhead
  • Audio Quality - Non-bandlimited oscillators will alias
For production audio work, prefer ELSE bandlimited oscillators over Cyclone’s standard oscillators to avoid aliasing artifacts.

Documentation

Cyclone objects include help patches:
  1. Right-click object → “Help”
  2. Press Cmd/Ctrl + H with object selected
  3. Help patches document:
    • Inlets and outlets
    • Arguments
    • Basic usage examples
Cyclone help patches are often less detailed than ELSE. For comprehensive examples, consult Max/MSP documentation or ELSE alternatives.

Using Cyclone Objects

Explicit Library Prefix

If both ELSE and Cyclone have the same object name, specify which to use:
[cyclone/gate]  // Explicitly use Cyclone version
[else/gate]     // Explicitly use ELSE version  
[gate]          // Use whichever loads first (usually ELSE)

Finding Cyclone Objects

In the object browser:
  1. Open browser (Cmd/Ctrl + Shift + N)
  2. Filter by “cyclone” library
  3. Browse categories or search by name

Complete Object List

Cyclone includes 220+ objects. Here’s a sampling by category:

Audio Objects (~)

accum, allpass~, asin~, average~, biquad~, cartopol~, clip~, comb~, cosx~, cycle~, delay~, delta~, deltaclip~, edge~, frameaccum~, framedelta~, index~, kink~, lookup~, minmax~, mstosamps~, onepole~, peek~, phasewrap~, phaseshift~, pink~, play~, poke~, poltocar~, pong~, pow~, rampsmooth~, rand~, record~, reson~, sah~, sampstoms~, saw~, scope~, snapshot~, spike~, svf~, tanh~, train~, trapezoid~, tri~, wave~, zerox~

Control Objects

accum, anal, asin, bangbang, bucket, capture, cartopol, clip, coll, counter, cycle, decide, drunk, flush, forward, fromsymbol, funbuff, funnel, gate, grab, histo, iter, match, maximum, mean, minimum, mousefilter, mousestate, next, offer, onebang, past, peak, poltocar, prob, pv, scale, seq, speedlim, spell, split, spray, sprintf, substitute, sustain, switch, table, thresh, timer, tosymbol, trough, universal, unjoin, urn, xbendin, xbendout, xnotein, xnoteout, Clip, Line, Scope, Table, Uzi, bucket, zl

External Resources

  • Cyclone Repository - github.com/porres/pd-cyclone
  • Max/MSP Documentation - Reference for object behavior
  • Porting Guide - Community guides for Max→PD conversion

Build docs developers (and LLMs) love