1from pylab import *
2from scipy.optimize import newton
3import faustmod
4
5tubelist = ("12AX7_68k", "12AX7_250k",
6            "6V6_68k",   "6V6_250k",
7            "12AU7_68k", "12AU7_250k",
8            "6DJ8_68k",  "6DJ8_250k",
9            "12AT7_68k", "12AT7_250k",
10            )
11tubetab = dict((j,i) for i,j in enumerate(tubelist))
12
13def plot_dsp(dsp):
14    #a = 5*sin(arange(0,10*pi,0.1,dtype=float32))
15    a = zeros(2000,dtype=float32)
16    plot(dsp.compute(a))
17    show()
18
19def timing(dsp):
20    a = 5*sin(arange(0,10*pi,0.1,dtype=float32))
21    dsp.compute(a)
22    print dsp.nanosec_per_sample
23
24def Vk0(dsp):
25    a = zeros(50,dtype=float32)
26    def f(v):
27        dsp["Vk0"] = v
28        return dsp.compute(a)[-1]
29    return newton(f, 0, tol=1e-7)
30
31def show_Vk0(dsp):
32    dsp.init(3000) # low sampling rate because of RC time constant
33    for tb, Rk in (("12AX7_68k",2700), ("12AX7_250k",1500), ("12AX7_250k",820),
34                   ("6V6_68k",2700), ("6V6_250k",1500), ("6V6_250k",820), ("6V6_68k",820), ("6V6_250k",410), ("6V6_68k",410),
35                   ("12AU7_68k",2700), ("12AU7_250k",1500), ("12AU7_250k",820),
36                   ("12AT7_68k",2700), ("12AT7_250k",1500), ("12AT7_250k",820),
37                   ):
38        dsp["tb"] = tubetab[tb]
39        dsp["Rk"] = Rk
40        print "%-10s / %4g: %f" % (tb, Rk, Vk0(dsp))
41    print "vplus = 130:"
42    dsp["vplus"] = 130
43    for tb, Rk in (("12AU7_68k",2700), ("12AU7_250k",1500), ("12AU7_250k",820),
44                   ("6DJ8_68k",2700), ("6DJ8_250k",1500), ("6DJ8_250k",820), ("6DJ8_68k",820),
45                   ):
46        dsp["tb"] = tubetab[tb]
47        dsp["Rk"] = Rk
48        print "%-10s / %4g: %f" % (tb, Rk, Vk0(dsp))
49
50def display_param(dsp):
51    n = int(amax([len(k) for k in dsp.keys()]))
52    for k in dsp.keys():
53        print "%-*s: %g" % (n, k, dsp[k])
54
55if __name__ == "__main__":
56    dsp = faustmod.dsp()
57    display_param(dsp)
58    show_Vk0(dsp)
59    dsp.init(44100)
60    plot_dsp(dsp)
61