home/ modules/ strudel-effects-signals-and-internals

Strudel: effects, signals and pattern internals

  • learner can shape sound with Strudel's chainable effects and modulate them with signals
  • learner can apply conditional/probabilistic transforms and scales/chords
  • learner can reason about Haps, structure donation and custom methods

Build an evolving Strudel piece: melodic material via note()/scale()/chords, effects (lpf, room, delay, vowel, gain) modulated by signals, conditional transforms (every/sometimes/chunk), and one custom register()ed method — explaining how Haps and appLeft/appRight decide the structure.

This module takes you from triggering patterns to performing them. In a real browser-based live set — a laptop, Strudel’s REPL projected behind you, no external synths or mixer — everything the audience hears is shaped by method chains on your patterns. The whole task is an evolving piece that breathes on its own: melody constrained to a scale so improvised edits stay consonant, a filter sweep riding a slow sine like an LFO, reverb and delay opening space in a drop, and periodic and probabilistic transforms mutating the material while you think about the next move.

Start supported: take a groove from the prerequisite module and bolt on one effect at a time, leaning on “lpf() applies a low-pass filter” and “gain() controls amplitude” as just-in-time references, then replace static values with continuous motion via “Strudel’s built-in signals (sine, saw, square, rand, perlin) continuously modulate effect parameters”. Next, add harmony with scale() and comma-built chords (transposed with add()), and layer variation with every, sometimes, and chunk. The final, unsupported step goes under the hood: write one method of your own with register(), and explain — using the Hap’s whole/part timespans and the appLeft/appRight structure-donation rules — why your combined patterns land where they do.

The required atoms are exactly what the capstone cannot be faked without: the five named effects, both signal atoms, the conditional-transform family, scale/chord/add for melodic material, and the internals chain from pure() through withValue to register(). Supporting atoms widen the palette — panning, off-echoes, ply rolls, polymeter, sample tricks like splice and loopAt, and deeper query-time internals — worth absorbing once the core piece runs, and natural next moves when the piece needs a second night’s worth of variation.

Runnable examples

Generated from the context/ instrument corpus by concept (redistributable idioms only). Do not edit — regenerate with gen-module-examples.mjs.

every-n-transform

s("bd sd hh cp").every(4, rev)

strudel-0028 · CC0

d1 $ iter 4 $ sound "bd sn hh cp"

tidal-0045 · CC0

sample-chop

s("breaks125:0").chop(8)

strudel-0020 · CC0

d1 $ chop 8 $ sound "break:0"

tidal-0019 · CC0

four-on-the-floor

s("bd*4")

strudel-0001 · CC0

setcps 0.52

tidal-0044 · CC0

reverb-space

s("cp").room(0.6).size(4)

strudel-0019 · CC0

out: mix ~a ~b >> plate 0.3

glicol-0008 · MIT

probabilistic-variation

s("hh*16").degradeBy(0.3)

strudel-0026 · CC0

d1 $ degradeBy 0.3 $ sound "hh*16"

tidal-0025 · CC0

adsr-envelope

note("c3").s("sawtooth").attack(0.01).decay(0.1).sustain(0.6).release(0.3)

strudel-0205 · CC0

{ Saw.ar(220) * EnvGen.kr(Env.perc(0.001, 0.2), Impulse.kr(2)) * 0.3 }.play

supercollider-0013 · CC0

polymeter

s("{bd sd, hh hh hh}%4")

strudel-0007 · CC0

d1 $ sound "{bd sn, hh hh hh}%4"

tidal-0007 · CC0

stereo-panning

d1 $ pan (slow 2 sine) # sound "hh*8"

tidal-0037 · CC0

SinOsc s => Pan2 p => dac; -0.7 => p.pan;

chuck-0042 · MIT

subdivision

seq [55, 82.5, 110, 82.5] & osc >> audio

punctual-0014 · CC0-1.0

d1 $ n "0 .. 7" # scale "minor" # sound "arpy"

tidal-0030 · CC0

formant-vowel

note("<c3 e3 g3>").vowel("<a e i o>")

strudel-0036 · CC0

d1 $ note "c e g" # sound "supersquare" # vowel "a e i"

tidal-0035 · CC0

Atoms in this module

Required — these gate the capstone

Strudel audio effects are chainable methods that accept patterned values
Concept L1 Foundations F
Every Strudel mini-notation pattern has an equivalent JS function form, but mini-notation has only a handful of modifiers
Concept L2 First instrument F
lpf() applies a low-pass filter; lower cutoff values muffle sound, higher values let high frequencies through
Concept L2 First instrument FB
room() adds reverberation to a pattern, from dry at 0 to increasingly wet at higher values
Concept L2 First instrument FB
delay() adds echo repeats, with optional arguments for echo time and feedback
Concept L2 First instrument FB
vowel() applies a formant filter that colours a sound with a spoken-vowel timbre
Concept L2 First instrument FB
gain() controls amplitude and can be patterned to create dynamic accent patterns within a rhythm
Concept L2 First instrument FD
Strudel signals are continuous time functions that drive parameters smoothly between values
Concept L2 First instrument F
Strudel's built-in signals (sine, saw, square, rand, perlin) continuously modulate effect parameters
Concept L2 First instrument F
sometimes/often/every apply transformations probabilistically or periodically in Strudel
Concept L2 First instrument F
chunk divides a pattern into n parts and transforms a different part each cycle
Concept L2 First instrument F
scale() interprets n() numbers as degrees within a named musical scale
Concept L2 First instrument FA
Comma-separated note values in Strudel produce chords; interval notation builds chord types
Concept L2 First instrument FA
add() transposes pattern notes by a numeric amount, treating letter names as numbers
Concept L2 First instrument F
pure() lifts a value into a pattern that emits it once per cycle
Concept L3 Craft F
A Strudel Hap has an onset when its whole timespan begins at the same time as its part timespan
Concept L3 Craft F
withValue (alias fmap) applies a function to every Hap's value without changing timing
Concept L3 Craft F
appLeft/appRight/appBoth choose which pattern donates structure when a pattern of functions meets a pattern of values
Concept L4 Performance F
register() adds a new method to Strudel's Pattern class and returns it as a standalone function
Procedure L4 Performance F

Supporting — enrichment, not gating

pan() positions each event in the stereo field, from full left at 0 to full right at 1
Concept L2 First instrument FD
lastOf and firstOf apply a transform on one specific cycle out of every n
Concept L2 First instrument F
degradeBy removes events by probability; sometimesBy applies a function by probability
Concept L2 First instrument F
fast(n) and slow(n) scale a whole pattern's tempo, the function forms of * and / in mini-notation
Concept L2 First instrument F
rev() reverses the time direction of a pattern's events within each cycle
Concept L2 First instrument F
off delays a transformed copy of a pattern by a fraction of a cycle and layers it over the original
Concept L2 First instrument F
ply(n) speeds up each individual event n times within its own time slot, adding rhythmic density
Concept L2 First instrument F
ply subdivides each event into n repeats; segment resamples the whole pattern at n events per cycle
Concept L3 Craft F
struct imposes a new rhythmic grid on a pattern while mask only silences it where the mask is 0
Concept L3 Craft F
polymeter aligns patterns by step so patterns of different lengths phase against each other
Concept L3 Craft F
Curly-brace patterns in Strudel combine sequences of different step counts polymetrically
Concept L2 First instrument F
filterHaps tests the whole Hap (with timing) while filterValues tests only the value
Procedure L3 Craft F
splitQueries breaks multi-cycle queries into per-cycle sub-queries
Concept L4 Performance F
Time is warped either on the query span (before) or on the hap spans (after) a pattern is queried
Concept L4 Performance F
speed() changes sample playback rate; negative values reverse the audio waveform
Fact L2 First instrument FB
loopAt syncs a long audio sample to a given number of Strudel cycles
Procedure L2 First instrument F
splice time-stretches each chopped segment to its event duration; chop does not
Concept L2 First instrument F
cut stops the current sample as soon as the next event in its group is triggered
Concept L2 First instrument F
ADSR envelope in Strudel shapes each note's amplitude over four stages: attack, decay, sustain, release
Concept L2 First instrument FB
cat plays patterns one per cycle, seq crams them into one cycle, stack plays them together
Concept L2 First instrument F
Strudel is a browser-native, Tidal-style pattern language that shares TidalCycles' syntax
Fact L1 Foundations F
When two Tidal patterns are combined applicatively, the left pattern's structure is preserved and its events are matched with co-occurring right-hand events
Concept L4 Performance F
Polymeter and every-n-transform generate long-form evolution in techno without changing the core pulse
Principle L2 First instrument AF