Thirty-four ready-made patches from the FAUST demo library, each one instantiable in a single line. The fastest way to hear what an algorithm sounds like before committing to it.

1. Using a demo

A demo is an ordinary UGen. Instantiate it, turn it into a DSP, open its interface:

"A complete virtual-analogue oscillator with a full control panel"
demo := Virtual_Analog_Oscillator_Demo new.
dsp  := demo asDsp.
dsp init.
dsp start.
dsp displayUI.

dsp stop.
dsp destroy.

Demos come from FAUST's demos.lib, which packages each algorithm together with a complete, sensibly ranged set of controls. That is their value: no wiring, no guessing at parameter ranges.

1.1 Mono, stereo and generators

The superclass tells you what a demo expects:

SuperclassMeaning
PhDemosA generator or analyser — needs no input
PhDemosMonoAn effect taking one channel of input
PhDemosStereoAn effect taking two channels of input
"Effects need something to process"
voice := SawOsc new => ADSREnv new.

"Mono effect"
dsp := (voice => Moog_Vcf_Demo new) stereo asDsp.

"Stereo effect — widen before, not after"
dsp := (voice stereo => Freeverb_Demo new) asDsp.

1.2 Finding the controls

Demos use nested FAUST groups, so their parameter names are paths rather than simple labels — something like 'Freeverb/0x00/RoomSize'. Do not try to construct these:

dsp traceAllParams.   "copy the names exactly as printed"
Use the interface first For demos, displayUI is almost always the better route — the generated panel is laid out the way the algorithm's author intended, with the controls grouped meaningfully. Reach for setValue:parameter: only once you know what you want to automate.

2. Generators and analysis

These need no input — instantiate and play.

ClassDemonstrates
Virtual_Analog_Oscillator_DemoA full virtual-analogue oscillator section with several waveforms
Sawtooth_DemoSawtooth generation methods compared
Twin_Osc_DemoTwo detuned oscillators
Oscrs_DemoResonant oscillator bank
Colored_Noise_DemoNoise with adjustable spectral tilt
Velvet_Noise_DemoVelvet noise — sparse impulses, used in reverb design
Envelopes_DemoThe envelope generators side by side
Latch_DemoSample-and-hold behaviour
Fft_Spectral_Level_demoFFT spectral level analysis and display
Velvet noise is worth a listen It sounds like white noise but consists of widely spaced unit impulses. Because it is sparse, convolving with it is cheap — which is why it turns up inside reverb algorithms rather than as a sound in its own right.

3. Mono effects

These take one channel of input.

ClassDemonstrates
Moog_Vcf_DemoThe Moog voltage-controlled filter
Wah4_DemoFour-pole wah
CryBaby_DemoThe Cry Baby wah pedal model
Parametric_Eq_DemoParametric equaliser
Spectral_Tilt_DemoTilting the whole spectrum around a pivot
FilterBank_DemoA bank of band filters
Vocoder_DemoChannel vocoder
Cubicnl_DemoCubic nonlinear distortion
Exciter_DemoHarmonic exciter — adds high-frequency content
Reverse_Echo_DemoReversed echo
PosPass_DemoPositional pass filtering
Vocoder_Demo needs two things A vocoder modulates one signal by the spectral envelope of another — a carrier and a modulator. Feeding it a single source will not produce the effect you are expecting; check traceAllParams for which input is which.

4. Stereo effects and reverbs

These take two channels. Send stereo to the source first.

ClassDemonstrates
Freeverb_DemoFreeverb — the classic Schroeder–Moorer reverb
ZitaRev1Zita-Rev1, a high-quality FDN reverberator
ZitaLightA lighter-weight Zita configuration
JpRev_DemoJPverb — long, lush ambient reverb
Dattorro_Rev_DemoThe Dattorro plate reverb
GreyHole_DemoGreyhole — diffuse, pitch-shifting, unpredictable
ReverbTank_DemoSpring-tank style reverb
KbRomRev1A room reverberator
PhVitalRev_DemoReverb modelled on the Vital synthesiser's
Flanger_DemoStereo flanger
Phaser2_DemoStereo phaser
TapeStop_DemoTape-stop effect — pitch and speed falling to a halt
Compressor_DemoStereo compressor with metering
Gate_DemoStereo noise gate

Several of these have direct UGen equivalents — ZitaRevStereo, DattorroRev, GreyHole, JpVerb — described in Effects §6. The demo versions carry more controls; the plain UGens are leaner and easier to automate.

5. Reading a demo as a lesson

Demos are worth more than a quick audition. Because every one is a complete, working, professionally parameterised patch, they are a reference for how an algorithm should be set up.

Audition — instantiate, displayUI, and move every control to learn what the algorithm responds to.
Read the rangesdsp traceAllParams shows the minimum, maximum and default the author chose. These are good defaults for your own patch.
Read the codedsp generatedCode returns the FAUST source. This is the actual algorithm, and it is often short.
Rebuild it — assemble the equivalent from plain UGens, and compare. The demo is your reference implementation.
"What is this demo actually doing?"
demo := Dattorro_Rev_Demo new.
dsp := demo asDsp.
dsp init.
dsp traceAllParams.
dsp generatedCode.   "the FAUST source behind it"
A note on cost Demos are built for demonstration, not for efficiency — they often expose far more controls and compute more than a finished patch needs. Once you know what you want, the plain UGen is usually the better choice for a piece you will perform.

6. Where to go next

DocumentWhat it covers
Effects, Reverbs & DynamicsThe leaner UGen equivalents of these demos.
FiltersThe filters several of these demonstrate.
Raw FAUST & the Box APIReaching the rest of the FAUST demo library directly.
UGen LibraryThe full demo class list.

7. Troubleshooting

The demo is silent

It is an effect and has no input. Check its superclass — PhDemosMono and PhDemosStereo both need a source chucked into them. §1.1.

A stereo demo only outputs on one side

The source was mono. Send stereo before the demo, not after — §1.1.

I cannot work out the parameter names

They are nested group paths with hex segments. Copy them verbatim from traceAllParams, or just use displayUI — §1.2.

The demo uses a lot of CPU

Expected — demos favour completeness over efficiency. Switch to the plain UGen equivalent once you know what you need. §5.

The vocoder does nothing useful

It needs both a carrier and a modulator — §3.

I want a FAUST demo that is not in this list

demos.lib has more than Phausto wraps. Reach it with a raw FAUST string — see Raw FAUST & the Box API.