Everything that processes a signal rather than generating one: delays, saturation, modulation effects, seven reverbs, and a thirty-class dynamics section.

1. Placing an effect

An effect is a UGen with an input, so it goes on the end of a chuck chain like anything else:

voice := SawOsc new => ADSREnv new => MoogVcf new => GreyHole new.

dsp := voice stereo asDsp.
dsp init.
dsp start.
dsp displayUI.
dsp stop.
Mono and stereo effects are different objects Names ending Mono take one channel; those ending Stereo take two. Send stereo before a stereo effect so it has two channels to work with — see Connecting §7.

1.1 Dry and wet

Most effects sound best blended with the untreated signal rather than replacing it. Two mixers exist for exactly this:

ClassUse
DryWetMonoMixerBlend a mono effect with its input
DryWetStereoMixerBlend a stereo effect with its input

Many effects also expose wetAmount: directly, from the PhWetAmountSetter trait, which is simpler when the effect supports it.

2. Delays and echo

PhDelays and its subclasses are the raw delay lines; PhEcho is the musical echo built on top of one.

ClassUse
PhSimpleDelayInteger-sample delay — cheapest, cannot be modulated smoothly
PhFractionalDelayInterpolated delay — required for smooth pitch and modulation
PhSmoothDelayDelay with a smoothed delay-time control, for artefact-free changes
PhEchoEcho with feedback — a delay you can actually play with
PhFibonacciMulti-tap delay with Fibonacci-spaced taps
PhLooperLooping buffer, from the toolkit

Delay time and feedback come from PhParamsSetter: maxDel:, fb: and feedBack:.

Modulating a delay time Changing an integer delay's length produces clicks, because samples are skipped or repeated. Any effect that sweeps its delay — flanging, chorus, vibrato, doppler — needs PhFractionalDelay or PhSmoothDelay.

3. Saturation and distortion

Saturators has nineteen subclasses, each a different waveshaping curve. They all do the same thing — map input amplitude to output amplitude through a nonlinear function — and differ entirely in the shape of that curve, which is what you hear as character.

GroupClassesCharacter
Hard clippingHardclip, Hardclip2, PhClipAbrupt; harsh odd harmonics, digital-sounding
Soft quadraticSoftClipQuadratic, SoftClipQuadratic1, SoftClipQuadratic2Gentle onset; warm, tube-like
HyperbolicTanh1, Hyperbolic, Hyperbolic2Smooth compression into saturation; very musical
TrigonometricArcTan, ArcTan2, SinArcTan, SinArcTan2Progressive, softer than tanh
Inverse hyperbolicASinh1, ASinh2Expands rather than compresses near zero
PolynomialCubic1, Parabolic, Parabolic2Predictable harmonic content, cheap
FoldingPhWavefoldFolds instead of clipping — wild, inharmonic, West Coast

CubicNl is a separate cubic nonlinearity with its own controls, and PhBitCrusher and PhDownSampler in the Basics family give the complementary digital degradations.

Drive is what makes a saturator audible A waveshaper only acts on the part of the signal that reaches the nonlinear region. Boost into it with drive: or uLevel:, then reduce afterwards — that difference is the effect. Add a DcBlocker after any asymmetric curve; see Filters §9.

4. Modulation effects

ClassEffect
PhFlangerMonoFlanger — a swept short delay mixed with the dry signal
DopplerShiftDoppler pitch shift from a moving source
PhTransposePitch transposition

Controls come from PhModulationSettermodFreq: and modDepth: — and from PhParamsSetter's depth: and fb:.

The class is PhFlangerMono Some older material refers to it as FlangerMono. The class name carries the Ph prefix.

5. Wah and formant effects

ClassEffect
PhWahWah — a swept resonant band-pass
CryBabyModel of the classic wah pedal
AutoWahEnvelope-following wah — the sweep tracks input level
PhSpeakerBpSmall-speaker simulation, band-limited

AutoWah is worth understanding as a pattern rather than only as an effect: it is a filter whose cutoff is driven by an envelope follower on its own input. You can build the same idea by hand with an averaging filter from Filters §8 and any filter you like.

6. Reverbs

Seven reverb algorithms, each with a distinct personality. Reverb choice matters more to the character of a patch than almost any other effect decision.

ClassAlgorithmCharacter
FreeverbMonoSchroeder–MoorerThe familiar workhorse; cheap and neutral
ZitaRevStereoZita-Rev1 (Fons Adriaensen)High quality, natural; excellent as a send reverb
DattorroRevDattorro plateDense plate reverb; smooth tail, classic on drums and voice
GreyHoleGreyhole (from Faust/SC)Diffuse, pitch-shifting, unpredictable — a texture generator
JpVerbJPverbLong, lush, ambient; designed for very long tails
SpringReverbSpring tankBoingy, resonant; guitar-amp character
SatRevSaturating reverbReverb with built-in saturation
"GreyHole is as much an instrument as an effect"
texture := ElecGuitar new => GreyHole new.
Choosing For a room that should not draw attention, use ZitaRevStereo. For a recognisable plate on a drum, DattorroRev. For ambient washes, JpVerb. For something that will surprise you, GreyHole — it shifts pitch as it diffuses and does not sound like a room at all.

Related demo modules — Freeverb_Demo, ZitaRev1, JpRev_Demo, Dattorro_Rev_Demo, ReverbTank_Demo, KbRomRev1, PhVitalRev_Demo — are ready-made stereo patches; see the Demo Gallery.

7. Dynamics

Thirty classes handle level control. The naming is systematic, and once you can read it the family stops being intimidating.

7.1 Compressors

ClassUse
PhCompressorMonoStandard mono compressor
PhCompressorStereoStandard stereo compressor, linked channels
PhCompressorLadMonoLookahead-style mono compressor

The …CompressionGain… classes are a level below these: they compute a gain signal rather than applying it, so you can route it yourself — for sidechaining, for ducking one source with another, or for visualising gain reduction.

7.2 Peak or RMS, feed-forward or feedback

Read the class names as a combination of three choices:

Name partMeaning
Peak…Detects instantaneous peaks — fast, catches transients
RMS…Detects average energy — slower, tracks perceived loudness
FF…Feed-forward: measures the input. Precise, modern
FB…Feedback: measures the output. Softer, more "analogue"
FBFF…Both, blended
…_dBGain expressed in decibels rather than linear
…Mono / …StereoChannel count

So PhRMSFBFFCompressorGainStereo is an RMS-detecting, combined feedback/feed-forward stereo gain computer. The names are long but entirely predictable.

Ratio2Strength and Strength2Ratio convert between the two ways of expressing how hard a compressor works.

7.3 Limiters

ClassUse
PhLimiter1176Mono1176-style limiter, mono — fast, coloured
PhLimiter1176Stereo1176-style limiter, stereo
PhLookaheadLimiterLookahead limiter — catches transients before they arrive
PhLimiterLadMonoLookahead limiter, mono
PhLimiterLadStereoLookahead limiter, stereo
Put one at the end Resonant filters, feedback networks and stacked oscillators can all exceed full scale without warning. A limiter as the last stage of a live patch is cheap insurance, especially on stage.

7.4 Gates and expanders

ClassUse
PhGateMonoNoise gate, mono
PhGateStereoNoise gate, stereo
PhExpanderDownward expander — the gentle version of a gate
PhExpanderStereoStereo expander
PhExpanderSCStereoSidechain-controlled stereo expander
PhPeakExpansionGainStereoExpansion gain computer
PhDensityGateDensity-based gate, from the toolkit

8. Spatial

ClassUse
PannerPosition a mono source in the stereo field
PhSpatialsSuperclass of the spatialisation effects
DopplerShiftPitch shift from source movement

A Panner whose position is driven by an LFO is auto-panning; driven by an envelope, it is a movement gesture tied to each note. As always, the destination accepts any signal — see Envelopes & Modulation.

9. Order of the chain

Effects are not commutative, and a few orderings are conventional because they solve real problems:

Dynamics before distortion — compressing first gives the saturator a consistent level to work with; compressing after only flattens what the distortion already flattened.
Filter before or after saturation, deliberately — filtering first shapes what gets distorted; filtering after tames the harmonics distortion created. Both are valid and sound entirely different.
Modulation before reverb — flanging a reverb tail smears it; reverberating a flanged signal keeps the movement legible.
Reverb late, limiter last — reverb belongs near the end, and the limiter after everything that could raise the level.
DC blocker after anything nonlinear — saturation and rectification introduce offset. See Filters §9.

10. Where to go next

DocumentWhat it covers
FiltersThe comb and allpass sections these effects are built from.
Demo GalleryReady-made effect patches, one line each.
TurboPhaustoAn effects rack with these already wired up.
UGen LibraryEvery effect class, including those not named here.

11. Troubleshooting

The effect makes no audible difference

Either the wet amount is at zero, or a saturator is not being driven hard enough to reach its nonlinear region. See §1.1 and §3.

A stereo effect only outputs on one side

It received one channel. Send stereo before the effect, not after — §1.

My flanger clicks as it sweeps

It is built on an integer-sample delay. Use PhFractionalDelay or PhSmoothDelay — §2.

The compressor pumps unpleasantly

A peak detector is reacting to individual transients. Move to an RMS variant, or lengthen the release — §7.2.

The reverb sounds metallic and thin

The algorithm is not suited to the material, or the input is mono into a stereo reverb. GreyHole in particular is deliberately not a room simulator — try ZitaRevStereo — §6.

My patch clips only when the reverb is engaged

The reverb is adding energy on top of the dry signal. Lower the wet amount, or put a limiter after it — §7.3.