// Reverb Hall 2, using primes

slider1:0<-30,12,0.1>Dry (dB)
slider2:-6<-30,12,0.1>Wet (dB)
slider3:1<0,10,0.001>Length (s)
slider4:0<0,100,1>Pre-Delay (ms)
slider5:2000<1000,8000,1>Highdamp (Hz)
slider6:0<0,1,1{mono,stereo}>Mode

slider11:20<1,25,1>xth Prime
slider12:18<1,25,1>+y 0
slider13:16<1,25,1>+y 1
slider14:14<1,25,1>+y 2
slider15:12<1,25,1>+y 3
slider16:10<1,25,1>+y 4
slider17:8<1,25,1>+y 5
slider18:6<1,25,1>+y 6
slider19:7<1,25,1>+y 7
slider20:9<1,25,1>+y 8
slider21:5<1,25,1>+y 9
slider22:3<1,25,1>+y 10

in_pin:L in
in_pin:R in
out_pin:L out
out_pin:R out

@init
tmp1 = tmp2 = 0;

g1 = g2 = g3 = g4 = 0.62;
g5 = 0.62;
g7 = 0.62;
g9 = 0.62;
g11 = 0.62;

@slider
dry = slider1 <= -30.0 ? 0.0 : 10^(slider1/20);
wet = slider2 <= -30.0 ? 0.0 : 10^(slider2/20);
d = exp( -2*$pi*slider5/srate );

primenumber=(slider11-1)^2+slider11+40;
primenumber2= primenumber+(slider12-1)^2+slider12+40;
primenumber3= primenumber2+(slider13-1)^2+slider13+40;
primenumber4= primenumber3+(slider14-1)^2+slider14+40;
primenumber5= primenumber4+(slider15-1)^2+slider15+40;
primenumber6= primenumber5+(slider16-1)^2+slider16+40;
primenumber7= primenumber6+(slider17-1)^2+slider17+40;
primenumber8= primenumber7+(slider18-1)^2+slider18+40;
primenumber9= primenumber8+(slider19-1)^2+slider19+40;
primenumber10= primenumber9+(slider20-1)^2+slider20+40;
primenumber11= primenumber10+(slider21-1)^2+slider21+40;
primenumber12= primenumber11+(slider22-1)^2+slider22+40;

l0 = slider4/1000*srate + 1|0; // added "|0"
l1 = primenumber;
l2 = primenumber2;
l3 = primenumber3;
l4 = primenumber4;
l5 = primenumber5;
l6 = primenumber6;
l7 = primenumber7;
l8 = primenumber8;
l9 = primenumber9;
l10 = primenumber10;
l11 = primenumber11;
l12 = primenumber12;

f = exp( log(0.001) / (slider3*srate / (l5+l6+l7+l8)) );

Rl0 = slider4/1000*srate + 1|0; // added "|0"
Rl1 = primenumber;
Rl2 = primenumber-37;
Rl3 = primenumber+37;
Rl4 = primenumber-37;
Rl5 = l5+37;
Rl6 = l6-37;
Rl7 = l7+37;
Rl8 = l8-37;
Rl9 = l9+37;
Rl10 = l10-37;
Rl11 = l11+37;
Rl12 = l12-37;

b0 = 0;
b1 = b0+l0;
b2 = b1+l1;
b3 = b2+l2;
b4 = b3+l3;
b5 = b4+l4;
b6 = b5+l5;
b7 = b6+l6;
b8 = b7+l7;
b9 = b8+l8;
b10 = b9+l9;
b11 = b10+l10;
b12 = b11+l11;

Rb0 = b12+l12;
Rb1 = Rb0+Rl0;
Rb2 = Rb1+Rl1;
Rb3 = Rb2+Rl2;
Rb4 = Rb3+Rl3;
Rb5 = Rb4+Rl4;
Rb6 = Rb5+Rl5;
Rb7 = Rb6+Rl6;
Rb8 = Rb7+Rl7;
Rb9 = Rb8+Rl8;
Rb10 = Rb9+Rl9;
Rb11 = Rb10+Rl10;
Rb12 = Rb11+Rl11;

@sample
input = spl0;
Rinput = spl1;

/* LEFT CHANNEL */
in = spl0;
in0=in;out0=b0[p0];b0[p0]=in0;p0=(p0+1)%l0;
in1=out0;out1=b1[p1]-g1*in1;b1[p1]=in1+g1*out1;p1=(p1+1)%l1;
in2=out1;out2=b2[p2]-g2*in2;b2[p2]=in2+g2*out2;p2=(p2+1)%l2;
in3=out2;out3=b3[p3]-g3*in3;b3[p3]=in3+g3*out3;p3=(p3+1)%l3;
in4=out3;out4=b4[p4]-g4*in4;b4[p4]=in4+g4*out4;p4=(p4+1)%l4;

tmp1 = out4 + out12 * f;
tmp2 = out4 + out8 * f;

tmp1 = t1 = tmp1 + d * (t1-tmp1);
tmp2 = t2 = tmp2 + d * (t2-tmp2);

in5=tmp1;out5=b5[p5]-g5*in5;b5[p5]=in5+g5*out5;p5=(p5+1)%l5;
in6=out5;out6=b6[p6];b6[p6]=in6;p6=(p6+1)%l6;
in7=out6;out7=b7[p7]-g7*in7;b7[p7]=in7+g7*out7;p7=(p7+1)%l7;
in8=out7;out8=b8[p8];b8[p8]=in8;p8=(p8+1)%l8;

in9 =tmp2;out9=b9[p9]-g9*in9;b9[p9]=in9+g9*out9;p9=(p9+1)%l9;
in10=out9;out10=b10[p10];b10[p10]=in10;p10=(p10+1)%l10;
in11=out10;out11=b11[p11]-g11*in11;b11[p11]=in11+g11*out11;p11=(p11+1)%l11;
in12=out11;out12=b12[p12];b12[p12]=in12;p12=(p12+1)%l12;

out = out5 + out7 + out9 + out11;

/* RIGHT CHANNEL */
Rin = spl1;
Rin0=Rin;Rout0=Rb0[Rp0];Rb0[Rp0]=Rin0;Rp0=(Rp0+1)%Rl0;
Rin1=Rout0;Rout1=Rb1[Rp1]-g1*Rin1;Rb1[Rp1]=Rin1+g1*Rout1;Rp1=(Rp1+1)%Rl1;
Rin2=Rout1;Rout2=Rb2[Rp2]-g2*Rin2;Rb2[Rp2]=Rin2+g2*Rout2;Rp2=(Rp2+1)%Rl2;
Rin3=Rout2;Rout3=Rb3[Rp3]-g3*Rin3;Rb3[Rp3]=Rin3+g3*Rout3;Rp3=(Rp3+1)%Rl3;
Rin4=Rout3;Rout4=Rb4[Rp4]-g4*Rin4;Rb4[Rp4]=Rin4+g4*Rout4;Rp4=(Rp4+1)%Rl4;

Rtmp1 = Rout4 + Rout12 * f;
Rtmp2 = Rout4 + Rout8 * f;

Rtmp1 = Rt1 = Rtmp1 + d * (Rt1-Rtmp1);
Rtmp2 = Rt2 = Rtmp2 + d * (Rt2-Rtmp2);

Rin5=Rtmp1;Rout5=Rb5[Rp5]-g5*Rin5;Rb5[Rp5]=Rin5+g5*Rout5;Rp5=(Rp5+1)%Rl5;
Rin6=Rout5;Rout6=Rb6[Rp6];Rb6[Rp6]=Rin6;Rp6=(Rp6+1)%Rl6;
Rin7=Rout6;Rout7=Rb7[Rp7]-g7*Rin7;Rb7[Rp7]=Rin7+g7*Rout7;Rp7=(Rp7+1)%Rl7;
Rin8=Rout7;Rout8=Rb8[Rp8];Rb8[Rp8]=Rin8;Rp8=(Rp8+1)%Rl8;

Rin9=Rtmp2;Rout9=Rb9[Rp9]-g9*Rin9;Rb9[Rp9]=Rin9+g9*Rout9;Rp9=(Rp9+1)%Rl9;
Rin10=Rout9;Rout10=Rb10[Rp10];Rb10[Rp10]=Rin10;Rp10=(Rp10+1)%Rl10;
Rin11=Rout10;Rout11=Rb11[Rp11]-g11*Rin11;Rb11[Rp11]=Rin11+g11*Rout11;Rp11=(Rp11+1)%Rl11;
Rin12=Rout11;Rout12=Rb12[Rp12];Rb12[Rp12]=Rin12;Rp12=(Rp12+1)%Rl12;

Rout = Rout5 + Rout7 + Rout9 + Rout11;

// OUTPUT
slider6 ? (
spl0 = input*dry + out*wet;
spl1 = Rinput*dry + Rout*wet;
):(
spl0 = ((input+Rinput)*0.5)*dry + ((out+Rout)*0.5)*wet;
spl1 = spl0;
);
