Downspout Algorithms

This note summarizes the main generation and processing methods used by the current Downspout plugins.

MIDI generators

Audio effects

MIDI effects

Instruments

Canticle, Moka, Floozy, Syrinx and Pratt apply pitch bend per MIDI channel (range 2 semitones by default, set per channel by RPN 0) and key their voices by channel and note, so one-note-per-channel input such as Retune’s bends each note on its own.

Cellular automata

Polymeter, DrumGen and Xoxolo share one piece of arithmetic (include/downspout/cellular_automaton.hpp): a row of cells, each on or off, is advanced by a Wolfram elementary rule. A cell’s next state is bit (left << 2) | (self << 1) | right of the rule number, and the row wraps at its ends. Rule 90 turns a single hit into Sierpinski’s triangle (1, 101, 10001, 1010101); rule 30 is chaotic; 110 is busy but structured; 150 and 105 fill in densely. The generation to play is a pure function of the loop pass (the absolute step divided by the pattern length), so playback, restarts and offline renders agree, and after 64 generations the row returns to its start.

The three plugins differ in what the row means. Polymeter seeds each lane from a random row of density Pulses/Length. DrumGen and Xoxolo seed from the lane’s own hits, with the pattern as generation 0, so the first pass is always what was generated or programmed; a lane with no hits stays silent, and in DrumGen new hits take the lane’s average velocity while surviving hits keep theirs. Only what is played changes, never the stored pattern.

How the site treats these methods

The plugin cards on the GitHub Pages site stay short on purpose. This page is the place to read the implementation patterns in one place when comparing generators, effects, and instruments.