demos.lib

Demos library. Its official prefix is dm.

This library provides a collection of example DSP algorithms and demonstrations used to illustrate Faust features, syntax, and best practices. It includes simple oscillators, filters, effects, and synthesis examples useful for learning and testing.

The Demos library is organized into 5 sections:

References

Analyzers


(dm.)mth_octave_spectral_level_demo

Demonstrate mth_octave_spectral_level in a standalone GUI.

Usage

_ : mth_octave_spectral_level_demo(BandsPerOctave) : _
_ : spectral_level_demo : _ // 2/3 octave

Test

dm = library("demos.lib");
no = library("noises.lib");
mth_octave_spectral_level_demo_test = no.noise : dm.mth_octave_spectral_level_demo(1.5);
spectral_level_demo_test = no.noise : dm.spectral_level_demo;

Filters


(dm.)parametric_eq_demo

A parametric equalizer application.

Usage:

_ : parametric_eq_demo : _

Test

dm = library("demos.lib");
no = library("noises.lib");
parametric_eq_demo_test = no.noise : dm.parametric_eq_demo;

(dm.)spectral_tilt_demo

A spectral tilt application.

Usage

_ : spectral_tilt_demo(N) : _ 

Where:

  • N: filter order (integer)

Test

dm = library("demos.lib");
no = library("noises.lib");
spectral_tilt_demo_test = no.noise : dm.spectral_tilt_demo(4);

All other parameters interactive


(dm.)mth_octave_filterbank_demo and (dm.)filterbank_demo

Graphic Equalizer: each filter-bank output signal routes through a fader.

Usage

_ : mth_octave_filterbank_demo(M) : _
_ : filterbank_demo : _

Where:

  • M: number of bands per octave

Test

dm = library("demos.lib");
no = library("noises.lib");
mth_octave_filterbank_demo_test = no.noise : dm.mth_octave_filterbank_demo(1);
filterbank_demo_test = no.noise : dm.filterbank_demo;

Effects


(dm.)cubicnl_demo

Distortion demo application.

Usage:

_ : cubicnl_demo : _

Test

dm = library("demos.lib");
no = library("noises.lib");
cubicnl_demo_test = no.noise : dm.cubicnl_demo;

(dm.)gate_demo

Gate demo application.

Usage

_,_ : gate_demo : _,_

Test

dm = library("demos.lib");
no = library("noises.lib");
gate_demo_test = no.noise, no.noise : dm.gate_demo;

(dm.)compressor_demo

Compressor demo application.

Usage

_,_ : compressor_demo : _,_

Test

dm = library("demos.lib");
no = library("noises.lib");
compressor_demo_test = no.noise, no.noise : dm.compressor_demo;

(dm.)moog_vcf_demo

Illustrate and compare all three Moog VCF implementations above.

Usage

_ : moog_vcf_demo : _

Test

dm = library("demos.lib");
os = library("oscillators.lib");
moog_vcf_demo_test = os.osc(440) : dm.moog_vcf_demo;

(dm.)wah4_demo

Wah pedal application.

Usage

_ : wah4_demo : _

Test

dm = library("demos.lib");
os = library("oscillators.lib");
wah4_demo_test = os.osc(440) : dm.wah4_demo;

(dm.)crybaby_demo

Crybaby effect application.

Usage

_ : crybaby_demo : _

Test

dm = library("demos.lib");
os = library("oscillators.lib");
crybaby_demo_test = os.osc(440) : dm.crybaby_demo;

(dm.)flanger_demo

Flanger effect application.

Usage

_,_ : flanger_demo : _,_

Test

dm = library("demos.lib");
os = library("oscillators.lib");
flanger_demo_test = os.osc(440), os.osc(442) : dm.flanger_demo;

(dm.)phaser2_demo

Phaser effect demo application.

Usage

_,_ : phaser2_demo : _,_

Test

dm = library("demos.lib");
os = library("oscillators.lib");
phaser2_demo_test = os.osc(440), os.osc(442) : dm.phaser2_demo;

(dm.)tapeStop_demo

Stereo tape-stop effect.

Usage

_,_ : tapeStop_demo : _,_

Test

dm = library("demos.lib");
os = library("oscillators.lib");
tapeStop_demo_test = os.osc(440), os.osc(442) : dm.tapeStop_demo;

Reverbs


(dm.)freeverb_demo

Freeverb demo application.

Usage

_,_ : freeverb_demo : _,_

Test

dm = library("demos.lib");
os = library("oscillators.lib");
freeverb_demo_test = os.osc(440), os.osc(442) : dm.freeverb_demo;

(dm.)stereo_reverb_tester

Handy test inputs for reverberator demos below.

Usage

_,_ : stereo_reverb_tester(gui_group) : _,_

For suppressing the gui_group input, pass it as !. (See (dm.)fdnrev0_demo for an example of its use).

Test

dm = library("demos.lib");
no = library("noises.lib");
stereo_reverb_tester_test = no.noise, no.noise : dm.stereo_reverb_tester(!);

(dm.)fdnrev0_demo

A reverb application using fdnrev0.

Usage

_,_,_,_ : fdnrev0_demo(N,NB,BBSO) : _,_

Where:

  • N: feedback Delay Network (FDN) order / number of delay lines used = order of feedback matrix / 2, 4, 8, or 16 [extend primes array below for 32, 64, ...]
  • NB: number of frequency bands / Number of (nearly) independent T60 controls / Integer 3 or greater
  • BBSO : butterworth band-split order / order of lowpass/highpass bandsplit used at each crossover freq / odd positive integer

Test

dm = library("demos.lib");
no = library("noises.lib");
fdnrev0_demo_test = no.noise, no.noise : dm.fdnrev0_demo(16, 5, 3);

(dm.)zita_rev_fdn_demo

Reverb demo application based on zita_rev_fdn.

Usage

si.bus(8) : zita_rev_fdn_demo : si.bus(8)

Test

dm = library("demos.lib");
os = library("oscillators.lib");
zita_rev_fdn_demo_test = par(i, 8, os.osc(440 + i)) : dm.zita_rev_fdn_demo;

(dm.)zita_light

Light version of dm.zita_rev1 with only 2 UI elements.

Usage

_,_ : zita_light : _,_

Test

dm = library("demos.lib");
os = library("oscillators.lib");
zita_light_test = os.osc(440), os.osc(442) : dm.zita_light;

(dm.)zita_rev1

Example GUI for zita_rev1_stereo (mostly following the Linux zita-rev1 GUI).

Only the dry/wet and output level parameters are "dezippered" here. If parameters are to be varied in real time, use smooth(0.999) or the like in the same way.

Usage

_,_ : zita_rev1 : _,_

Test

dm = library("demos.lib");
os = library("oscillators.lib");
zita_rev1_test = os.osc(440), os.osc(442) : dm.zita_rev1;

References


(dm.)vital_rev_demo

Example GUI for vital_rev with all parameters exposed.

Usage

_,_ : vital_rev_demo : _,_

Test

dm = library("demos.lib");
os = library("oscillators.lib");
vital_rev_demo_test = os.osc(440), os.osc(442) : dm.vital_rev_demo;

(dm.)reverbTank_demo

This is a stereo reverb following the "ReverbTank" example in [1], although some parameter ranges and scaling have been adjusted. It is an unofficial version of the Spin Semiconductor® Reverb. Other relevant instructional material can be found in [2-4].

Usage

_,_ : reverbTank_demo : _,_

Test

dm = library("demos.lib");
os = library("oscillators.lib");
reverbTank_demo_test = os.osc(440), os.osc(442) : dm.reverbTank_demo;

References


(dm.)kb_rom_rev1_demo

Keith Barr reverb effect rom_rev1 demo application.

Usage

_,_ : kb_rom_rev1_demo : _,_

Test

dm = library("demos.lib");
os = library("oscillators.lib");
kb_rom_rev1_demo_test = os.osc(440), os.osc(442) : dm.kb_rom_rev1_demo;

(dm.)dattorro_rev_demo

Example GUI for dattorro_rev with all parameters exposed and additional dry/wet and output gain control.

Usage

_,_ : dattorro_rev_demo : _,_

Test

dm = library("demos.lib");
os = library("oscillators.lib");
dattorro_rev_demo_test = os.osc(440), os.osc(442) : dm.dattorro_rev_demo;

(dm.)jprev_demo

Example GUI for jprev with all parameters exposed.

Usage

_,_ : jprev_demo : _,_

Test

dm = library("demos.lib");
os = library("oscillators.lib");
jprev_demo_test = os.osc(440), os.osc(442) : dm.jprev_demo;

(dm.)greyhole_demo

Example GUI for greyhole with all parameters exposed.

Usage

_,_ : greyhole_demo : _,_

Test

dm = library("demos.lib");
os = library("oscillators.lib");
greyhole_demo_test = os.osc(440), os.osc(442) : dm.greyhole_demo;

Generators


(dm.)sawtooth_demo

An application demonstrating the different sawtooth oscillators of Faust.

Usage

sawtooth_demo : _

Test

dm = library("demos.lib");
sawtooth_demo_test = dm.sawtooth_demo;

(dm.)virtual_analog_oscillator_demo

Virtual analog oscillator demo application.

Usage

virtual_analog_oscillator_demo : _

Test

dm = library("demos.lib");
virtual_analog_oscillator_demo_test = dm.virtual_analog_oscillator_demo;

(dm.)oscrs_demo

Simple application demoing filter based oscillators.

Usage

oscrs_demo : _

Test

dm = library("demos.lib");
oscrs_demo_test = dm.oscrs_demo;

(dm.)velvet_noise_demo

Listen to velvet_noise!

Usage

velvet_noise_demo : _

Test

dm = library("demos.lib");
velvet_noise_demo_test = dm.velvet_noise_demo;

(dm.)latch_demo

Illustrate latch operation.

Usage

echo 'import("stdfaust.lib");' > latch_demo.dsp
echo 'process = dm.latch_demo;' >> latch_demo.dsp
faust2octave latch_demo.dsp
Octave:1> plot(faustout);

Test

dm = library("demos.lib");
latch_demo_test = dm.latch_demo;

(dm.)envelopes_demo

Illustrate various envelopes overlaid, including their gate * 1.1.

Usage

echo 'import("stdfaust.lib");' > envelopes_demo.dsp
echo 'process = dm.envelopes_demo;' >> envelopes_demo.dsp
faust2octave envelopes_demo.dsp
Octave:1> plot(faustout);

Test

dm = library("demos.lib");
envelopes_demo_test = dm.envelopes_demo;

(dm.)fft_spectral_level_demo

Make a real-time spectrum analyzer using FFT from analyzers.lib.

Usage

echo 'import("stdfaust.lib");' > fft_spectral_level_demo.dsp
echo 'process = dm.fft_spectral_level_demo;' >> fft_spectral_level_demo.dsp
Mac:
  faust2caqt fft_spectral_level_demo.dsp
  open fft_spectral_level_demo.app
Linux GTK:
  faust2jack fft_spectral_level_demo.dsp
  ./fft_spectral_level_demo
Linux QT:
  faust2jaqt fft_spectral_level_demo.dsp
  ./fft_spectral_level_demo

Test

dm = library("demos.lib");
fft_spectral_level_demo_test = dm.fft_spectral_level_demo(256);

(dm.)reverse_echo_demo(nChans)

Multichannel echo effect with reverse delays.

Usage

echo 'import("stdfaust.lib");' > reverse_echo_demo.dsp
echo 'nChans = 3; // Any integer > 1 should work here' >> reverse_echo_demo.dsp
echo 'process = dm.reverse_echo_demo(nChans);' >> reverse_echo_demo.dsp
Mac:
  faust2caqt reverse_echo_demo.dsp
  open reverse_echo_demo.app
Linux GTK:
  faust2jack reverse_echo_demo.dsp
  ./reverse_echo_demo
Linux QT:
  faust2jaqt reverse_echo_demo.dsp
  ./reverse_echo_demo
Etc.

Test

dm = library("demos.lib");
no = library("noises.lib");
reverse_echo_demo_test = no.noise : dm.reverse_echo_demo(3);

(dm.)pospass_demo

Use Positive-Pass Filter pospass() to frequency-shift a sine tone. First, a real sinusoid is converted to its analytic-signal form using pospass() to filter out its negative frequency component. Next, it is multiplied by a modulating complex sinusoid at the shifting frequency to create the frequency-shifted result. The real and imaginary parts are output to channels 1 & 2. For a more interesting frequency-shifting example, check the "Use Mic" checkbox to replace the input sinusoid by mic input. Note that frequency shifting is not the same as frequency scaling. A frequency-shifted harmonic signal is usually not harmonic. Very small frequency shifts give interesting chirp effects when there is feedback around the frequency shifter.

Usage

echo 'import("stdfaust.lib");' > pospass_demo.dsp
echo 'process = dm.pospass_demo;' >> pospass_demo.dsp
Mac:
  faust2caqt pospass_demo.dsp
  open pospass_demo.app
Linux GTK:
  faust2jack pospass_demo.dsp
  ./pospass_demo
Linux QT:
  faust2jaqt pospass_demo.dsp
  ./pospass_demo
Etc.

Test

dm = library("demos.lib");
os = library("oscillators.lib");
pospass_demo_test = os.osc(440) : dm.pospass_demo;

(dm.)exciter

Psychoacoustic harmonic exciter, with GUI.

Usage

_ : exciter : _

Test

dm = library("demos.lib");
no = library("noises.lib");
exciter_test = no.noise : dm.exciter;

References


(dm.)vocoder_demo

Use example of the vocoder function where an impulse train is used as excitation.

Usage

_ : vocoder_demo : _

Test

dm = library("demos.lib");
os = library("oscillators.lib");
no = library("noises.lib");
vocoder_demo_test = no.noise : dm.vocoder_demo;

(dm.)colored_noise_demo

A coloured noise signal generator.

Usage

colored_noise_demo : _

Test

dm = library("demos.lib");
colored_noise_demo_test = dm.colored_noise_demo;