Faust Libraries
Faust Libraries
January 4, 2017
Contents
Faust Libraries 15
Using the Faust Libraries . . . . . . . . . . . . . . . . . . . . . . . . . 15
Contributing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
New Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
New Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
General Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Coding Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Library Import . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Demo Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Standard Functions . . . . . . . . . . . . . . . . . . . . . . . . 21
The question of licensing/authoring/copyrigth . . . . . . . . . . . . . . 21
Standard Functions 21
Analysis Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Basic Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Envelope Generators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Oscillators/Sound Generators . . . . . . . . . . . . . . . . . . . . . . . 24
Synths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1
[Link] 25
Amplitude Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
amp_follower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
amp_follower_ud . . . . . . . . . . . . . . . . . . . . . . . . . . 26
amp_follower_ar . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Spectrum-Analyzers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
mth_octave_analyzer . . . . . . . . . . . . . . . . . . . . . . . . 28
Mth-Octave Spectral Level . . . . . . . . . . . . . . . . . . . . . . . . 28
mth_octave_spectral_level6e . . . . . . . . . . . . . . . . . . 29
[third|half]_octave_[analyzer|filterbank] . . . . . . . . . 29
Arbritary-Crossover Filter-Banks and Spectrum Analyzers . . . . . . . 29
analyzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
[Link] 30
Conversion Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
samp2sec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
sec2samp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
db2linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
linear2db . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
lin2LogGain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
log2LinGain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
tau2pole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
pole2tau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
midikey2hz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
pianokey2hz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
hz2pianokey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Counters and Time/Tempo Tools . . . . . . . . . . . . . . . . . . . . . 35
countdown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
countup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
sweep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2
tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
period . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
pulse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
pulsen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
beat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
pulse_countup . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
pulse_countdown . . . . . . . . . . . . . . . . . . . . . . . . . . 38
pulse_countup_loop . . . . . . . . . . . . . . . . . . . . . . . . 38
pulse_countdown_loop . . . . . . . . . . . . . . . . . . . . . . . 39
Array Processing/Pattern Matching . . . . . . . . . . . . . . . . . . . 39
count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
take . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
subseq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Selectors (Conditions) . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
selector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
selectn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
select2stereo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Other . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
latch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
sAndH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
peakhold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
peakholder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
impulsify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
automat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
bpf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
bypass1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
bypass2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
toggle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
on_and_off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
selectoutn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3
[Link] 47
Functions Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
compressor_mono . . . . . . . . . . . . . . . . . . . . . . . . . . 47
compressor_stereo . . . . . . . . . . . . . . . . . . . . . . . . . 48
limiter_1176_R4_mono . . . . . . . . . . . . . . . . . . . . . . . 48
limiter_1176_R4_stereo . . . . . . . . . . . . . . . . . . . . . . 49
[Link] 50
Basic Delay Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
fdelay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
sdelay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Lagrange Interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
fdelaylti and fdelayltv . . . . . . . . . . . . . . . . . . . . . . 51
fdelay[n] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Thiran Allpass Interpolation . . . . . . . . . . . . . . . . . . . . . . . 52
fdelay[n]a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
[Link] 53
Analyzers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
mth_octave_spectral_level_demo . . . . . . . . . . . . . . . . 53
Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
parametric_eq_demo . . . . . . . . . . . . . . . . . . . . . . . . 54
spectral_tilt_demo . . . . . . . . . . . . . . . . . . . . . . . . 54
mth_octave_filterbank_demo and filterbank_demo . . . . . . 54
Effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
cubicnl_demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
gate_demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
compressor_demo . . . . . . . . . . . . . . . . . . . . . . . . . . 55
exciter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
moog_vcf_demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
wah4_demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4
crybaby_demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
vocoder_demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
flanger_demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
phaser2_demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
freeverb_demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
stereo_reverb_tester . . . . . . . . . . . . . . . . . . . . . . . 57
fdnrev0_demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
zita_rev_fdn_demo . . . . . . . . . . . . . . . . . . . . . . . . . 58
zita_rev1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Generators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
sawtooth_demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
virtual_analog_oscillator_demo . . . . . . . . . . . . . . . . 59
oscrs_demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
[Link] 60
Functions Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
smoothEnvelope . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
ar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
asr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
adsr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
[Link] 62
Basic Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
zero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
pole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
integrator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
dcblockerat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
dcblocker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Comb Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
ff_comb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
ff_fcomb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
ffcombfilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5
fb_comb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
fb_fcomb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
rev1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
fbcombfilter and ffbcombfilter . . . . . . . . . . . . . . . . . 67
allpass_comb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
allpass_fcomb . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
rev2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
allpass_fcomb5 and allpass_fcomb1a . . . . . . . . . . . . . . 69
Direct-Form Digital Filter Sections . . . . . . . . . . . . . . . . . . . . 69
iir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
fir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
conv and convN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
tf1, tf2 and tf3 . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
notchw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Direct-Form Second-Order Biquad Sections . . . . . . . . . . . . . . . 71
tf21, tf22, tf22t and tf21t . . . . . . . . . . . . . . . . . . . . 72
Ladder/Lattice Digital Filters . . . . . . . . . . . . . . . . . . . . . . . 72
av2sv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
bvav2nuv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
iir_lat2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
allpassnt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
iir_kl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
allpassnklt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
iir_lat1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
allpassn1mt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
iir_nl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
allpassnnlt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Useful Special Cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
tf2np . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
wgr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
nlf2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6
apnl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Ladder/Lattice Allpass Filters . . . . . . . . . . . . . . . . . . . . . . 79
allpassn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
allpassnn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
allpasskl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
allpass1m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Digital Filter Sections Specified as Analog Filter Sections . . . . . . . 81
tf2s and tf2snp . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
tf3slf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
tf1s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
tf2sb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
tf1sb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Simple Resonator Filters . . . . . . . . . . . . . . . . . . . . . . . . . . 83
resonlp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
resonhp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
resonbp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Butterworth Lowpass/Highpass Filters . . . . . . . . . . . . . . . . . . 85
lowpass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
highpass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
lowpass0_highpass1 . . . . . . . . . . . . . . . . . . . . . . . . 86
Special Filter-Bank Delay-Equalizing Allpass Filters . . . . . . . . . . 86
lowpass_plus|minus_highpass . . . . . . . . . . . . . . . . . . . 86
Elliptic (Cauer) Lowpass Filters . . . . . . . . . . . . . . . . . . . . . 86
lowpass3e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
lowpass6e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Elliptic Highpass Filters . . . . . . . . . . . . . . . . . . . . . . . . . . 87
highpass3e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
highpass6e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Butterworth Bandpass/Bandstop Filters . . . . . . . . . . . . . . . . . 88
bandpass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
bandstop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
7
Elliptic Bandpass Filters . . . . . . . . . . . . . . . . . . . . . . . . . . 89
bandpass6e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
bandpass12e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Parametric Equalizers (Shelf, Peaking) . . . . . . . . . . . . . . . . . . 89
low_shelf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
high_shelf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
peak_eq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
peak_eq_cq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
peak_eq_rm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
spectral_tilt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
levelfilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
levelfilterN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Mth-Octave Filter-Banks . . . . . . . . . . . . . . . . . . . . . . . . . 94
mth_octave_filterbank[n] . . . . . . . . . . . . . . . . . . . . 95
Arbritary-Crossover Filter-Banks and Spectrum Analyzers . . . . . . . 96
filterbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
filterbanki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
[Link] 97
encoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
decoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
decoderStereo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Optimization Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 99
optimBasic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
optimMaxRe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
optimInPhase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
wider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
rotate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
8
[Link] 101
Functions Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
SR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
BS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
PI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
FTZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
neg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
sub(x,y) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
inv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
cbrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
hypot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
ldexp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
scalb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
log1p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
logb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
ilogb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
log2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
expm1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
acosh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
asinh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
atanh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
sinh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
cosh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
tanh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
erf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
erfc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
lgamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
J0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
J1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Jn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
9
Y0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Y1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Yn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
fabs, fmax, fmin . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
np2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
frac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
isnan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
chebychev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
chebychevpoly . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
diffn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
[Link] 112
Dynamic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
cubicnl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
gate_mono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
gate_stereo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
speakerbp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
piano_dispersion_filter . . . . . . . . . . . . . . . . . . . . . 115
stereo_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Time Based . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Pitch Shifting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
transpose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Meshes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
mesh_square . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
[Link] 118
Functions Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
noise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
multirandom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
multinoise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
10
noises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
pink_noise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
pink_noise_vm . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
lfnoise, lfnoise0 and lfnoiseN . . . . . . . . . . . . . . . . . 121
[Link] 121
Wave-Table-Based Oscillators . . . . . . . . . . . . . . . . . . . . . . . 121
sinwaveform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
coswaveform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
phasor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
oscsin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
osccos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
oscp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
osci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
LFOs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
lf_imptrain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
lf_pulsetrainpos . . . . . . . . . . . . . . . . . . . . . . . . . . 124
lf_squarewavepos . . . . . . . . . . . . . . . . . . . . . . . . . . 125
lf_squarewave . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
lf_trianglepos . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
lf_triangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Low Frequency Sawtooths . . . . . . . . . . . . . . . . . . . . . . . . . 126
lf_rawsaw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
lf_sawpos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
lf_saw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
lf_sawpos_phase . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Bandlimited Sawtooth . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
sawN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
sawNp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
saw2dpw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
saw3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
11
sawtooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
saw2f2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
saw2f4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Bandlimited Pulse, Square, and Impulse Trains . . . . . . . . . . . . . 130
pulsetrainN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
pulsetrain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
squareN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
square . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
impulse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
imptrainN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
imptrain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
triangleN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
triangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Filter-Based Oscillators . . . . . . . . . . . . . . . . . . . . . . . . . . 133
oscb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
oscrq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
oscrs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
oscrc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
osc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
oscs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Waveguide-Resonator-Based Osccilators . . . . . . . . . . . . . . . . . 136
oscw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
oscws . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
oscwq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
oscw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
[Link] 138
Functions Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
flanger_mono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
flanger_stereo . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
phaser2_mono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
phaser2_stereo . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
12
[Link] 141
chain(A:B:. . . ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Requires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
input(x) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
output() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
terminations(a,b,c) . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Requires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
fullTerminations(a,b,c) . . . . . . . . . . . . . . . . . . . . . . . . 143
Requires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
leftTermination(a,b) . . . . . . . . . . . . . . . . . . . . . . . . . 143
Requires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
rightTermination(b,c) . . . . . . . . . . . . . . . . . . . . . . . . 144
Requires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
waveguide(nMax,n) . . . . . . . . . . . . . . . . . . . . . . . . . . 144
idealString(length,reflexion,xPosition,x) . . . . . . . . . . . . . . 145
[Link] 145
Functions Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
jcrev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
satrev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
mono_freeverb . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
stereo_freeverb . . . . . . . . . . . . . . . . . . . . . . . . . . 147
fdnrev0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
zita_rev_fdn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
zita_rev1_stereo . . . . . . . . . . . . . . . . . . . . . . . . . . 148
zita_rev1_ambi . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
[Link] 149
Functions Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
cross . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
crossnn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
crossn1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
13
interleave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
butterfly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
hadamard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
recursivize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
[Link] 152
Functions Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
interpolate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
smooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
smoo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
polySmooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
bsmooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
lag_ud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
dot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
[Link] 156
panner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
spat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
stereoize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
[Link] 157
popFilterPerc . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
dubDub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
sawTrombone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
combString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
additiveDrum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
fm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
14
[Link] 160
Functions Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
moog_vcf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
moog_vcf_2b[n] . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
wah4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
autowah . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
crybaby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
vocoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Faust Libraries
NOTE: this documentation was automatically generated.
This page provides information on how to use the Faust libraries.
The /libraries folder contains the different Faust libraries. If you wish to add
your own functions to this library collection, you can refer to the Contributing
section providing a set of coding conventions.
WARNING: These libraries replace the old Faust libraries. They are still being
beta tested so you might encounter bugs while using them. If your codes still
use the old Faust libraries, you might want to try to use Bart Brouns script
that automatically makes an old Faust code compatible with the new libraries:
[Link] If
you find a bug, please report it at rmichon_at_ccrma_dot_stanford_dot_edu.
Thanks ;)!
The easiest and most standard way to use the Faust libraries is to import
[Link] in your Faust code:
import("[Link]");
This will give you access to all the Faust libraries through a series of environments:
sf: [Link]
an: [Link]
ba: [Link]
co: [Link]
15
de: [Link]
dm: [Link]
en: [Link]
fi: [Link]
ho: [Link]
ma: [Link]
ef: [Link]
os: [Link]
no: [Link]
pf: [Link]
pm: [Link]
re: [Link]
ro: [Link]
si: [Link]
sp: [Link]
sy: [Link]
ve: [Link]
import("[Link]");
process = [Link](440);
import("[Link]");
process = [Link](440);
os = library("[Link]");
process = [Link](440);
Finally, libraries can be simply imported in the Faust code (not recommended):
import("[Link]");
process = osc(440);
16
Contributing
If you wish to add a function to any of these libraries or if you plan to add a
new library, make sure that you follow the following conventions:
New Functions
//-----------------functionName--------------------
// Description
//
// #### Usage
//
// ```
// Usage Example
// ```
//
// Where:
//
// * argument1: argument 1 description
//-------------------------------------------------
New Libraries
17
//############### libraryName ##################
// Description
//
// * Section Name 1
// * Section Name 2
// * ...
//
// It should be used using the `[...]` environment:
//
// ```
// [...] = library("libraryName");
// process = [...].functionCall;
// ```
//
// Another option is to import `[Link]` which already contains the `[...]`
// environment:
//
// ```
// import("[Link]");
// process = [...].functionCall;
// ```
//##############################################
General Organization
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
18
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link] (not documented but example in /examples/misc)
[Link] (not documented but example in /examples/misc)
[Link]
Other deprecated libraries such as [Link], etc. are present but are not
documented to not confuse new users.
The doumentation of each library can be found in /documentation/[Link]
or in /documentation/[Link].
The /examples directory contains all the examples from the /examples folder of
the Faust distribution as well as new ones. Most of them were updated to reflect
the coding conventions described in the next section. Examples are organized
by types in different folders. The /old folder contains examples that are fully
deprecated, probably because they were integrated to the libraries and fully
rewritten (see [Link] for example). Examples using deprecated libraries
were integrated to the general tree but a warning comment was added at their
beginning to point readers to the right library and function.
Coding Conventions
Documentation
19
Library Import
an = library("[Link]");
ba = library("[Link]");
co = library("[Link]");
de = library("[Link]");
dm = library("[Link]");
en = library("[Link]");
fi = library("[Link]");
ho = library("[Link]");
ma = library("[Link]");
ef = library("[Link]");
os = library("[Link]");
no = library("[Link]");
pf = library("[Link]");
pm = library("[Link]");
re = library("[Link]");
ro = library("[Link]");
sp = library("[Link]");
si = library("[Link]");
sy = library("[Link]");
ve = library("[Link]");
For example, if we wanted to use the smooth function which is now declared in
[Link], we would do the following:
import("[Link]");
process = [Link](0.999);
This standard is only used within the libraries: nothing prevents coders to still
import [Link] directly and call smooth without ro., etc.
Demo Functions
Demo functions are placed in [Link] and have a built-in user interface
(UI). Their name ends with the _demo suffix. Each of these function have a .dsp
file associated to them in the /examples folder.
20
Any function containing UI elements should be placed in this library and respect
these standards.
Standard Functions
Standard functions are here to simplify the life of new (or not so new) Faust
coders. They are declared in /libraries/doc/[Link] and
allow to point programmers to preferred functions to carry out a specific task. For
example, there are many different types of lowpass filters declared in [Link]
and only one of them is considered to be standard, etc.
Now that Faust libraries are not author specific, each function will be able to
have its own licence/author declaration. This means that some libraries wont
have a global licence/author/copyright declaration like it used to be the case.
Standard Functions
Dozens of functions are implemented in the Faust libraries and many of them are
very specialized and not useful to beginners or to people who only need to use
Faust for basic applications. This section offers an index organized by categories
of the standard Faust functions (basic filters, effects, synthesizers, etc.). This
index only contains functions without a user interface (UI). Faust functions with
a built-in UI can be found in [Link].
Analysis Tools
Basic Elements
21
Function Type Function Name Description
Conversion
Effects
22
Function Type Function Name Description
Envelope Generators
Filters
23
Function Type Function Name Description
Oscillators/Sound Generators
24
Function Type Function Name Description
Synths
[Link]
This library contains a collection of tools to analyze signals.
It should be used using the an environment:
an = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
25
Amplitude Tracking
amp_follower
Classic analog audio envelope follower with infinitely fast rise and exponential
decay. The amplitude envelope instantaneously follows the absolute value going
up, but then floats down exponentially. amp_follower is a standard Faust
function.
Usage
_ : amp_follower(rel) : _
Where:
Reference
amp_follower_ud
Envelope follower with different up and down time-constants (also called a peak
detector).
Usage
_ : amp_follower_ud(att,rel) : _
Where:
Note We assume rel >> att. Otherwise, consider rel ~ max(rel,att). For
audio, att is normally faster (smaller) than rel (e.g., 0.001 and 0.01). Use
amp_follower_ar below to remove this restriction.
26
Reference
amp_follower_ar
Envelope follower with independent attack and release times. The release can
be shorter than the attack (unlike in amp_follower_ud above).
Usage
_ : amp_follower_ar(att,rel) : _;
Spectrum-Analyzers
Spectrum-analyzers split the input signal into a bank of parallel signals, one
for each spectral band. They are related to the Mth-Octave Filter-Banks in
[Link]. The documentation of this library contains more details about
the implementation. The parameters are:
27
Increasing Channel Isolation Go to higher filter orders - see Regalia et al.
or Vaidyanathan (cited below) regarding the construction of more aggressive
recursive filter-banks using elliptic or Chebyshev prototype filters.
References
mth_octave_analyzer
Usage
Where:
Spectral Level: Display (in bar graphs) the average signal level in each spectral
band.
28
mth_octave_spectral_level6e
Usage:
_ : mth_octave_spectral_level6e(M,ftop,NBands,tau,dB_offset) : _;
Where:
mth_octave_spectral_level_default = mth_octave_spectral_level6e;
spectral_level = mth_octave_spectral_level(2,10000,20);
[third|half]_octave_[analyzer|filterbank]
third_octave_analyzer(N) = mth_octave_analyzer_default(3,10000,N);
third_octave_filterbank(N) = mth_octave_filterbank_default(3,10000,N);
half_octave_analyzer(N) = mth_octave_analyzer_default(2,10000,N);
half_octave_filterbank(N) = mth_octave_filterbank_default(2,10000,N);
octave_filterbank(N) = mth_octave_filterbank_default(1,10000,N);
octave_analyzer(N) = mth_octave_analyzer_default(1,10000,N);
29
analyzer
Analyzer.
Usage
Where:
_ : analyzer(3,(fc1,fc2)) : _,_,_
[Link]
A library of basic elements for Faust organized in 5 sections:
Conversion Tools
Counters and Time/Tempo Tools
Array Processing/Pattern Matching
Selectors (Conditions)
Other Tools (Misc)
ba = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
30
Conversion Tools
samp2sec
Usage
samp2sec(n) : _
Where:
n: number of samples
sec2samp
Usage
sec2samp(d) : _
Where:
d: duration in seconds
db2linear
31
Usage
db2linear(l) : _
Where:
l: loudness in dB
linear2db
Usage
linear2db(g) : _
Where:
g: a linear gain
lin2LogGain
Usage
_ : lin2LogGain : _
log2LinGain
32
Usage
_ : log2LinGain : _
tau2pole
Returns a real pole giving exponential decay. Note that t60 (time to decay 60
dB) is ~6.91 time constants. tau2pole is a standard Faust function.
Usage
_ : smooth(tau2pole(tau)) : _
Where:
pole2tau
Usage
pole2tau(pole) : _
Where:
midikey2hz
33
Usage
midikey2hz(mk) : _
Where:
pianokey2hz
Usage
pianokey2hz(pk) : _
Where:
hz2pianokey
Usage
hz2pianokey(f) : _
Where:
f: frequency in Hz
34
Counters and Time/Tempo Tools
countdown
Starts counting down from n included to 0. While trig is 1 the output is n. The
countdown starts with the transition of trig from 1 to 0. At the end of the
countdown the output value will remain at 0 until the next trig. countdown is a
standard Faust function.
Usage
countdown(n,trig) : _
Where:
countup
Usage
countup(n,trig) : _
Where:
sweep
35
Usage
sweep(period,run) : _
time
A simple timer that counts every samples from the beginning of the process.
time is a standard Faust function.
Usage
time : _
tempo
Usage
tempo(t) : _
Where:
t: tempo in BPM
period
Usage
period(p) : _
Where:
36
pulse
Usage
pulse(p) : _
Where:
pulsen
Usage
pulsen(n,p) : _
Where:
beat
Usage
beat(t) : _
Where:
t: tempo in BPM
37
pulse_countup
Starts counting up pulses. While trig is 1 the output is counting up, while trig
is 0 the counter is reset to 0.
Usage
_ : pulse_countup(trig) : _
Where:
pulse_countdown
Starts counting down pulses. While trig is 1 the output is counting down, while
trig is 0 the counter is reset to 0.
Usage
_ : pulse_countdown(trig) : _
Where:
pulse_countup_loop
38
Usage
_ : pulse_countup_loop(n,trig) : _
Where:
pulse_countdown_loop
Starts counting down pulses from 0 to n included. While trig is 1 the output
is counting down, while trig is 0 the counter is reset to 0. At the end of the
countdown (n) the output value will be reset to 0.
Usage
_ : pulse_coundown_loop(n,trig) : _
Where:
Usage
count(l)
count ((10,20,30,40)) -> 4
Where:
l: list of elements
39
take
Usage
take(e,l)
take(3,(10,20,30,40)) -> 30
Where:
p: position (starting at 1)
l: list of elements
subseq
Usage
subseq(l, p, n)
subseq((10,20,30,40,50,60), 1, 3) -> (20,30,40)
subseq((10,20,30,40,50,60), 4, 1) -> 50
Where:
l: list
p: start point (0: begin of list)
n: number of elements
Note: Faust doesnt have proper lists. Lists are simulated with parallel com-
positions and there is no empty list
Selectors (Conditions)
if
40
Usage
if(c, t, e) : _
Where:
c: condition
t: signal selected while c is true
e: signal selected while c is false
selector
Usage
selector(i,n)
_,_,_,_ : selector(2,4) : _ // selects the 3rd input among 4
Where:
selectn
Usage
selectn(N,i)
_,_,_,_ : selectn(4,2) : _ // selects the 3rd input among 4
Where:
41
Example test program
N=64;
process = par(n,N, (par(i,N,i) : selectn(N,n)));
select2stereo
Usage
Where:
Other
latch
Usage
_ : latch(clocksig) : _
Where:
sAndH
42
Usage
_ : sAndH(t) : _
Where:
peakhold
Usage
_ : peakhold(mode) : _;
Where:
mode means: 0 - Pass through. A single sample 0 trigger will work as a reset. 1 -
Track and hold max value.
peakholder
Usage
_ : peakholder(holdtime) : _;
impulsify
Turns the signal from a button into an impulse (1,0,0,. . . when button turns
on). impulsify is a standard Faust function.
43
Usage
button("gate") : impulsify ;
automat
Usage
bpf
A minimal break-point function must contain at least a start and an end point :
f = [Link](x0,y0) : [Link](x1,y1);
In any case the x_{i} must be in increasing order (for all i, x_{i} < x_{i+1}).
For example the following definition :
44
f(x) = y_{0} when x < x_{0}
f(x) = y_{n} when x > x_{n}
f(x) = y_{i} + (y_{i+1}-y_{i})*(x-x_{i})/(x_{i+1}-x_{i}) when
x_{i} <= x and x < x_{i+1}
bypass1
Usage
_ : bypass1(bpc,e) : _
Where:
bypass2
Usage
Where:
45
toggle
Usage
_ : toggle : _
Examples
on_and_off
Usage
_ , _ : on_and_off : _
Example
selectoutn
Usage
_ : selectoutn(n, s) : _,_,...n
Where:
46
Example
[Link]
A library of compressor effects.
It should be used using the co environment:
co = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
Functions Reference
compressor_mono
Usage
_ : compressor_mono(ratio,thresh,att,rel) : _
Where:
47
References
[Link]
[Link]
[Link]
Albert Graefs faust2pd/examples/synth/compressor_.dsp
More features: [Link]
compressor_stereo
Usage
Where:
References
[Link]
[Link]
[Link]
Albert Graefs faust2pd/examples/synth/compressor_.dsp
More features: [Link]
limiter_1176_R4_mono
48
desirable (soft limiting). This example is intended to get you started using
compressor_* as a limiter, so all parameters are hardwired to nominal values here.
Ratios: 4 (moderate compression), 8 (severe compression), 12 (mild limiting), or
20 to 1 (hard limiting) Att: 20-800 MICROseconds (Note: scaled by ratio in the
1176) Rel: 50-1100 ms (Note: scaled by ratio in the 1176) Mike Shipley likes 4:1
(Grammy-winning mixer for Queen, Tom Petty, etc.) Faster attack gives more
bite (e.g. on vocals) He hears a bright, clear eq effect as well (not implemented
here) limiter_1176_R4_mono is a standard Faust function.
Usage
_ : limiter_1176_R4_mono : _;
Reference: [Link]
limiter_1176_R4_stereo
Usage
Reference: [Link]
49
[Link]
This library contains a collection of delay functions.
It should be used using the de environment:
de = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
delay
Usage
_ : delay(n,d) : _
Where:
fdelay
50
Usage
_ : fdelay(n,d) : _
Where:
sdelay
s(mooth)delay: a mono delay that doesnt click and doesnt transpose when the
delay time is changed.
Usage
_ : sdelay(N,it,dt) : _
Where :
Lagrange Interpolation
fdelaylti and fdelayltv
Usage
51
References
[Link]
Timo I. Laakso et al., Splitting the Unit Delay - Tools for Fractional
Delay Filter Design, IEEE Signal Processing Magazine, vol. 13, no. 1,
pp. 30-60, Jan 1996.
Philippe Depalle and Stephan Tassart, Fractional Delay Lines using
Lagrange Interpolators, ICMC Proceedings, pp. 341-343, 1996.
fdelay[n]
For convenience, fdelay1, fdelay2, fdelay3, fdelay4, fdelay5 are also avail-
able where n is the order of the interpolation.
Reference [Link]
[Link]
fdelay[n]a
Usage
N=1,2,3, or 4 is the order of the Thiran interpolation filter, and the delay
argument is at least N - 1/2.
52
Note The interpolated delay should not be less than N - 1/2. (The allpass
delay ranges from N - 1/2 to N + 1/2.) This constraint can be alleviated by
altering the code, but be aware that allpass filters approach zero delay by means
of pole-zero cancellations. The delay range [N-1/2,N+1/2] is not optimal. What
is?
Delay arguments too small will produce an UNSTABLE allpass!
Because allpass interpolation is recursive, it is not as robust as Lagrange inter-
polation under time-varying conditions. (You may hear clicks when changing
the delay rapidly.)
First-order allpass interpolation, delay d in [0.5,1.5]
[Link]
This library contains a set of demo functions based on examples located in the
/examples folder.
It should be used using the dm environment:
dm = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
Analyzers
mth_octave_spectral_level_demo
Usage
_ : mth_octave_spectral_level_demo(BandsPerOctave);
_ : spectral_level_demo : _; // 2/3 octave
53
Filters
parametric_eq_demo
Usage:
_ : parametric_eq_demo : _ ;
spectral_tilt_demo
Usage
_ : spectral_tilt_demo(N) : _ ;
Where:
Usage
_ : mth_octave_filterbank_demo(M) : _
_ : filterbank_demo : _
Where:
54
Effects
cubicnl_demo
Usage:
_ : cubicnl_demo : _;
gate_demo
Usage
compressor_demo
Usage
exciter
Usage
_ : exciter : _
55
References
[Link]
[Link]
Harmonic_Exciter
moog_vcf_demo
Usage
_ : moog_vcf_demo : _;
wah4_demo
Usage
_ : wah4_demo : _;
crybaby_demo
Usage
_ : crybaby_demo : _ ;
vocoder_demo
Use example of the vocoder function where an impulse train is used as excitation.
56
Usage
_ : vocoder_demo : _;
flanger_demo
Usage
phaser2_demo
Usage
freeverb_demo
Usage
stereo_reverb_tester
57
Usage
_ : stereo_reverb_tester : _
fdnrev0_demo
Usage
Where:
zita_rev_fdn_demo
Usage
zita_rev1
58
Usage
Reference [Link]
html
Generators
sawtooth_demo
Usage
sawtooth_demo : _
virtual_analog_oscillator_demo
Usage
virtual_analog_oscillator_demo : _
oscrs_demo
Usage
oscrs_demo : _
59
[Link]
This library contains a collection of envelope generators.
It should be used using the en environment:
en = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
Functions Reference
smoothEnvelope
Usage
smoothEnvelope(ar,t) : _
ar
Usage
ar(a,r,t) : _
Where:
60
a: attack (sec)
r: release (sec)
t: trigger signal (0 or 1)
asr
Usage
asr(a,s,r,t) : _
Where:
adsr
Usage
adsr(a,d,s,r,t) : _
Where:
61
[Link]
A library of filters and of more advanced filter-based sound processor organized
in 18 sections:
Basic Filters
Comb Filters
Direct-Form Digital Filter Sections
Direct-Form Second-Order Biquad Sections
Ladder/Lattice Digital Filters
Useful Special Cases
Ladder/Lattice Allpass Filters
Digital Filter Sections Specified as Analog Filter Sections
Simple Resonator Filters
Butterworth Lowpass/Highpass Filters
Special Filter-Bank Delay-Equalizing Allpass Filters
Elliptic (Cauer) Lowpass Filters
Elliptic Highpass Filters
Butterworth Bandpass/Bandstop Filters
Elliptic Bandpass Filters
Parametric Equalizers (Shelf, Peaking)
Mth-Octave Filter-Banks
Arbritary-Crossover Filter-Banks and Spectrum Analyzers
fi = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
Basic Filters
zero
62
Usage
_ : zero(z) : _
Where:
Reference [Link]
pole
One pole filter. Could also be called a leaky integrator. Difference equation:
y(n) = x(n) + p * y(n-1).
Usage
_ : pole(z) : _
Where:
Reference [Link]
integrator
dcblockerat
63
Usage
_ : dcblockerat(fb) : _
Where:
Reference [Link]
html
dcblocker
DC blocker. Default dc blocker has -3dB point near 35 Hz (at 44.1 kHz) and
high-frequency gain near 1.0025 (due to no scaling). dcblocker is as standard
Faust function.
Usage
_ : dcblocker : _
Comb Filters
ff_comb
Usage
_ : ff_comb(maxdel,intdel,b0,bM) : _
Where:
64
Reference [Link]
[Link]
ff_fcomb
Feed-Forward Comb Filter. Note that ff_fcomb takes floating-point delays (uses
fdelay internally). ff_fcomb is a standard Faust function.
Usage
_ : ff_fcomb(maxdel,del,b0,bM) : _
Where:
Reference [Link]
[Link]
ffcombfilter
fb_comb
65
Usage
_ : fb_comb(maxdel,intdel,b0,aN) : _
Where:
Reference [Link]
html
fb_fcomb
Usage
_ : fb_fcomb(maxdel,del,b0,aN) : _
Where:
Reference [Link]
html
66
rev1
Usage
_ : fbcombfilter(maxdel,intdel,g) : _
_ : ffbcombfilter(maxdel,del,g) : _
Where:
Reference [Link]
html
allpass_comb
67
Usage
_ : allpass_comb (maxdel,intdel,aN) : _
Where:
References
[Link]
[Link]
[Link]
allpass_fcomb
Usage
_ : allpass_comb (maxdel,intdel,aN) : _
_ : allpass_fcomb(maxdel,del,aN) : _
Where:
68
References
[Link]
[Link]
[Link]
rev2
Usage
_ : iir(bcoeffs,acoeffs) : _
Where:
69
Reference [Link]
html
fir
Usage
_ : fir(bv) : _
bv = .2,.2,.2,.2,.2;
process = noise : fir(bv);
Usage
70
tf1, tf2 and tf3
Usage
_ : tf1(b0,b1,a1) : _
_ : tf2(b0,b1,b2,a1,a2) : _
_ : tf3(b0,b1,b2,b3,a1,a2,a3) : _
Where:
a: the poles
b: the zeros
Reference [Link]
notchw
Simple notch filter based on a biquad (tf2). notchw is a standard Faust function.
Usage:
_ : notchw(width,freq) : _
Where:
Reference [Link]
Allpass_Filters.html
71
Reference [Link]
html
Usage
_ : tf21(b0,b1,b2,a1,a2) : _
_ : tf22(b0,b1,b2,a1,a2) : _
_ : tf22t(b0,b1,b2,a1,a2) : _
_ : tf21t(b0,b1,b2,a1,a2) : _
Where:
a: the poles
b: the zeros
Reference [Link]
Ladder and lattice digital filters generally have superior numerical properties
relative to direct-form digital filters. They can be derived from digital waveguide
filters, which gives them a physical interpretation.
av2sv
72
Usage
sv = av2sv(av)
Where:
Reference [Link]
html (where reflection coefficients are denoted by k rather than s).
bvav2nuv
Usage
nuv = bvav2nuv(bv,av)
Where:
where nui is the ith tap coefficient, bi is the coefficient of z(-i) in the filter
numerator, ai is the coefficient of z(-i) in the filter denominator
iir_lat2
73
Usage
_ : iir_lat2(bv,av) : _
Where:
allpassnt
Usage
_ : allpassnt(n,sv) : _
Where:
iir_kl
Usage
_ : iir_kl(bv,av) : _
Where:
74
allpassnklt
Usage:
_ : allpassklt(n,sv) : _
Where:
iir_lat1
Usage
_ : iir_lat1(bv,av) : _
Where:
allpassn1mt
Usage
_ : allpassn1mt(n,sv) : _
Where:
75
iir_nl
Usage
_ : iir_nl(bv,av) : _
Where:
References
allpassnnlt
Usage:
_ : allpassnnlt(n,sv) : _
Where:
References
76
Useful Special Cases
tf2np
Usage
_ : tf2np(b0,b1,b2,a1,a2) : _
Where:
a: the poles
b: the zeros
wgr
Usage
_ : wgr(f,r) : _
Where:
References
[Link]
[Link]
[Link]
html
77
nlf2
Usage
_ : nlf2(f,r) : _
Where:
Reference [Link]
Waveguide_Filters.html
apnl
Passive Nonlinear Allpass based on Pierce switching springs idea. Switch between
allpass coefficient a1 and a2 at signal zero crossings.
Usage
_ : apnl(a1,a2) : _
Where:
Reference
78
Ladder/Lattice Allpass Filters
An allpass filter has gain 1 at every frequency, but variable phase. Ladder/lattice
allpass filters are specified by reflection coefficients. They are defined here as
nested allpass filters, hence the names allpassn*.
References
[Link]
html
[Link]
Linear Prediction of Speech, Markel and Gray, Springer Verlag, 1976
allpassn
Usage:
_ : allpassn(n,sv) : _
Where:
References
allpassnn
Normalized form - four multiplies and two adds per section, but coefficients can
be time varying and nonlinear without parametric amplification (modulation
of signal energy).
79
Usage:
_ : allpassnn(n,tv) : _
Where:
allpasskl
Kelly-Lochbaum form - four multiplies and two adds per section, but all signals
have an immediate physical interpretation as traveling pressure waves, etc.
Usage:
_ : allpassnkl(n,sv) : _
Where:
allpass1m
One-multiply form - one multiply and three adds per section. Normally the most
efficient in special-purpose hardware.
Usage:
_ : allpassn1m(n,sv) : _
Where:
80
Digital Filter Sections Specified as Analog Filter Sections
tf2s and tf2snp
Usage
_ : tf2s(b2,b1,b0,a1,a0,w1) : _
Where:
b2 s^2 + b1 s + b0
H(s) = --------------------
s^2 + a1 s + a0
1
H(s) = -----------------
s^2 + a1 s + 1
Reference [Link]
html
tf3slf
Analogous to tf2s above, but third order, and using the typical low-frequency-
matching bilinear-transform constant 2/T (lf series) instead of the specific-
frequency-matching value used in tf2s and tf1s. Note the lack of a w1 argument.
81
Usage
_ : tf3slf(b3,b2,b1,b0,a3,a2,a1,a0) : _
tf1s
Usage
tf1s(b1,b0,a0,w1)
Where:
b1 s + b0
H(s) = - s + a0
and w1 is the desired digital frequency (in radians/second) corresponding to
analog frequency 1 rad/sec (i.e., s = j).
H(s) = - s + 1
so b0 = a0 = 1 and b1 = 0. Therefore, a DIGITAL first-order Butterworth
lowpass with gain -3dB at SR/4 is specified as
Reference [Link]
html
82
tf2sb
Usage
_ : tf2sb(b2,b1,b0,a1,a0,w1,wc) : _
tf1sb
Usage
_ : tf1sb(b1,b0,a0,w1,wc) : _
resonlp
Usage
_ : resonlp(fc,Q,gain) : _
_ : resonhp(fc,Q,gain) : _
_ : resonbp(fc,Q,gain) : _
83
Where:
resonhp
Usage
_ : resonlp(fc,Q,gain) : _
_ : resonhp(fc,Q,gain) : _
_ : resonbp(fc,Q,gain) : _
Where:
resonbp
Usage
_ : resonlp(fc,Q,gain) : _
_ : resonhp(fc,Q,gain) : _
_ : resonbp(fc,Q,gain) : _
Where:
84
Butterworth Lowpass/Highpass Filters
lowpass
Usage
_ : lowpass(N,fc) : _
Where:
References
[Link]
html
butter function in Octave ("[z,p,g] = butter(N,1,s);")
highpass
Usage
_ : highpass(N,fc) : _
Where:
References
[Link]
html
butter function in Octave ("[z,p,g] = butter(N,1,s);")
85
lowpass0_highpass1
TODO
These special allpass filters are needed by filterbank et al. below. They are
equivalent to (lowpass(N,fc) +|- highpass(N,fc))/2, but with canceling pole-
zero pairs removed (which occurs for odd N).
lowpass_plus|minus_highpass
TODO
References
<[Link]
functions ncauer and ellip in Octave
lowpass3e
Usage
_ : lowpass3e(fc) : _
Where:
86
Design For spectral band-slice level display (see octave_analyzer3e):
lowpass6e
Usage
_ : lowpass6e(fc) : _
Where:
Usage
_ : highpass3e(fc) : _
Where:
87
highpass6e
Usage
_ : highpass6e(fc) : _
Where:
bandpass
Order 2*Nh Butterworth bandpass filter made using the transformation s <- s
+ wc2/s on lowpass(Nh), where wc is the desired bandpass center frequency.
The lowpass(Nh) cutoff w1 is half the desired bandpass width. bandpass is a
standard Faust function.
Usage
_ : bandpass(Nh,fl,fu) : _
Where:
Reference [Link]
88
bandstop
Order 2*Nh Butterworth bandstop filter made using the transformation s <- s
+ wc2/s on highpass(Nh), where wc is the desired bandpass center frequency.
The highpass(Nh) cutoff w1 is half the desired bandpass width. bandstop is a
standard Faust function.
Usage
_ : bandstop(Nh,fl,fu) : _
Where:
Reference [Link]
bandpass6e
bandpass12e
89
References
[Link]
[Link]
Digital Audio Signal Processing, Udo Zolzer, Wiley, 1999, p. 124
[Link]
[Link]
[Link] in the Faust distribution
[Link] in the faust2pd distribution
low_shelf
First-order low shelf filter (gain boost|cut between dc and some frequency)
low_shelf is a standard Faust function.
Usage
_ : lowshelf(N,L0,fx) : _
_ : low_shelf(L0,fx) : _ // default case (order 3)
_ : lowshelf_other_freq(N,L0,fx) : _
L0 > 0:
L(lf) = L0, f between 0 and fx = 1st corner frequency;
L(lf) = L0 - N * (lf - lfx), f between fx and f2 = 2nd corner frequency;
L(lf) = 0, lf > lf2.
lf2 = lfx + L0/N = dB-frequency at which level gets back to 0 dB.
L0 < 0:
L(lf) = L0, f between 0 and f1 = 1st corner frequency;
L(lf) = - N * (lfx - lf), f between f1 and lfx = 2nd corner frequency;
L(lf) = 0, lf > lfx.
90
lf1 = lfx + L0/N = dB-frequency at which level goes up from L0.
See lowshelf_other_freq.
high_shelf
First-order high shelf filter (gain boost|cut above some frequency). high_shelf
is a standard Faust function.
Usage
_ : highshelf(N,Lpi,fx) : _
_ : high_shelf(L0,fx) : _ // default case (order 3)
_ : highshelf_other_freq(N,Lpi,fx) : _
Where:
peak_eq
Second order peaking equalizer section (gain boost or cut near some frequency)
Also called a parametric equalizer section. peak_eq is a standard Faust
function.
Usage
_ : peak_eq(Lfx,fx,B) : _;
Where:
91
Lfx: level (dB) at fx (boost Lfx>0 or cut Lfx<0)
fx: peak frequency (Hz)
B: bandwidth (B) of peak in Hz
peak_eq_cq
Usage
_ : peak_eq_cq(Lfx,fx,Q) : _;
Where:
peak_eq_rm
Usage
_ : peak_eq_rm(Lfx,fx,tanPiBT) : _;
Where:
Reference P.A. Regalia, S.K. Mitra, and P.P. Vaidyanathan, The Digital
All-Pass Filter: A Versatile Signal Processing Building Block Proceedings of
the IEEE, 76(1):19-37, Jan. 1988. (See pp. 29-30.)
92
spectral_tilt
Spectral tilt filter, providing an arbitrary spectral rolloff factor alpha in (-1,1),
where -1 corresponds to one pole (-6 dB per octave), and +1 corresponds to one
zero (+6 dB per octave). In other words, alpha is the slope of the ln magnitude
versus ln frequency. For a pinking filter (e.g., to generate 1/f noise from white
noise), set alpha to -1/2.
Usage
_ : spectral_tilt(N,f0,bw,alpha) : _
Where:
levelfilter
Usage
_ : levelfilter(L,freq) : _
Where:
93
Reference [Link]
Level_Lowpass_Filter.html
levelfilterN
Usage
_ : levelfilterN(N,freq,L) : _
Where:
Reference [Link]
Level_Lowpass_Filter.html
Mth-Octave Filter-Banks
Mth-octave filter-banks split the input signal into a bank of parallel signals, one
for each spectral band. They are related to the Mth-Octave Spectrum-Analyzers
in [Link]. The documentation of this library contains more details about
the implementation. The parameters are:
94
A Filter-Bank is defined here as a signal bandsplitter having the property that
summing its output signals gives an allpass-filtered version of the filter-bank
input signal. A more conventional term for this is an allpass-complementary
filter bank. If the allpass filter is a pure delay (and possible scaling), the filter
bank is said to be a perfect-reconstruction filter bank (see Vaidyanathan-1993
cited below for details). A graphic equalizer, in which band signals are scaled
by gains and summed, should be based on a filter bank.
The filter-banks below are implemented as Butterworth or Elliptic spectrum-
analyzers followed by delay equalizers that make them allpass-complementary.
References
mth_octave_filterbank[n]
Usage
Where:
95
M: number of band-slices per octave
ftop: highest band-split crossover frequency (e.g., 20 kHz)
N: total number of bands (including dc and Nyquist)
These are similar to the Mth-octave analyzers above, except that the band-split
frequencies are passed explicitly as arguments.
filterbank
Usage
Where:
_ : filterbank(3,(fc1,fc2)) : _,_,_
filterbanki
96
Usage
Where:
_ : filterbanki(3,(fc1,fc2)) : _,_,_
[Link]
Faust library for high order ambisonic.
It should be used using the ho environment:
ho = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
encoder
97
Usage
encoder(n, x, a) : _
Where:
n: the order
x: the signal
a: the angle
decoder
Usage
_ : decoder(n, p) : _
Where:
n: the order
p: the number of speakers
decoderStereo
_ : decoderStereo(n) : _
Where:
n: the order
98
Optimization Functions
optimBasic
The basic optimization has no effect and should be used for a perfect circle of
loudspeakers with one listener at the perfect center loudspeakers array.
Usage
_ : optimBasic(n) : _
Where:
n: the order
optimMaxRe
Usage
_ : optimMaxRe(n) : _
Where:
n: the order
optimInPhase
The inPhase Optimization optimize energy vector and put all loudspeakers
signals n phase. It should be used for an auditory.
99
Usage
: optimInPhase(n) : _
here:
n: the order
wider
Can be used to wide the diffusion of a localized sound. The order depending
signals are weighted and appear in a logarithmic way to have linear changes.
Usage
_ : wider(n,w) : _
Where:
n: the order
w: the width value between 0 - 1
map
It simulate the distance of the source by applying a gain on the signal and a
wider processing on the soundfield.
Usage
map(n, x, r, a)
Where:
n: the order
x: the signal
r: the radius
a: the angle in radian
100
rotate
Usage
_ : rotate(n, a) : _
Where:
n: the order
a: the angle in radian
[Link]
Mathematic library for Faust. Some functions are implemenented as Faust
foreign functions of math.h functions that are not part of Fausts primitives.
Defines also various constants and several utilities.
It should be used using the fi environment:
ma = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
Functions Reference
SR
Current sampling rate (between 1Hz and 192000Hz). Constant during program
execution.
101
Usage
SR : _
BS
Usage
BS : _
PI
Usage
PI : _
FTZ
Usage
_ : ftz : _
See : [Link]
102
neg
Usage
_ : neg : _
sub(x,y)
Subtract x and y.
inv
Usage
_ : inv : _
cbrt
Usage
_ : cbrt : _
hypot
Computes the euclidian distance of the two input signals sqrt(xx+yy) without
undue overflow or underflow.
103
Usage
_,_ : hypot : _
ldexp
Usage
_,_ : ldexp : _
scalb
Usage
_,_ : scalb : _
log1p
Usage
_ : log1p : _
logb
104
Usage
_ : logb : _
ilogb
Usage
_ : ilogb : _
log2
Usage
_ : log2 : _
expm1
Usage
_ : expm1 : _
acosh
Computes the principle value of the inverse hyperbolic cosine of the input signal.
105
Usage
_ : acosh : _
asinh
Usage
_ : asinh : _
atanh
Usage
_ : atanh : _
sinh
Usage
_ : sinh : _
cosh
106
Usage
_ : cosh : _
tanh
Usage
_ : tanh : _
erf
Usage
_ : erf : _
erfc
Usage
_ : erfc : _
gamma
107
Usage
_ : gamma : _
lgamma
Calculates the natural logorithm of the absolute value of the gamma function of
the input signal.
Usage
_ : lgamma : _
J0
Computes the Bessel function of the first kind of order 0 of the input signal.
Usage
_ : J0 : _
J1
Computes the Bessel function of the first kind of order 1 of the input signal.
Usage
_ : J1 : _
Jn
Computes the Bessel function of the first kind of order n (first input signal) of
the second input signal.
108
Usage
_,_ : Jn : _
Y0
Computes the linearly independent Bessel function of the second kind of order 0
of the input signal.
Usage
_ : Y0 : _
Y1
Computes the linearly independent Bessel function of the second kind of order 1
of the input signal.
Usage
_ : Y0 : _
Yn
Computes the linearly independent Bessel function of the second kind of order n
(first input signal) of the second input signal.
Usage
_,_ : Yn : _
109
fabs, fmax, fmin
fabs = abs
fmax = max
fmin = min
np2
Usage
np2(n) : _
Where:
n: an integer
frac
Usage
frac(n) : _
Where:
n: a decimal number
isnan
110
Usage
isnan(x)
_ : isnan : _
Where:
x: signal to analyse
chebychev
Usage
_ : chebychev(n) : _
Where:
Semantics
T[0](x) = 1,
T[1](x) = x,
T[n](x) = 2x*T[n-1](x) - T[n-2](x)
Reference [Link]
chebychevpoly
111
Usage
_ : chebychevpoly((c0,c1,...,cn)) : _
Where:
Reference [Link]
diffn
Usage
_ : diffn : _
[Link]
This library contains a collection of audio effects.
It should be used using the ef environment:
ef = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
112
Dynamic
cubicnl
Usage:
_ : cubicnl(drive,offset) : _
_ : cubicnl_nodc(drive,offset) : _
Where:
References:
[Link]
[Link]
gate_mono
Usage
_ : gate_mono(thresh,att,hold,rel) : _
Where:
thresh: dB level threshold above which gate opens (e.g., -60 dB)
att: attack time = time constant (sec) for gate to open (e.g., 0.0001 s =
0.1 ms)
hold: hold time = time (sec) gate stays open after signal level < thresh
(e.g., 0.1 s)
rel: release time = time constant (sec) for gate to close (e.g., 0.020 s =
20 ms)
113
References
[Link]
[Link]
[Link]
gate_stereo
Usage
Where:
thresh: dB level threshold above which gate opens (e.g., -60 dB)
att: attack time = time constant (sec) for gate to open (e.g., 0.0001 s =
0.1 ms)
hold: hold time = time (sec) gate stays open after signal level < thresh
(e.g., 0.1 s)
rel: release time = time constant (sec) for gate to close (e.g., 0.020 s =
20 ms)
References
[Link]
[Link]
[Link]
Filtering
speakerbp
114
Low-frequency speaker model = +12 dB/octave slope breaking to flat near f1.
Implemented using two dc blockers in series.
High-frequency model = -24 dB/octave slope implemented using a fourth-order
Butterworth lowpass.
Example based on measured Celestion G12 (12" speaker):
speakerbp is a standard Faust function
Usage
speakerbp(f1,f2)
_ : speakerbp(130,5000) : _
piano_dispersion_filter
Usage
piano_dispersion_filter(M,B,f0)
_ : piano_dispersion_filter(1,B,f0) : +(totalDelay),_ : fdelay(maxDelay) : _
Where:
Outputs
stereo_width
115
Usage
Where:
Reference
Time Based
echo
Usage
_ : echo(maxDuration,duration,feedback) : _
Where:
116
Pitch Shifting
transpose
Usage
_ : transpose(w, x, s) : _
Where:
Meshes
mesh_square
Usage
Where:
Reference [Link]
[Link]
117
Signal Order In and Out The mesh is constructed recursively using 2x2
embeddings. Thus, the top level of mesh_square(M) is a block 2x2 mesh, where
each block is a mesh(M/2). Let these blocks be numbered 1,2,3,4 in the geometry
NW,NE,SW,SE, i.e., as 1 2 3 4 Each block has four vector inputs and four
vector outputs, where the length of each vector is M/2. Label the input vectors
as Ni,Ei,Wi,Si, i.e., as the inputs from the North, East South, and West, and
similarly for the outputs. Then, for example, the upper left input block of M/2
signals is labeled 1Ni. Most of the connections are internal, such as 1Eo -> 2Wi.
The 8*(M/2) input signals are grouped in the order 1Ni 2Ni 3Si 4Si 1Wi 3Wi
2Ei 4Ei and the output signals are 1No 1Wo 2No 2Eo 3So 3Wo 4So 4Eo or
In: 1No 1Wo 2No 2Eo 3So 3Wo 4So 4Eo
Out: 1Ni 2Ni 3Si 4Si 1Wi 3Wi 2Ei 4Ei
Thus, the inputs are grouped by direction N,S,W,E, while the outputs are
grouped by block number 1,2,3,4, which can also be interpreted as directions
NW, NE, SW, SE. A simple program illustrating these orderings is process =
mesh_square(2);.
[Link]
A library of noise generators.
It should be used using the no environment:
no = library("[Link]");
process = [Link];
118
import("[Link]");
process = [Link];
Functions Reference
noise
White noise generator (outputs random number between -1 and 1). Noise is a
standard Faust function.
Usage
noise : _
multirandom
Usage
multirandom(n) : _
Where:
multinoise
Usage
multinoise(n) : _
Where:
119
noises
TODO.
pink_noise
Usage
pink_noise : _;
Reference: [Link]
F_Noise.html
pink_noise_vm
Usage
pink_noise_vm(N) : _;
Where:
References
[Link]
[Link]
120
lfnoise, lfnoise0 and lfnoiseN
Usage
rate = SR/100.0; // new random value every 100 samples (SR from [Link])
process = lfnoise0(rate), // sampled/held noise (piecewise constant)
lfnoiseN(3,rate), // lfnoise0 smoothed by 3rd order Butterworth LPF
lfnoise(rate); // lfnoise0 smoothed with no overshoot
[Link]
This library contains a collection of sound generators.
It should be used using the os environment:
os = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
Wave-Table-Based Oscillators
sinwaveform
121
Usage
sinwaveform(tablesize) : _
Where:
coswaveform
Usage
coswaveform(tablesize) : _
Where:
phasor
Usage
phasor(tablesize,freq) : _
Where:
122
oscsin
Usage
oscsin(freq) : _
Where:
osccos
Usage
osccos(freq) : _
Where:
oscp
Usage
oscp(freq,p) : _
Where:
123
osci
Usage
osci(freq) : _
Where:
LFOs
lf_imptrain
Usage
lf_imptrain(freq) : _
Where:
freq: frequency in Hz
lf_pulsetrainpos
124
Usage
lf_pulsetrainpos(freq,duty) : _
Where:
freq: frequency in Hz
duty: duty cycle between 0 and 1
lf_squarewavepos
Usage
lf_squarewavepos(freq) : _
Where:
freq: frequency in Hz
lf_squarewave
Usage
lf_squarewave(freq) : _
Where:
freq: frequency in Hz
125
lf_trianglepos
Usage
lf_trianglepos(freq) : _
Where:
freq: frequency in Hz
lf_triangle
Usage
lf_triangle(freq) : _
Where:
freq: frequency in Hz
Sawtooth waveform oscillators for virtual analog synthesis et al. The simple
versions (lf_rawsaw, lf_sawpos and saw1), are mere samplings of the ideal
continuous-time (analog) waveforms. While simple, the aliasing due to sam-
pling is quite audible. The differentiated polynomial waveform family (saw2,
sawN, and derived functions) do some extra processing to suppress aliasing (not
audible for very low fundamental frequencies). According to Lehtonen et al.
(JASA 2012), the aliasing of saw2 should be inaudible at fundamental frequencies
below 2 kHz or so, for a 44.1 kHz sampling rate and 60 dB SPL presentation
level; fundamentals 415 and below required no aliasing suppression (i.e., saw1 is
ok).
126
lf_rawsaw
Usage
lf_rawsaw(periodsamps)
Where:
lf_sawpos
Usage
lf_sawpos(freq)
Where:
freq: frequency
lf_saw
Usage
lf_saw(freq)
Where:
freq: frequency
127
lf_sawpos_phase
Usage
lf_sawpos_phase(freq,phase)
Where:
freq: frequency
phase: phase
Bandlimited Sawtooth
Bandlimited Sawtooth
sawN(N,freq), sawNp, saw2dpw(freq), saw2(freq), saw3(freq), saw4(freq),
saw5(freq), saw6(freq), sawtooth(freq), saw2f2(freq) saw2f4(freq)
Reference
128
Other Cases Correction-filtered versions of saw2: saw2f2, saw2f4 The cor-
rection filter compensates droop near half the sampling rate. See reference for
sawN.
Usage
sawN(N,freq) : _
sawNp(N,freq,phase) : _
saw2dpw(freq) : _
saw2(freq) : _
saw3(freq) : _ // based on sawN
saw4(freq) : _ // based on sawN
saw5(freq) : _ // based on sawN
saw6(freq) : _ // based on sawN
sawtooth(freq) : _ // = saw2
saw2f2(freq) : _
saw2f4(freq) : _
Where:
N: polynomial order
freq: frequency in Hz
phase: phase
sawN
TODO: implemented but not documented. For now, you can look at the source
code.
sawNp
TODO: implemented but not documented. For now, you can look at the source
code.
saw2dpw
TODO: implemented but not documented. For now, you can look at the source
code.
129
saw3
TODO: implemented but not documented. For now, you can look at the source
code.
sawtooth
Usage
sawtooth(freq) : _
Where:
freq: frequency
saw2f2
TODO: implemented but not documented. For now, you can look at the source
code.
saw2f4
TODO: implemented but not documented. For now, you can look at the source
code.
130
Usage
pulsetrainN(N,freq,duty) : _
pulsetrain(freq, duty) : _ // = pulsetrainN(2)
squareN(N, freq) : _
square : _ // = squareN(2)
imptrainN(N,freq) : _
imptrain : _ // = imptrainN(2)
triangleN(N,freq) : _
triangle : _ // = triangleN(2)
Where:
N: polynomial order
freq: frequency in Hz
pulsetrainN
TODO: implemented but not documented. For now, you can look at the source
code.
pulsetrain
Usage
pulsetrain(freq, duty) : _
Where:
freq: frequency
duty: duty cycle between 0 and 1
131
squareN
TODO: implemented but not documented. For now, you can look at the source
code.
square
Usage
square(freq) : _
Where:
freq: frequency
impulse
Usage
impulse : _
imptrainN
TODO: implemented but not documented. For now, you can look at the source
code.
132
imptrain
Usage
imptrain(freq) : _
Where:
freq: frequency
triangleN
TODO: implemented but not documented. For now, you can look at the source
code.
triangle
Usage
triangle(freq) : _
Where:
freq: frequency
Filter-Based Oscillators
Filter-Based Oscillators
133
Usage
References
[Link]
[Link]
oscb
Usage
oscb(freq) : _
Where:
freq: frequency
oscrq
Usage
oscrq(freq) : _,_
Where:
freq: frequency
Reference
[Link]
[Link]
134
oscrs
Usage
oscrs(freq) : _
Where:
freq: frequency
Reference
[Link]
[Link]
oscrc
Usage
oscrc(freq) : _
Where:
freq: frequency
Reference
[Link]
[Link]
135
osc
Default sine wave oscillator (same as oscrs). osc is a standard Faust function.
Usage
osc(freq) : _
Where:
oscs
Waveguide-Resonator-Based Osccilators
oscw
Usage
oscwc(freq) : _
Where:
freq: frequency
136
Reference
[Link]
html
oscws
Usage
oscws(freq) : _
Where:
freq: frequency
Reference
[Link]
html
oscwq
Usage
oscwq(freq) : _
Where:
freq: frequency
137
Reference
[Link]
html
oscw
Usage
oscw(freq) : _
Where:
freq: frequency
Reference
[Link]
html
[Link]
A library of compressor effects.
It should be used using the pf environment:
pf = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
138
Functions Reference
flanger_mono
Usage:
_ : flanger_mono(dmax,curdel,depth,fb,invert) : _;
Where:
Reference [Link]
flanger_stereo
Usage:
Where:
Reference [Link]
139
phaser2_mono
Phaser
_ : phaser2_mono(Notches,phase,width,frqmin,fratio,frqmax,speed,depth,fb,invert) : _;
Where:
Reference:
[Link]
[Link]
An Allpass Approach to Digital Phasing and Flanging, Julius O. Smith
III, Proc. Int. Computer Music Conf. (ICMC-84), pp. 103-109, Paris,
1984.
CCRMA Tech. Report STAN-M-21: [Link]
stanms/stanm21/
phaser2_stereo
140
Phaser
_ : phaser2_stereo(Notches,phase,width,frqmin,fratio,frqmax,speed,depth,fb,invert) : _;
Where:
Reference:
[Link]
[Link]
An Allpass Approach to Digital Phasing and Flanging, Julius O. Smith
III, Proc. Int. Computer Music Conf. (ICMC-84), pp. 103-109, Paris,
1984.
CCRMA Tech. Report STAN-M-21: [Link]
stanms/stanm21/
[Link]
Faust physical modeling library.
It should be used using the fi environment:
pm = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
141
chain(A:B:. . . )
Creates a chain of bidirectional blocks. Blocks must have 3 inputs and out-
puts. The first input/output correspond to the left going signal, the second
input/output correspond to the right going signal and the third input/output
is the mix of the main signal output. The implied one sample delay created by
the ~ operator is generalized to the left and right going waves. Thus, n blocks
in chain() will add an n samples delay to both the left and right going waves.
### Usage
Requires
[Link] (crossnn)
input(x)
string(x) = chain(A:input(x):B)
output()
chain(A:output:B)
142
terminations(a,b,c)
Creates terminations on both sides of a chain() without closing the inputs and
outputs of the bidirectional signals chain. As for chain(), this function adds a
1 sample delay to the bidirectional signal both ways. ### Usage
Requires
[Link] (crossnn)
fullTerminations(a,b,c)
Same as terminations() but closes the inputs and outputs of the bidirectional
chain (only the mixed output remains). ### Usage
terminations(a,b,c) : _
with{
a = *(-1); // left termination
b = chain(D:E:F); // bidirectional chain of blocks (D, E, F, etc.)
c = *(-1); // right termination
};
Requires
[Link] (crossnn)
leftTermination(a,b)
Creates a termination on the left side of a chain() without closing the inputs
and outputs of the bidirectional signals chain. This function adds a 1 sample
delay near the termination. ### Usage
143
rightGoingWaves,leftGoingWaves,mixedOutput : terminations(a,b) : rightGoingWaves,leftGoingWa
with{
a = *(-1); // left termination
b = chain(D:E:F); // bidirectional chain of blocks (D, E, F, etc.)
};
Requires
[Link] (crossnn)
rightTermination(b,c)
Creates a termination on the right side of a chain() without closing the inputs
and outputs of the bidirectional signals chain. This function adds a 1 sample
delay near the termination. ### Usage
Requires
[Link] (crossnn)
waveguide(nMax,n)
A simple waveguide block based on a 4th order fractional delay. ### Usage
With: * nMax: the maximum length of the waveguide in samples * n the length
of the waveguide in samples. ### Requires [Link] (fdelay4)
144
idealString(length,reflexion,xPosition,x)
An ideal string with rigid terminations and where the plucking position and the
pick-up position are the same. ### Usage
1-1' : idealString(length,reflexion,xPosition,x)
With: * length: the length of the string in meters * reflexion: the coefficient
of reflexion (0-0.99999999) * pluckPosition: the plucking position (0.001-0.999)
* x: the input signal for the excitation ### Requires [Link] (crossnn)
[Link] (fdelay4)
[Link]
A library of reverb effects.
It should be used using the re environment:
re = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
Functions Reference
jcrev
This artificial reverberator take a mono signal and output stereo (satrev)
and quad (jcrev). They were implemented by John Chowning in the MUS10
computer-music language (descended from Music V by Max Mathews). They
are Schroeder Reverberators, well tuned for their size. Nowadays, the more
expensive freeverb is more commonly used (see the Faust examples directory).
jcrev reverb below was made from a listing of RV, dated April 14, 1972, which
was recovered from an old SAIL DART backup tape. John Chowning thinks this
might be the one that became the well known and often copied JCREV.
jcrev is a standard Faust function
145
Usage
_ : jcrev : _,_,_,_
satrev
This artificial reverberator take a mono signal and output stereo (satrev)
and quad (jcrev). They were implemented by John Chowning in the MUS10
computer-music language (descended from Music V by Max Mathews). They
are Schroeder Reverberators, well tuned for their size. Nowadays, the more
expensive freeverb is more commonly used (see the Faust examples directory).
satrev was made from a listing of SATREV, dated May 15, 1971, which was
recovered from an old SAIL DART backup tape. John Chowning thinks this might
be the one used on his often-heard brass canon sound examples, one of which
can be found at [Link]
Usage
_ : satrev : _,_
mono_freeverb
Usage
Where:
146
stereo_freeverb
Usage
Where:
fdnrev0
Usage
Where:
N: 2, 4, 8, . . . (power of 2)
MAXDELAY: power of 2 at least as large as longest delay-line length
delays: N delay lines, N a power of 2, lengths perferably coprime
BBSO: odd positive integer = order of bandsplit desired at freqs
freqs: NB-1 crossover frequencies separating desired frequency bands
durs: NB decay times (t60) desired for the various bands
loopgainmax: scalar gain between 0 and 1 used to squelch the reverb
nonl: nonlinearity (0 to 0.999. . . , 0 being linear)
147
Reference [Link]
zita_rev_fdn
Internal 8x8 late-reverberation FDN used in the FOSS Linux reverb zita-rev1 by
Fons Adriaensen fons@[Link]. This is an FDN reverb with allpass comb
filters in each feedback delay in addition to the damping filters.
Usage
Where:
Reference
[Link]
[Link]
zita_rev1_stereo
Usage
Where:
rdel = delay (in ms) before reverberation begins (e.g., 0 to ~100 ms) (remaining
args and refs as for zita_rev_fdn above)
148
zita_rev1_ambi
Usage
Where:
rgxyz = relative gain of lanes 1,4,2 to lane 0 in output (e.g., -9 to 9) (remaining
args and references as for zita_rev1_stereo above)
[Link]
A library of basic elements to handle signal routing in Faust.
It should be used using the si environment:
ro = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
Functions Reference
cross
Usage
cross(n)
_,_,_ : cross(3) : _,_,_
Where:
149
Note Special case: cross2:
cross2 = _,cross(2),_;
crossnn
Usage
Where:
crossn1
Usage
Where:
interleave
Interleave rowcol cables from column order to row order. input : x(0), x(1), x(2)
. . . , x(rowcol-1) output: x(0+0row), x(0+1 row), x(0+2row), . . . , x(1+0 row),
x(1+1row), x(1+2 row), . . .
150
Usage
Where:
butterfly
Usage
Where:
hadamard
Usage
Where:
151
recursivize
Usage
Where:
[Link]
A library of basic elements to handle signals in Faust.
It should be used using the si environment:
si = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
Functions Reference
bus
152
Usage
bus(n)
bus(4) : _,_,_,_
Where:
block
Usage
Where:
interpolate
Usage
_,_ : interpolate(i) : _
Where:
153
smooth
Usage:
_ : smooth(tau2pole(tau)) : _
Where:
hslider(...) : smooth(s) : _
Where:
Reference: [Link]
2_ADSR.html
smoo
Usage
hslider(...) : smoo;
polySmooth
154
Usage
hslider(...) : polysmooth(g,s,d) : _
Where:
bsmooth
Usage
hslider(...) : bsmooth : _
lag_ud
Usage
dot
155
Usage
_,_,_,_,_,_ : dot(n) : _
Where:
[Link]
This library contains a collection of tools for sound spatialization.
It should be used using the sp environment:
sp = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
panner
Usage
_ : panner(g) : _,_
Where:
spat
156
Usage
_ : spat(n,r,d) : _,_,...
Where:
n: number of outputs
r: rotation (between 0 et 1)
d: distance of the source (between 0 et 1)
stereoize
Usage
Where:
[Link]
This library contains a collection of envelope generators.
It should be used using the sy environment:
sy = library("[Link]");
process = [Link];
import("[Link]");
process = [Link];
157
popFilterPerc
Usage
popFilterDrum(freq,q,gate) : _;
Where:
dubDub
Usage
dubDub(freq,ctFreq,q,gate) : _;
Where:
sawTrombone
158
Usage
sawTrombone(att,freq,gain,gate) : _
Where:
combString
Usage
combString(freq,res,gate) : _;
Where:
additiveDrum
Usage
additiveDrum(freq,freqRatio,gain,harmDec,att,rel,gate) : _
Where:
159
freq: the resonance frequency of the drum
freqRatio: a list of ratio to choose the frequency of the mode in func-
tion of freq e.g.(1 1.2 1.5 . . . ). The first element should always be one
(fundamental).
gain: the gain of each mode as a list (1 0.9 0.8 . . . ). The first element is
the gain of the fundamental.
harmDec: harmonic decay ratio (0-1): configure the speed at which higher
modes decay compare to lower modes.
att: attack duration in second
rel: release duration in second
gate: trigger signal (0 or 1)
fm
Usage
freqs = (300,400,...);
indices = (20,...);
fm(freqs,indices) : _
Where:
freqs: a list of frequencies where the first one is the frequency of the
carrier and the others, the frequency of the modulator(s)
indices: the indices of modulation (Nfreqs-1)
[Link]
A library of virtual analog filter effects.
It should be used using the ve environment:
ve = library("[Link]");
process = [Link];
160
Another option is to import [Link] which already contains the ve envi-
ronment:
import("[Link]");
process = [Link];
Functions Reference
moog_vcf
Moog Voltage Controlled Filter (VCF) in analog form. Moog VCF im-
plemented using the same logical block diagram as the classic analog circuit.
As such, it neglects the one-sample delay associated with the feedback path
around the four one-poles. This extra delay alters the response, especially at
high frequencies (see reference [1] for details). See moog_vcf_2b below for a
more accurate implementation.
Usage
moog_vcf(res,fr)
Where:
References
[Link]
[Link]
moog_vcf_2b[n]
161
Usage
moog_vcf_2b(res,fr)
moog_vcf_2bn(res,fr)
Where:
wah4
Usage
_ : wah4(fr) : _
Where:
Reference [Link]
autowah
Usage
_ : autowah(level) : _;
Where:
162
crybaby
Usage
_ : crybaby(wah) : _
Where:
Reference [Link]
vocoder
A very simple vocoder where the spectrum of the modulation signal is analyzed
using a filter bank. vocoder is a standard Faust function.
Usage
_ : vocoder(nBands,att,rel,BWRatio,source,excitation) : _;
Where:
163
An allpass comb filter is a type of digital filter that allows all frequencies to pass through with unitary gain but induces a phase shift, making it significant for altering time-based characteristics of audio signals rather than their spectral content. It is implemented using allpass structures and is specified by parameters such as maximum delay (maxdel), delay factor (intdel or del), and feedback gain negative (aN). In digital signal processing, allpass comb filters are integral to effects such as reverb and phasing, where the spatial characteristic or texture of the sound is modified rather than its harmonic content. By managing phase relationships, these filters can produce effects that enhance the stereo illusion or create spaciousness in the sound field .
InPhase Optimization is a process that can significantly enhance auditory experiences by synchronizing the phase of audio signals emitted by multiple loudspeakers. This optimization ensures that the energy vector — a representation of the sound fields produced by these speakers — is coherent and in phase, reducing phase cancellations and creating a more uniform sound field. This technique is particularly beneficial in complex acoustic environments such as auditoriums or recording studios, where maintaining clarity and consistent sound coverage is paramount. By optimizing the phase alignment, listeners experience improved sound quality, with enhanced imaging and transparency, resulting in an enriched auditory experience .
FIR (Finite Impulse Response) and IIR (Infinite Impulse Response) filters are both used in digital signal processing but differ fundamentally in their structure and applications. FIR filters are characterized by a direct convolution of the input signal with a finite set of coefficients, and they are always stable as they do not feedback their output into the system. This allows for linear phase response, making FIR filters ideal for applications requiring phase linearity, such as data communications and audio processing where signal integrity is crucial. Conversely, IIR filters are recursive, utilizing feedback as part of their structure, which can enhance computational efficiency by achieving sharper filter slopes with a lower order. However, they may introduce phase distortion and can potentially be unstable without careful design. IIR filters are widely used in situations where computational resources are limited and linear phase is not a critical requirement, such as in real-time audio processing .
The ADSR envelope generator is a function in audio signal processing used to shape the amplitude envelope of a sound. It operates by defining four key stages: Attack (a), Decay (d), Sustain (s), and Release (r). The Attack phase is the time taken for the envelope to rise from zero to its peak value after a trigger is activated. The Decay phase follows, allowing the envelope to drop to the Sustain level at a specified rate. The Sustain phase maintains a constant level for the duration of the trigger, expressed as a percentage of the peak. Finally, the Release phase occurs when the trigger is deactivated, causing the sound to decay to silence at the specified rate. This mechanism enables precise control over the temporal characteristics of the sound, crucial for synthesizing natural-sounding audio .
Interpolation in audio processing serves the purpose of smoothly transitioning between two audio signals, facilitating effects like crossfading and audio morphing. The interpolation is controlled by a parameter (i) ranging between 0 and 1, where 0 represents the first input and 1 represents the second. Practical applications of interpolation include creating smooth transitions in audio mixes, simulating gradual changes in the sound qualities of an instrument or effect, and morphing sounds in a way that retains coherence between the original and final sounds. By enabling a gradual blend between signals, interpolation aids in achieving seamless and uninterrupted auditory experiences .
The zero filter, also known as a one-zero filter, is characterized by the difference equation y(n) = x(n) - z * x(n-1), where z represents the location of the zero along the real axis in the z-plane. This filter is primarily used for altering the frequency response of an audio signal, typically for treble enhancement or attenuation. By manipulating the location of the zero, users can adjust the degree of amplification or attenuation applied to different frequency components of the signal. The zero filter is useful in audio processing for achieving specific tonal qualities by modifying the phase and magnitude of certain frequencies .
The wider processing technique in sound spatialization impacts the perceived audio experience by modifying how sound diffuses across a given space. It adjusts the weighting of directional audio signals in a logarithmic manner to produce linear auditory changes, effectively expanding the spatial perception of the audio source. This technique increases the perceived width and depth of audio playback, making the sound source seem larger or more immersive than its actual location. Such effects are particularly valuable in virtual reality and 3D audio applications where creating an enveloping and realistic sound field is crucial. Wider processing enhances the listener's sense of presence and can be used to simulate environments, such as concert halls, where sound reflections and diffusion play a significant role in the listening experience .
Ladder and lattice digital filters are preferred over direct-form filters in audio processing due to their superior numerical stability and robustness. These filters are less susceptible to quantization noise and round-off errors thanks to their inherent structure, which allows for better preservation of numerical integrity during arithmetic operations. Ladder/lattice structures simulate physical systems that often result in more accurate and realistic audio effects. Additionally, they facilitate smoother modulation of parameters without the risk of introducing instability, making them ideal for applications requiring high precision and stability, such as digital waveguide synthesis and adaptive filtering. These advantages make them more suitable for high-fidelity audio applications, where the detailed preservation of signal properties is crucial .
The Hadamard transformation benefits digital signal processing by providing an efficient means of orthogonal transformation that is particularly useful in error detection, coding, and compression. In audio applications, the Hadamard transform is used for its computational simplicity, offering fast computation that is beneficial for real-time audio processing tasks. One prominent application is in analyzing and synthesizing audio signals, where it can perform computations similar to the Fourier transform but with only additions and subtractions, making it faster and less resource-intensive. This efficiency is exploited in perceptual coding and audio watermarking, wherein the Hadamard transform's capacity to handle signals in a compressed form is ideal for reducing data without compromising significant information, thus enhancing both quality and processing power .
The DC blocker filter is designed to remove low-frequency components, particularly the DC offset, from an audio signal. This offset can cause distortion or affect the performance of audio equipment and digital systems. The DC blocker employs a high-pass filter with a break frequency, the -3 dB point, typically set around 35 Hz for audio applications. It functions by allowing frequencies above this break point to pass through while attenuating frequencies below it. The DC blocker flattens the amplitude response above the break frequency and applies a positive slope below it, effectively eliminating the direct current (DC) component while preserving the audio signal's integrity .