Virtual Electric Guitars and Effects Using Faust and Octave Julius - - PowerPoint PPT Presentation

virtual electric guitars and effects using faust and
SMART_READER_LITE
LIVE PREVIEW

Virtual Electric Guitars and Effects Using Faust and Octave Julius - - PowerPoint PPT Presentation

Virtual Electric Guitars and Effects Using Faust and Octave Julius Smith CCRMA, Stanford University LAC-2008 March 1, 2008 Julius Smith LAC-2008 1 / 66 Outline Overview and Demo Extended Karplus Strong (EKS) Elements


slide-1
SLIDE 1

Julius Smith LAC-2008 – 1 / 66

Virtual Electric Guitars and Effects Using Faust and Octave

Julius Smith CCRMA, Stanford University LAC-2008

March 1, 2008

slide-2
SLIDE 2

Outline

Julius Smith LAC-2008 – 2 / 66

  • Overview and Demo
  • Extended Karplus Strong (EKS) Elements
  • Overdrive
  • Amplifier Feedback
  • Coupled Strings
  • Wah Pedal
  • Faust Libraries:
  • filter.lib
  • effect.lib
  • sc.lib
slide-3
SLIDE 3

Why Resurrect These Old Algorithms Now?

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 3 / 66

(Extended Karplus Strong, Sullivan extensions, early waveguide)

  • Some patents have expired
  • Useful free methods are not in wide use
  • Reference implementations in a modern framework
slide-4
SLIDE 4

Why Resurrect These Old Algorithms Now?

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 3 / 66

(Extended Karplus Strong, Sullivan extensions, early waveguide)

  • Some patents have expired
  • Useful free methods are not in wide use
  • Reference implementations in a modern framework
slide-5
SLIDE 5

Why Resurrect These Old Algorithms Now?

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 3 / 66

(Extended Karplus Strong, Sullivan extensions, early waveguide)

  • Some patents have expired
  • Useful free methods are not in wide use
  • Reference implementations in a modern framework
slide-6
SLIDE 6

Extended Karplus-Strong (EKS) Algorithm

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 4 / 66

slide-7
SLIDE 7

Karplus-Strong (KS) Algorithm (1983)

Outline Why Now? EKS Intro

  • Karplus Strong
  • EKS Algorithms

Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 5 / 66

Digital Filter Interpretation:

N samples delay Output y (n)

+ z 1

  • 1/2

1/2 y (n-N)

+

  • Discovered as “self-modifying wavetable synthesis”
  • Wavetable is preferably initialized with random numbers
  • Patents now expired
slide-8
SLIDE 8

Karplus-Strong (KS) Algorithm (1983)

Outline Why Now? EKS Intro

  • Karplus Strong
  • EKS Algorithms

Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 5 / 66

Digital Filter Interpretation:

N samples delay Output y (n)

+ z 1

  • 1/2

1/2 y (n-N)

+

  • Discovered as “self-modifying wavetable synthesis”
  • Wavetable is preferably initialized with random numbers
  • Patents now expired
slide-9
SLIDE 9

Karplus-Strong (KS) Algorithm (1983)

Outline Why Now? EKS Intro

  • Karplus Strong
  • EKS Algorithms

Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 5 / 66

Digital Filter Interpretation:

N samples delay Output y (n)

+ z 1

  • 1/2

1/2 y (n-N)

+

  • Discovered as “self-modifying wavetable synthesis”
  • Wavetable is preferably initialized with random numbers
  • Patents now expired
slide-10
SLIDE 10

EKS Algorithms

Outline Why Now? EKS Intro

  • Karplus Strong
  • EKS Algorithms

Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 6 / 66

Hβ(z) Hρ(z) Hs(z) HL(z) Hp(z) Hd(z)

z−N N =

pitch period (2× string length) in samples

Hp(z) = 1 − p 1 − p z−1 = pick-direction lowpass filter Hβ(z) = 1 − z−βN = pick-position comb filter, β ∈ (0, 1) Hd(z) =

string-damping filter (one/two poles/zeros typical)

Hs(z) =

string-stiffness allpass filter (several poles and zeros)

Hρ(z) = ρ(N) − z−1 1 − ρ(N) z−1 = first-order string-tuning allpass filter HL(z) = 1 − RL 1 − RL z−1 = dynamic-level lowpass filter

slide-11
SLIDE 11

Pick Position Comb Filter

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 7 / 66

slide-12
SLIDE 12

String Model Excited Externally at One Point

Outline Why Now? EKS Intro Pick Position Comb

  • Physical Excitation
  • Pick Position FFCF
  • Faust Code

Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 8 / 66

(x = 0) (x = L) f (n)

+

“Agraffe” Rigid Termination f (n)

  • Delay

Delay Delay Delay (x = striking position) Hammer Strike f(t) Example Output Filter “Bridge” Yielding Termination

“Waveguide Formulation”

slide-13
SLIDE 13

String Model Excited Externally at One Point

Outline Why Now? EKS Intro Pick Position Comb

  • Physical Excitation
  • Pick Position FFCF
  • Faust Code

Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 8 / 66

(x = 0) (x = L) f (n)

+

“Agraffe” Rigid Termination f (n)

  • Delay

Delay Delay Delay (x = striking position) Hammer Strike f(t) Example Output Filter “Bridge” Yielding Termination

“Waveguide Formulation” Equivalent System by Delay Consolidation:

Delay Delay String Output Filter Hammer Strike f(t)

slide-14
SLIDE 14

String Model Excited Externally at One Point

Outline Why Now? EKS Intro Pick Position Comb

  • Physical Excitation
  • Pick Position FFCF
  • Faust Code

Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 8 / 66

(x = 0) (x = L) f (n)

+

“Agraffe” Rigid Termination f (n)

  • Delay

Delay Delay Delay (x = striking position) Hammer Strike f(t) Example Output Filter “Bridge” Yielding Termination

“Waveguide Formulation” Equivalent System by Delay Consolidation:

Delay Delay String Output Filter Hammer Strike f(t)

Finally, we “pull out” the comb-filter component:

slide-15
SLIDE 15

Pick-Position Comb Filter

Outline Why Now? EKS Intro Pick Position Comb

  • Physical Excitation
  • Pick Position FFCF
  • Faust Code

Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 9 / 66

Equivalent System: Comb Filter Factored Out

Delay Hammer Strike f(t) Filter Delay g(t) String Output

H(z) = z−N 1 + z−2M 1 − z−(2M+2N) =

  • 1 + z−2M

z−N 1 − z−(2M+2N)

  • Excitation Position controlled by left delay-line length
  • Fundamental Frequency controlled by right delay-line length
  • Derived originally (1982) by transfer-function factorization
slide-16
SLIDE 16

Pick-Position Comb Filter in Faust

Outline Why Now? EKS Intro Pick Position Comb

  • Physical Excitation
  • Pick Position FFCF
  • Faust Code

Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 10 / 66

  • beta = hslider("pick_position",

0.13, 0.02, 0.5, 0.01); P = SR/freq; // fundamental period in samples Pmax = 4096; // maximum P (delay-line allocation) ppdel = beta*P; // pick-position delay ffcombfilter(maxdel,del,g) = _ <: delay(maxdel,del) : *(g) : + ; pickposfilter = ffcombfilter(Pmax,ppdel,-1);

slide-17
SLIDE 17

EKS Damping Filter

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 11 / 66

slide-18
SLIDE 18

EKS Damping Filter

Outline Why Now? EKS Intro Pick Position Comb Damping Filter

  • EKS Damping Filter

Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 12 / 66

Original:

Hd(z) = (1 − S) + Sz−1, S ∈ 1 2, 1

  • Later: Symmetric FIR (delay always one sample):

Hd(z) = h1 + h0z−1 + h1z−2 = z−1 h0 + h1(z + z−1)

  • .

Faust Implementation:

t60 = hslider("decaytime T60", 4, 0, 10, 0.01); B = hslider("brightness", 0.5, 0, 1, 0.01); // 0-1 rho = pow(0.001,1.0/(freq*t60)); h0 = (1.0 + B)/2; h1 = (1.0 - B)/4; dampingfilter(x) = rho * (h0 * x’ + h1*(x+x’’));

slide-19
SLIDE 19

EKS Tuning Filter

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 13 / 66

slide-20
SLIDE 20

Original EKS Tuning Filter

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter

  • Allpass Interpolation
  • Lagrange Interp
  • Faust Code
  • Lagrange Test
  • Lagrange1-4 AR
  • Lagrange4 AR
  • Lagrange4 PD
  • Thiran PD 2
  • Thiran AR 2
  • Lagrange5 AR
  • Lagrange5 PD
  • Lagrange4E AR
  • Lagrange4E PD

Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal

Julius Smith LAC-2008 – 14 / 66

Hη(z) = − η − z−1 1 − ηz−1

where the phase delay ∆η(ω) has dc limit

∆η(0) = 1 + η 1 − η ⇒ η ≈ ∆ − 1 ∆ + 1

where ∆ = desired delay Faust Implementation:

fdelay1a(n,d,x) = delay(n,id,x) : tf1(eta,1,eta);

slide-21
SLIDE 21

Tuning by Lagrange Interpolation (HUT)

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter

  • Allpass Interpolation
  • Lagrange Interp
  • Faust Code
  • Lagrange Test
  • Lagrange1-4 AR
  • Lagrange4 AR
  • Lagrange4 PD
  • Thiran PD 2
  • Thiran AR 2
  • Lagrange5 AR
  • Lagrange5 PD
  • Lagrange4E AR
  • Lagrange4E PD

Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal

Julius Smith LAC-2008 – 15 / 66

Transfer function:

H∆(z) =

N

  • n=0

h∆(n)z−n

Coefficient formula:

h∆(n) =

N

  • k=0

k=n

∆ − k n − k

Useful maxima function:

hd(n,d,N) := product(if k=n then 1 else (d-k)/(n-k),k,0,N);

slide-22
SLIDE 22

Lagrange Interpolation in Faust

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter

  • Allpass Interpolation
  • Lagrange Interp
  • Faust Code
  • Lagrange Test
  • Lagrange1-4 AR
  • Lagrange4 AR
  • Lagrange4 PD
  • Thiran PD 2
  • Thiran AR 2
  • Lagrange5 AR
  • Lagrange5 PD
  • Lagrange4E AR
  • Lagrange4E PD

Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal

Julius Smith LAC-2008 – 16 / 66

Second-order case:

fdelay2(n,d,x) = delay(n,id,x)*(1-fd)*(2-fd)/2 + delay(n,id+1,x)*(2-fd)*fd + delay(n,id+2,x)*(fd-1)*fd/2 with {

  • = 0.49999; // center delay-range in polynomial

dmo = d - o; // assumed nonnegative id = int(dmo); fd = o + frac(dmo); };

More robust than allpass under rapidly time-varying conditions

slide-23
SLIDE 23

Testing Lagrange Interpolation in Faust

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter

  • Allpass Interpolation
  • Lagrange Interp
  • Faust Code
  • Lagrange Test
  • Lagrange1-4 AR
  • Lagrange4 AR
  • Lagrange4 PD
  • Thiran PD 2
  • Thiran AR 2
  • Lagrange5 AR
  • Lagrange5 PD
  • Lagrange4E AR
  • Lagrange4E PD

Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal

Julius Smith LAC-2008 – 17 / 66

> cat tlagrange1-4.dsp import("filter.lib"); N = 16; d = 1.5; impulse = 1-1’; process = impulse <: (fdelay1(N,d), fdelay2(N,d), fdelay3(N,d), fdelay4(N,d)); > faust2octave tlagrange1-4.dsp

  • ctave:1> \

plot(20*log10(abs((fft(faustout,1024)(1:512,:)))))

slide-24
SLIDE 24

Lagrange Interpolation Orders 1-4

Julius Smith LAC-2008 – 18 / 66

Amplitude Responses for requested delay = 1.5 samples:

  • 16
  • 14
  • 12
  • 10
  • 8
  • 6
  • 4
  • 2

5000 10000 15000 20000

slide-25
SLIDE 25

Lagrange Interpolation Order 4

Julius Smith LAC-2008 – 19 / 66

Amplitude Responses for a range of requested delays [1.5 : 0.1 : 2.5]:

  • 7
  • 6
  • 5
  • 4
  • 3
  • 2
  • 1

5000 10000 15000 20000

slide-26
SLIDE 26

Lagrange Interpolation Order 4

Julius Smith LAC-2008 – 20 / 66

Phase Delays for a range of requested delays [1.5 : 0.1 : 2.5, 2.5001]:

1.6 1.8 2 2.2 2.4 2.6 2.8 5000 10000 15000 20000

slide-27
SLIDE 27

Thiran Allpass Interpolation Order 4

Julius Smith LAC-2008 – 21 / 66

Phase Delays for a range of requested delays [1.5 : 0.1 : 2.5, 2.5001]:

3.6 3.8 4 4.2 4.4 4.6 4.8 5000 10000 15000 20000

slide-28
SLIDE 28

Thiran Allpass Interpolation Order 4

Julius Smith LAC-2008 – 22 / 66

Amplitude Responses for a range of requested delays [1.5 : 0.1 : 2.5]:

  • 6e-06
  • 4e-06
  • 2e-06

2e-06 4e-06 6e-06 8e-06 5000 10000 15000 20000

slide-29
SLIDE 29

Lagrange Interpolation Order 5

Julius Smith LAC-2008 – 23 / 66

Amplitude Responses for a range of requested delays [2 : 0.1 : 3.5]:

  • 12
  • 10
  • 8
  • 6
  • 4
  • 2

5000 10000 15000 20000

slide-30
SLIDE 30

Lagrange Interpolation Order 5

Julius Smith LAC-2008 – 24 / 66

Phase Delays for a range of requested delays [2 : 0.1 : 3.5]:

2 2.2 2.4 2.6 2.8 3 3.2 3.4 3.6 5000 10000 15000 20000

slide-31
SLIDE 31

Lagrange Interpolation Order 4

Julius Smith LAC-2008 – 25 / 66

Amplitude Responses for a range of requested delays [2 : 0.1 : 3.5]:

  • 7
  • 6
  • 5
  • 4
  • 3
  • 2
  • 1

5000 10000 15000 20000

slide-32
SLIDE 32

Lagrange Interpolation Order 4

Julius Smith LAC-2008 – 26 / 66

Phase Delays for a range of requested delays [2 : 0.1 : 3.5]:

2 2.2 2.4 2.6 2.8 3 3.2 3.4 5000 10000 15000 20000

slide-33
SLIDE 33

EKS Dynamic Level Filter

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 27 / 66

slide-34
SLIDE 34

Dynamic Level Filter

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter

  • Dynamic Level Filter
  • DLF Derivation
  • Bilinear Transform
  • DLF Response
  • Faust Code

Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 28 / 66

In real strings, the spectral centroid typically rises as plucking/striking becomes more energetic. The EKS dynamic-level lowpass filter

HL,ω1(z) = 1 − RL(ω1) 1 − RL(ω1)z−1

qualitatively models this phenomenon

  • “Spectral modeling filter”
  • Not needed in a true physical model
  • Useful with noise-burst string excitation (KS, EKS)
slide-35
SLIDE 35

Dynamic Level Filter

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter

  • Dynamic Level Filter
  • DLF Derivation
  • Bilinear Transform
  • DLF Response
  • Faust Code

Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 28 / 66

In real strings, the spectral centroid typically rises as plucking/striking becomes more energetic. The EKS dynamic-level lowpass filter

HL,ω1(z) = 1 − RL(ω1) 1 − RL(ω1)z−1

qualitatively models this phenomenon

  • “Spectral modeling filter”
  • Not needed in a true physical model
  • Useful with noise-burst string excitation (KS, EKS)
slide-36
SLIDE 36

Dynamic Level Filter

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter

  • Dynamic Level Filter
  • DLF Derivation
  • Bilinear Transform
  • DLF Response
  • Faust Code

Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 28 / 66

In real strings, the spectral centroid typically rises as plucking/striking becomes more energetic. The EKS dynamic-level lowpass filter

HL,ω1(z) = 1 − RL(ω1) 1 − RL(ω1)z−1

qualitatively models this phenomenon

  • “Spectral modeling filter”
  • Not needed in a true physical model
  • Useful with noise-burst string excitation (KS, EKS)
slide-37
SLIDE 37

Dynamic Level Filter

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter

  • Dynamic Level Filter
  • DLF Derivation
  • Bilinear Transform
  • DLF Response
  • Faust Code

Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 28 / 66

In real strings, the spectral centroid typically rises as plucking/striking becomes more energetic. The EKS dynamic-level lowpass filter

HL,ω1(z) = 1 − RL(ω1) 1 − RL(ω1)z−1

qualitatively models this phenomenon

  • “Spectral modeling filter”
  • Not needed in a true physical model
  • Useful with noise-burst string excitation (KS, EKS)
slide-38
SLIDE 38

DLF Derivation

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter

  • Dynamic Level Filter
  • DLF Derivation
  • Bilinear Transform
  • DLF Response
  • Faust Code

Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 29 / 66

HL,ω1(z) = L · L0(L) + (1 − L) · H1(z)

where H1(z) ≈ analog 1st-order Butterworth lowpass:

H1(s) ∆ = ω1 s + ω1

  • Unity dc gain
  • −3 dB gain at s = jω1
  • ω1 = 2πf1 = fundamental frequency (rad/sec)
  • Rolls off −6 dB/octave for ω ≫ ω1.
  • L (“dynamic level”) = gain at Nyquist limit
  • L0 = low-frequency attenuation:

L0(L) = L1/3

slide-39
SLIDE 39

Bilinear Transform

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter

  • Dynamic Level Filter
  • DLF Derivation
  • Bilinear Transform
  • DLF Response
  • Faust Code

Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 30 / 66

s = α1 − z−1 1 + z−1 ⇒ H1(z) = ω1 α 1−z−1

1+z−1 + ω1

= ω1 α + ω1 · 1 + z−1 1 − pz−1

where

p = α − ω1 α + ω1

To map analog break frequency exactly:

α = ω1 tan ω1T

2

slide-40
SLIDE 40

Dynamic Level Filter for Various Levels

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter

  • Dynamic Level Filter
  • DLF Derivation
  • Bilinear Transform
  • DLF Response
  • Faust Code

Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 31 / 66

  • 60
  • 50
  • 40
  • 30
  • 20
  • 10

100 1000 10000 Gain (dB) Frequency (Hz)

  • L = −60 dB, −40 dB, −20 dB, and −10 dB
  • DC level = 1/3 Nyquist-limit level in dB
slide-41
SLIDE 41

Dynamic Level Lowpass in Faust

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter

  • Dynamic Level Filter
  • DLF Derivation
  • Bilinear Transform
  • DLF Response
  • Faust Code

Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 32 / 66

levelfilter(L,freq,x) = (L * L0 * x) + ((1.0-L) * lp2out(x)) with { L0 = pow(L,1/3); Lw = PI*freq/SR; // = w1 T / 2 Lgain = Lw / (1.0 + Lw); Lpole2 = (1.0 - Lw) / (1.0 + Lw); lp2out = *(Lgain) : + ~ *(Lpole2); };

To intensify the effect, Nd units can be used in series, with the desired Nyquist-limit level divided by Nd for each section:

levelfilterN(Nd,freq,L) = seq(i,Nd,levelfilter((L/Nd),freq));

slide-42
SLIDE 42

Overdrive and Feedback

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 33 / 66

slide-43
SLIDE 43

Cubic Nonlinearity

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback

  • Cubic Nonlinearity
  • Faust Code
  • Overdrive/Feedback
  • Faust Code

Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 34 / 66

f(x) =        − 2

3,

x ≤ −1 x − x3

3 ,

−1 ≤ x ≤ 1

2 3,

x ≥ 1

−2 −1.5 −1 −0.5 0.5 1 1.5 2 −0.8 −0.6 −0.4 −0.2 0.2 0.4 0.6 0.8 x=−1:0.01:1; plot([−(2/3)*ones(1,100), x−x.3/3, (2/3)*ones(1,100)]) x(n) f(x(n))

slide-44
SLIDE 44

Clipping Cubic Nonlinearity in Faust (effect.lib)

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback

  • Cubic Nonlinearity
  • Faust Code
  • Overdrive/Feedback
  • Faust Code

Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 35 / 66

−2 −1.5 −1 −0.5 0.5 1 1.5 2 −0.8 −0.6 −0.4 −0.2 0.2 0.4 0.6 0.8 x=−1:0.01:1; plot([−(2/3)*ones(1,100), x−x.3/3, (2/3)*ones(1,100)]) x(n) f(x(n))

cubicnl(drive,offset) = +(offset) : *(pregain) : clip(-1,1) : cubic : dcblocker with { pregain = pow(10.0,2*drive); clip(lo,hi) = min(hi) : max(lo); cubic(x) = x - x*x*x/3; };

slide-45
SLIDE 45

Amplifier Overdrive and Feedback

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback

  • Cubic Nonlinearity
  • Faust Code
  • Overdrive/Feedback
  • Faust Code

Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 36 / 66 Gain Feedback Amplifier

. . .

Pre-distortion output level Pre-distortion gain Output Signal Distortion output level Nonlinear Distortion Amplifier Feedback Delay String 1 String N

Distortion output signal often further filtered by an amplifier cabinet filter, representing speaker cabinet, driver responses, etc.

slide-46
SLIDE 46

Distortion and Amplifier Feedback in Faust (freeax.dsp)

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback

  • Cubic Nonlinearity
  • Faust Code
  • Overdrive/Feedback
  • Faust Code

Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 37 / 66

D = hslider("distortion drive",0.629,0,10,0.01); ampfbgain = hslider("Amp feedback gain", 0.001,0,0.01,0.001); ampfbfres = hslider("Amp feedback 1st resonance Hz", 100,40,2000,1); ampfbdelay = int(SR/ampfbfres); // no interpolation ampfb = *(ampfbgain) : delay(4096,ampfbdelay); ... process = filtered_excitation : (+ : stringloop : cubicnl(D,0) : speakerbp(sf1,sf2)) ~ ampfb : *(level) <: _,_ : widthdelay : panner;

slide-47
SLIDE 47

Speaker Bandpass

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 38 / 66

slide-48
SLIDE 48

Speaker Bandpass

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 39 / 66

General “spectral window” of a Celestion 12¨ speaker:

  • 100
  • 80
  • 60
  • 40
  • 20

1 10 100 1000 10000 100000

import("filter.lib"); dcblockerat(130) : dcblockerat(130) : lowpass4(5000);

slide-49
SLIDE 49

Coupled Strings

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 40 / 66

slide-50
SLIDE 50

Two Ideal Coupled Strings at a Common Bridge Impedance

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings

  • Two Strings
  • Waveguide Model
  • Faust Code
  • Simplified Coupling

Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 41 / 66

  • . . .

. . . +

Fb(s) V −

1 (s)

V +

1 (s)

V +

2 (s)

V −

2 (s)

Vb(s) = V1(s) = V2(s) = Fb(s)

Rb(s)

Rb(s)

v−

1 (t)

= vb(t) − v+

1 (t)

v−

2 (t)

= vb(t) − v+

2 (t)

Vb(s) = Hb(s)[R1V +

1 (s) + R2V + 2 (s)], where

Ri =

wave impedance of string i, and

Hb(s)

= 2 Rb(s) + R1 + R2

slide-51
SLIDE 51

Digital Waveguide Model

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings

  • Two Strings
  • Waveguide Model
  • Faust Code
  • Simplified Coupling

Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 42 / 66 −vb(n) v+

1 (n)

v+

2 (n)

Output −v−

1 (n)

−v−

2 (n)

LPF 1 LPF 2

N1 samples delay N2 samples delay −Hb(z)

Faust Code

// Detuning of coupled planes of vibration: detune = hslider("detuning percent", 1, 0, 10, 0.1); d1 = fdelay1(Pmax, P-2); // P = period in samples d2 = delay(Pmax, P*(1.0 - 0.01*detune)-2); stringloop = coupledstrings(d1,d2);

slide-52
SLIDE 52

Coupled Strings in Faust

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings

  • Two Strings
  • Waveguide Model
  • Faust Code
  • Simplified Coupling

Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 43 / 66

  • d1 = fdelay1(Pmax, P-2); // P = period in samples

d2 = delay(Pmax, P*(1.0 - 0.01*detune)-2); stringloop = ( _,+ : ((d2 <: _,_),(d1 <: _,_)) : (_, (bridgefilter <: _,_) ,_) : +,+) ~ (*(g2),*(g1)) ;

slide-53
SLIDE 53

Simplified String Coupling

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings

  • Two Strings
  • Waveguide Model
  • Faust Code
  • Simplified Coupling

Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 44 / 66

  • stringloop = (+ <: d1,d2 : + : *(0.5))

~ dampingfilter;

slide-54
SLIDE 54

Wah Pedal

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 45 / 66

slide-55
SLIDE 55

CryBaby Measurements at Three Pedal Angles

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal

  • CryBaby
  • RTFMT
  • Measuring Q, F
  • Q, F Samples
  • invfreqsmethod 1
  • invfreqsmethod 2
  • minphaseir 1
  • minphaseir 2
  • Faust CryBaby
  • Moog VCF
  • Faust Implementation

Faust Libraries References

Julius Smith LAC-2008 – 46 / 66

18000 16000 14000 12000 10000 8000 6000 4000 2000 40 35 30 25 20 15 10 Frequency (rad/sec) Magnitude (dB) Measured Modeled

(a) Rocked Back Full

18000 16000 14000 12000 10000 8000 6000 4000 2000 30 28 26 24 22 20 18 16 14 12 10 Frequency (rad/sec) Magnitude (dB) Measured Modeled

(b) Middle Angle

18000 16000 14000 12000 10000 8000 6000 4000 2000 18 16 14 12 10 8 6 4 2

  • 2
  • 4

Frequency (rad/sec) Magnitude (dB) Measured Modeled

(c) Rocked Forward Full

slide-56
SLIDE 56

RealSimple Transfer Function Measurement Toolbox

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal

  • CryBaby
  • RTFMT
  • Measuring Q, F
  • Q, F Samples
  • invfreqsmethod 1
  • invfreqsmethod 2
  • minphaseir 1
  • minphaseir 2
  • Faust CryBaby
  • Moog VCF
  • Faust Implementation

Faust Libraries References

Julius Smith LAC-2008 – 47 / 66

Measures acoustic impulse responses using Pd and Octave:

http://ccrma.stanford.edu/realsimple/imp meas/ sinesweeps.pd

slide-57
SLIDE 57

Octave Code for CryBaby Q and Resonance Measurement

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal

  • CryBaby
  • RTFMT
  • Measuring Q, F
  • Q, F Samples
  • invfreqsmethod 1
  • invfreqsmethod 2
  • minphaseir 1
  • minphaseir 2
  • Faust CryBaby
  • Moog VCF
  • Faust Implementation

Faust Libraries References

Julius Smith LAC-2008 – 48 / 66

f1 = 40; f2 = 10000; % used in filename f1z = 300; f2z = 3000; % zoom-in range del = [3000 2000 2000]; % system delay (samples) dur = [2048 1024 1024]; % impulse-response duration dir = sprintf(’wah-2sec-%dHz-%dkHz’,f1,f2/1000); Q = zeros(1,3); wp = zeros(1,3); for i=1:3 ifn = sprintf(’%s/wah%dImpResp.wav’,dir,i-1); [wahir,fs] = wavread(ifn); wi = wahir(del(i)+1:del(i)+dur(i)); [Qi,wpi,Hp,Hd,w] = invfreqsmethod(wi,f1z,f2z,fs); Q(i) = Qi; wp(i) = wpi; disp(’PAUSING - RETURN to continue’); pause; end Q % print out estimated Q values fp = wp/(2*pi) % and estimated pole frequencies

slide-58
SLIDE 58

CryBaby Q and Resonance Measurement Results

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal

  • CryBaby
  • RTFMT
  • Measuring Q, F
  • Q, F Samples
  • invfreqsmethod 1
  • invfreqsmethod 2
  • minphaseir 1
  • minphaseir 2
  • Faust CryBaby
  • Moog VCF
  • Faust Implementation

Faust Libraries References

Julius Smith LAC-2008 – 49 / 66

Estimated Q values:

Q = [9.4, 4.0, 1.9]

Estimated pole frequencies:

fp = [464, 838, 2252]

Hz Analog CryBaby model (ωp = 2πfp):

H(s) = s − ξ

  • s

ωp

2 + 2

Q

  • s

ωp

  • + 1

Digital model derived using z = exp(sT) ≈ 1 + sT (low-frequency resonance assumed)

slide-59
SLIDE 59

Octave function invfreqsmethod

Julius Smith LAC-2008 – 50 / 66

function [Q,wp] = invfreqsmethod(h,f1,f2,fs); % % INVFREQSMETHOD - use invfreqs to estimate Q and resonance % frequency from a resonator impulse response % USAGE: % [Q,wp] = invfreqsmethod(h,f1,f2,fs); % where % % h = impulse response (power of 2 length preferred) % f1 = lowest frequency of interest (Hz) % f2 = highest frequency of interest (Hz) % fs = sampling rate (Hz) % Q = estimated resonator Quality factor % wp = estimated pole frequency (rad/sec)

slide-60
SLIDE 60

Octave function invfreqsmethod, continued

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal

  • CryBaby
  • RTFMT
  • Measuring Q, F
  • Q, F Samples
  • invfreqsmethod 1
  • invfreqsmethod 2
  • minphaseir 1
  • minphaseir 2
  • Faust CryBaby
  • Moog VCF
  • Faust Implementation

Faust Libraries References

Julius Smith LAC-2008 – 51 / 66

h = minphaseir(h); H = fft(h); ... [Bh,Ah] = invfreqs(H(zoom),w,2,2,1 ./w.^2); % Denominator to canonical form % A(s) = s^2 + (wp/Q) s + wp^2: Ahn = Ah/Ah(1); wp = sqrt(Ahn(3)); Q = wp/Ahn(2); ...

slide-61
SLIDE 61

Octave function minphaseir

Julius Smith LAC-2008 – 52 / 66

function [hmp] = minphaseir(h) % % MINPHASEIR - Convert a real impulse response to its % minimum phase counterpart % USAGE: % [hmp] = minphaseir(h) % where % % h = impulse response (any length - will be zero-padded) % hmp = min-phase impulse response (at zero-padded length)

slide-62
SLIDE 62

Octave function minphaseir, continued

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal

  • CryBaby
  • RTFMT
  • Measuring Q, F
  • Q, F Samples
  • invfreqsmethod 1
  • invfreqsmethod 2
  • minphaseir 1
  • minphaseir 2
  • Faust CryBaby
  • Moog VCF
  • Faust Implementation

Faust Libraries References

Julius Smith LAC-2008 – 53 / 66

nh = length(h); nfft = 2^nextpow2(5*nh); Hzp = fft(h,nfft); Hmpzp = exp(fft(fold(ifft(log(clipdb(Hzp,-100)))))); hmpzp = ifft(Hmpzp); hmp = real(hmpzp(1:nh));

slide-63
SLIDE 63

Faust Digital CryBaby (effect.lib)

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal

  • CryBaby
  • RTFMT
  • Measuring Q, F
  • Q, F Samples
  • invfreqsmethod 1
  • invfreqsmethod 2
  • minphaseir 1
  • minphaseir 2
  • Faust CryBaby
  • Moog VCF
  • Faust Implementation

Faust Libraries References

Julius Smith LAC-2008 – 54 / 66

crybaby(wah) = *(gs(s)) : tf2(1,-1,0,a1s(s),a2s(s)) with { // wah = pedal angle in [0,1] s = 0.999; // smoothing parameter (pole location) Q = pow(2.0,(2.0*(1.0-wah)+1.0)); // Resonance Q, fr = 450.0*pow(2.0,2.3*wah); // tuning, and g = 0.1*pow(4.0,wah); // gain (optional) // Biquad fit using z = exp(s T) -> 1 + sT frn = fr/SR; // pole frequency (cycles per sample) R = 1 - PI*frn/Q; // pole radius theta = 2*PI*frn; // pole angle a1 = 0-2.0*R*cos(theta); // biquad coeff a2 = R*R; // biquad coeff a1s(s) = a1 : smooth(s); // "dezippering" a2s(s) = a2 : smooth(s); gs(s) = g : smooth(s); };

slide-64
SLIDE 64

Moog VCF

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal

  • CryBaby
  • RTFMT
  • Measuring Q, F
  • Q, F Samples
  • invfreqsmethod 1
  • invfreqsmethod 2
  • minphaseir 1
  • minphaseir 2
  • Faust CryBaby
  • Moog VCF
  • Faust Implementation

Faust Libraries References

Julius Smith LAC-2008 – 55 / 66 Σ

G1(s)

x(t) y(t)

  • k

G1(s) G1(s) G1(s)

G1(s) = 1 1 + s/ωc

Controls

  • Pole location s = −ωc: controls cut-off frequency
  • Feedback gain k ≤ 4: controls resonance

10 10

1

10

2

−40 −20 20 Frequency (rad/sec) Gain dB

slide-65
SLIDE 65

Moog VCF in Faust (effect.lib)

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal

  • CryBaby
  • RTFMT
  • Measuring Q, F
  • Q, F Samples
  • invfreqsmethod 1
  • invfreqsmethod 2
  • minphaseir 1
  • minphaseir 2
  • Faust CryBaby
  • Moog VCF
  • Faust Implementation

Faust Libraries References

Julius Smith LAC-2008 – 56 / 66

  • nepole(p) =

*(1.0-p) : + ~ *(p); moogvcf(mk,p) = (+ : onepole(p) : onepole(p) : onepole(p) : onepole(p)) ~ *(mk);

4th Order Wah Effect:

wah4(fr) = moogvcf(-3.8,pole(fr)) with { pole(fr) = 1.0-fr*2.0*PI/SR; }; Q = 3.8 can be changed as preferred

slide-66
SLIDE 66

Faust Signal Processing Libraries

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 57 / 66

slide-67
SLIDE 67

Faust Signal Processing Libraries

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries

  • filter.lib
  • filter.lib,

continued

  • filter.lib,

continued

  • filter.lib,

continued

  • effect.lib —

Current Contents

  • osc.lib — Current

Contents

  • osc.lib —

continued References

Julius Smith LAC-2008 – 58 / 66

The following Faust libraries were developed in the course of this work:

  • filter.lib - digital filters of various types
  • effect.lib - digital audio effects
  • sc.lib - filter-based oscillators (sine and sawtooth)
slide-68
SLIDE 68

filter.lib

Julius Smith LAC-2008 – 59 / 66

Simple first-order filters (mainly for readability):

zero(z) = _ <: _,mem : _,*(z) : -; pole(p) = + ~ *(p); integrator = + ~ _ ; tau2pole(tau) = exp(-1.0/(tau*SR)); smooth(s) = *(1.0 - s) : + ~ *(s); dcblocker = zero(1) : pole(0.995); dcblockerat(fb); // pole set for desired "break frequency"

Comb Filters:

ffcombfilter(maxdel,del,g) = _ <: delay(maxdel,del) : *(g): +; fbcombfilter(maxdel,idel,g) = (+ : delay(maxdel,idel)) ~ *(g);

slide-69
SLIDE 69

filter.lib, continued

Julius Smith LAC-2008 – 60 / 66

Elementary Transfer Functions in Direct Form:

tf1(b0,b1,a1) = _ <: *(b0), (mem : *(b1)) :> + ~ *(0-a1); tf2(b0,b1,b2,a1,a2) = sub ~ conv2(a1,a2) : conv3(b0,b1,b2) ... tf3(b0,b1,b2,b3,a1,a2,a3) = sub ~ conv3(a1,a2,a3) : conv4( ... tf4(b0,b1,b2,b3,b4,a1,a2,a3,a4) = sub ~ conv4(a1,a2,a3,a4) ...

Numerically Robust Quadrature Resonators (for Oscillators):

nlf2(f,r,x);// 2nd-order normalized ladder resonator wgr(f,r,x); // Transformer-normalized waveguide resonator

slide-70
SLIDE 70

filter.lib, continued

Julius Smith LAC-2008 – 61 / 66

Digital filters specified by their ANALOG transfer functions:

tf1s(b0,a0,w1); // 1st-order section H(s) = b0 / (s + a0) tf2s(b1,b0,a1,a0,w1); // 2nd-order section (biquad)

Variable cut-off Butterworth lowpass filters:

lowpass1(fc) = tf1s(1,1,2*PI*fc); // 1st-order lowpass2(fc) = tf2s(0,1,sqrt(2),1,2*PI*fc); // 2nd-order lowpass3(fc) = tf2s(0,1,1,1,w1) : tf1s(1,1,w1)... // 3rd order lowpass4(fc) = tf2s(0,1,a11s,1,w1) : tf2s( ... // 4th order

Parametric equalizer section:

pareq(Q,F,G) = tf2(...); // (adapted from bandfilter.dsp)

slide-71
SLIDE 71

filter.lib, continued

Julius Smith LAC-2008 – 62 / 66

Interpolating delay lines generalizing fdelay(n,d,x) Lagrange polynomial interpolation:

fdelay1(n,d,x); // 1st-order Lagrange interpolation fdelay2(n,d,x); // 2nd-order fdelay3(n,d,x); // 3rd-order fdelay4(n,d,x); // 4th-order

Thiran allpass interpolation:

fdelay1a(n,d,x); // 1st-order allpass interpolation fdelay2a(n,d,x); // 2nd-order fdelay3a(n,d,x); // 3rd-order fdelay4a(n,d,x); // 4th-order

slide-72
SLIDE 72

effect.lib — Current Contents

Julius Smith LAC-2008 – 63 / 66

Dynamic Level Lowpass Filter

levelfilter(level,freq); // from EKS levelfilterN(N,freq,L) = seq(i,N,levelfilter((L/N),freq));

Overdrive

cubicnl(drive,offset);

Wah Pedals and VCFs

crybaby(wah); moogvcf(Q,fr); wah4(fr) = moogvcf(3.8,fr);

Audio Speaker Bandpass

speakerbp(f1,f2) // "Loudspeaker Bandpass" = dcblockerat(f1) : dcblockerat(f1) : lowpass4(f2);

slide-73
SLIDE 73
  • sc.lib — Current Contents

Julius Smith LAC-2008 – 64 / 66

Misc.

impulse = 1-1’; sawtooth(freq);

Filter-Based oscillators osc*(f)

  • scb(f) = impulse : tf2(1,0,0,a1,1) ... ; // ringing biquad
  • scs(f); // ringing state-variable filter

// = "magic circle", or "modified coupled form"

slide-74
SLIDE 74
  • sc.lib — continued

Julius Smith LAC-2008 – 65 / 66

Undamped Second-Order Normalized Ladder Resonator:

  • scrs(f) =

impulse : nlf2(f,1) : _,!; // sine

  • scrc(f) =

impulse : nlf2(f,1) : !,_; // cosine

  • scrq(f) =

impulse : nlf2(f,1); // quadrature

  • scr = oscrs;

// default = sine

Undamped Second-order Transformer-Normalized Waveguide Resonator:

  • scwc(fr) = 1-1’ : wgr(fr,1) : _,!; // cosine (1 mpy/sample)
  • scws(fr) = 1-1’ : wgr(fr,1) : !,_; // sine (2nd scaling mpy)
  • scq(fr)

= 1-1’ : wgr(fr,1); // phase quadrature outs

  • scw = oscwc;
slide-75
SLIDE 75

Online Resources

Outline Why Now? EKS Intro Pick Position Comb Damping Filter Tuning Filter Dynamic Level Filter Overdrive, Feedback Speaker Bandpass Coupled Strings Wah Pedal Faust Libraries References

Julius Smith LAC-2008 – 66 / 66

  • RealSimple module (including software download):

http://ccrma.stanford.edu/realsimple/faust strings/

  • Online Book (physics-based synthesis of musical instruments):

http://ccrma.stanford.edu/~jos/pasp/