View Single Post
Old 02-08-2019, 02:05 PM   #3
ErBird
Human being with feelings
 
Join Date: Jan 2017
Location: Los Angeles
Posts: 1,161
Default

Still not working, but here it is. Will update if I work out the problem.

Code:
desc:Bassman Tone Stack ---Faulty. Do not use.
author:Erich M. Burg

Uses the method described in:
"Discretization of the '59 Fender Bassman Tone Stack"
David T. Yeh and Julius O. Smith
DAFx-06, Montreal, Canada, September 18-20, 2006

slider1:0.5<0.001,0.999,0.001>Bass
slider2:0.5<0.001,0.999,0.001>Mid
slider3:0.5<0.001,0.999,0.001>Treble

slider5:250<0,500,1>R1 (kΩ)
slider6:1000<0,2000,1>R2 (kΩ)
slider7:25<0,200,1>R3 (kΩ)
slider8:56<0,200,1>R4 (kΩ)
slider9:25<1,100,1>C1 (nF)
slider10:20<1,100,1>C2 (nF)
slider11:20<1,100,1>C3 (nF)

@slider
c = 2*srate;
l = slider1;
m = slider2;
t = slider3;

R1 = slider5*1000;
R2 = slider6*1000;
R3 = slider7*1000;
R4 = slider8*1000;
C1 = slider9*10^-9;
C2 = slider10*10^-9;
C3 = slider11*10^-9;

b_1 = t*C1*R1 + m*C3*R3 + l*(C1*R2 + C2*R2) + (C1*R3 + C2*R3);

b_2 = t*(C1*C2*R1*R4 + C1*C3*R1*R4) - m^2*(C1*C3*(R3^2) + C2*C3*(R3^2))
    + m*(C1*C3*R1*R3 + C1*C3*(R3^2) + C2*C3*(R3^2))
    + l*(C1*C2*R1*R2 + C1*C2*R2*R4 + C1*C3*R2*R4)
    + l*m*(C1*C3*R2*R3 + C2*C3*R2*R3)
    + (C1*C2*R1*R3 + C1*C2*R3*R4 + C1*C3*R3*R4);

b_3 = l*m*(C1*C2*C3*R1*R2*R3 + C1*C2*C3*R2*R3*R4)
    - (m^2)*(C1*C2*C3*R1*(R3^2) + C1*C2*C3*(R3^2)*R4)
    + m*(C1*C2*C3*R1*(R3^2) + C1*C2*C3*(R3^2)*R4)
    + t*C1*C2*C3*R1*R3*R4 - t*m*C1*C2*C3*R1*R3*R4
    + t*l*C1*C2*C3*R1*R2*R4;

a_0 = 1;

a_1 = (C1*R1 + C1*R3 + C2*R3 + C2*R4 + C3*R4)
    + m*C3*R3 + l*(C1*R2 + C2*R2);

a_2 = m*(C1*C3*R1*R3 - C2*C3*R3*R4 + C1*C3*(R3^2)
    + C2*C3*(R3^2)) + l*m*(C1*C3*R2*R3 + C2*C3*R2*R3)
    - (m^2)*(C1*C3*(R3^2) + C2*C3*(R3^2)) + l*(C1*C2*R2*R4
    + C1*C2*R1*R2 + C1*C3*R2*R4 + C2*C3*R2*R4)
    + (C1*C2*R1*R4 + C1*C3*R1*R4 + C1*C2*R3*R4
    + C1*C2*R1*R3 + C1*C3*R3*R4 + C2*C3*R3*R4);

a_3 = l*m*(C1*C2*C3*R1*R2*R3 + C1*C2*C3*R2*R3*R4)
    - (m^2)*(C1*C2*C3*R1*(R3^2) + C1*C2*C3*(R3^2)*R4)
    + m*(C1*C2*C3*(R3^2)*R4 + C1*C2*C3*R1*(R3^2)
    - C1*C2*C3*R1*R3*R4) + l*C1*C2*C3*R1*R2*R4
    + C1*C2*C3*R1*R3*R4;

A0 = -a_0 - a_1*c - a_2*(c^2) - a_3*(c^3);
A1 = -3*a_0 - a_1*c + a_2*(c^2) + 3*a_3*(c^3);
A2 = -3*a_0 + a_1*c + a_2*(c^2) - 3*a_3*(c^3);
A3 = -a_0 + a_1*c - a_2*(c^2) + a_3*(c^3);
B0 = -b_1*c - b_2*(c^2) - b_3*c^3;
B1 = -b_1*c + b_2*(c^2) + 3*b_3*(c^3);
B2 = b_1*c + b_2*(c^2) - 3*b_3*(c^3);
B3 = b_1*c - b_2*(c^2) + b_3*(c^3);

A1 /= A0;
A2 /= A0;
A3 /= A0;
B0 /= A0;
B1 /= A0;
B2 /= A0;
B3 /= A0;

@sample
//Left--------------------------------------------
spl0_old = spl0;

spl0 = B0*spl0 + s1_left;

s1_left = s2_left + B1*spl0_old - A1*spl0;
s2_left = s3_left + B2*spl0_old - A2*spl0;
s3_left =           B3*spl0_old - A3*spl0;

//Right-------------------------------------------
spl1_old = spl1;

spl1 = B0*spl1 + s1_right;

s1_right = s2_right + B1*spl1_old - A1*spl1;
s2_right = s3_right + B2*spl1_old - A2*spl1;
s3_right =            B3*spl1_old - A3*spl1;

Last edited by ErBird; 02-11-2019 at 01:09 PM.
ErBird is offline   Reply With Quote