annotate bin/curvecalc @ 211:9b360ee8636e

move patchdata into show/, pull out curve.py from curvecalc, more networking.py unification
author drewp@bigasterisk.com
date Sun, 10 Apr 2005 21:34:10 +0000
parents f41004d5a507
children a65a1634fce4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 #!/usr/bin/python
45b12307c695 Initial revision
drewp
parents:
diff changeset
2
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
3 """
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
4 todo: curveview should preserve more objects, for speed maybe
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
5
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
6 """
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
7 from __future__ import division
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
8 import xmlrpclib,time,socket,sys,textwrap,math,glob,random,os
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
9 from bisect import bisect_left,bisect,bisect_right
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
10 import Tkinter as tk
45b12307c695 Initial revision
drewp
parents:
diff changeset
11 from dispatch import dispatcher
45b12307c695 Initial revision
drewp
parents:
diff changeset
12 from twisted.internet import reactor,tksupport
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
13 import twisted
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
14 from twisted.web.xmlrpc import Proxy
45b12307c695 Initial revision
drewp
parents:
diff changeset
15
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
16 import run_local
211
9b360ee8636e move patchdata into show/, pull out curve.py from curvecalc, more networking.py unification
drewp@bigasterisk.com
parents: 210
diff changeset
17 from light9 import Submaster, dmxclient, networking
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
18 from light9.TLUtility import make_attributes_from_args
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
19 from light9.zoomcontrol import Zoomcontrol
211
9b360ee8636e move patchdata into show/, pull out curve.py from curvecalc, more networking.py unification
drewp@bigasterisk.com
parents: 210
diff changeset
20 from light9.curve import Curve, Curveview, Curveset, Curvesetview
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
21
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
22 sys.path.append("../../semprini")
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
23 from lengther import wavelength # for measuring duration of .wav
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
24
45b12307c695 Initial revision
drewp
parents:
diff changeset
25 class Music:
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 def __init__(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 self.player=None # xmlrpc Proxy to player
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 self.recenttime=0
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
29
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
30 def current_time(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
31 """return deferred which gets called with the current time"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 if self.player is None:
211
9b360ee8636e move patchdata into show/, pull out curve.py from curvecalc, more networking.py unification
drewp@bigasterisk.com
parents: 210
diff changeset
33 self.player = Proxy(networking.musicUrl())
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
34 # d = self.player.callRemote("songlength")
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
35 # d.addCallback(lambda l: dispatcher.send("max time",maxtime=l))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
36 # d = self.player.callRemote("songname")
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
37 # d.addCallback(lambda n: dispatcher.send("songname",name=n))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 d = self.player.callRemote('gettime')
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 def sendtime(t):
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 dispatcher.send("input time",val=t)
45b12307c695 Initial revision
drewp
parents:
diff changeset
41 return t # pass along to the real receiver
45b12307c695 Initial revision
drewp
parents:
diff changeset
42 def error(e):
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 pass#self.player=None
45b12307c695 Initial revision
drewp
parents:
diff changeset
44 d.addCallback(sendtime)
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 return d
45b12307c695 Initial revision
drewp
parents:
diff changeset
46
45b12307c695 Initial revision
drewp
parents:
diff changeset
47 class Subexpr:
45b12307c695 Initial revision
drewp
parents:
diff changeset
48 curveset = None
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
49 def __init__(self,curveset,expr=""):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
50 self.curveset = curveset
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 self.lasteval = None
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
52 self.expr=expr
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
53 self._smooth_random_items = [random.random() for x in range(100)]
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
54 def eval(self,t):
45b12307c695 Initial revision
drewp
parents:
diff changeset
55 if self.expr=="":
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 dispatcher.send("expr_error",sender=self,exc="no expr, using 0")
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 return 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 glo = self.curveset.globalsdict()
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 glo['t'] = t
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
60
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
61 glo['nsin'] = lambda x: (math.sin(x * (2 * math.pi)) + 1) / 2
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
62 glo['ncos'] = lambda x: (math.cos(x * (2 * math.pi)) + 1) / 2
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
63 glo['within'] = lambda a, b: a < t < b
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
64 glo['bef'] = lambda x: t < x
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
65 glo['aft'] = lambda x: x < t
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
66 glo['smoove'] = lambda x: -2 * (x ** 3) + 3 * (x ** 2)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
67
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
68 def smooth_random(speed=1):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
69 """1 = new stuff each second, <1 is slower, fade-ier"""
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
70 x = (t * speed) % len(self._smooth_random_items)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
71 x1 = int(x)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
72 x2 = (int(x) + 1) % len(self._smooth_random_items)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
73 y1 = self._smooth_random_items[x1]
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
74 y2 = self._smooth_random_items[x2]
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
75 return y1 + (y2 - y1) * ((x - x1))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
76
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
77 def notch_random(speed=1):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
78 """1 = new stuff each second, <1 is slower, notch-ier"""
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
79 x = (t * speed) % len(self._smooth_random_items)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
80 x1 = int(x)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
81 y1 = self._smooth_random_items[x1]
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
82 return y1
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
83
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
84 glo['noise'] = smooth_random
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
85 glo['notch'] = notch_random
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
86
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
87 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
88 self.lasteval = eval(self.expr,glo)
45b12307c695 Initial revision
drewp
parents:
diff changeset
89 except Exception,e:
45b12307c695 Initial revision
drewp
parents:
diff changeset
90 dispatcher.send("expr_error",sender=self,exc=e)
45b12307c695 Initial revision
drewp
parents:
diff changeset
91 else:
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
92 dispatcher.send("expr_error",sender=self,exc="ok")
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
93 return self.lasteval
45b12307c695 Initial revision
drewp
parents:
diff changeset
94
45b12307c695 Initial revision
drewp
parents:
diff changeset
95 def expr():
45b12307c695 Initial revision
drewp
parents:
diff changeset
96 doc = "python expression for level as a function of t, using curves"
45b12307c695 Initial revision
drewp
parents:
diff changeset
97 def fget(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
98 return self._expr
45b12307c695 Initial revision
drewp
parents:
diff changeset
99 def fset(self, value):
45b12307c695 Initial revision
drewp
parents:
diff changeset
100 self._expr = value
45b12307c695 Initial revision
drewp
parents:
diff changeset
101 dispatcher("expr_changed",sender=self)
45b12307c695 Initial revision
drewp
parents:
diff changeset
102 return locals()
45b12307c695 Initial revision
drewp
parents:
diff changeset
103 expr = property(**expr())
45b12307c695 Initial revision
drewp
parents:
diff changeset
104
45b12307c695 Initial revision
drewp
parents:
diff changeset
105 class Subexprview(tk.Frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
106 def __init__(self,master,se,**kw):
45b12307c695 Initial revision
drewp
parents:
diff changeset
107 self.subexpr=se
45b12307c695 Initial revision
drewp
parents:
diff changeset
108 tk.Frame.__init__(self,master,**kw)
45b12307c695 Initial revision
drewp
parents:
diff changeset
109 self.evar = tk.StringVar()
45b12307c695 Initial revision
drewp
parents:
diff changeset
110 e = self.ent = tk.Entry(master,textvariable=self.evar)
45b12307c695 Initial revision
drewp
parents:
diff changeset
111 e.pack(side='left',fill='both',exp=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
112 self.expr_changed()
45b12307c695 Initial revision
drewp
parents:
diff changeset
113 self.evar.trace_variable('w',self.evar_changed)
45b12307c695 Initial revision
drewp
parents:
diff changeset
114 dispatcher.connect(self.expr_changed,"expr_changed",
45b12307c695 Initial revision
drewp
parents:
diff changeset
115 sender=self.subexpr)
45b12307c695 Initial revision
drewp
parents:
diff changeset
116 self.error = tk.Label(master)
45b12307c695 Initial revision
drewp
parents:
diff changeset
117 self.error.pack(side='left')
45b12307c695 Initial revision
drewp
parents:
diff changeset
118 dispatcher.connect(lambda exc: self.error.config(text=str(exc)),
45b12307c695 Initial revision
drewp
parents:
diff changeset
119 "expr_error",sender=self.subexpr,weak=0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
120 def expr_changed(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
121 if self.subexpr.expr!=self.evar.get():
45b12307c695 Initial revision
drewp
parents:
diff changeset
122 self.evar.set(self.subexpr.expr)
45b12307c695 Initial revision
drewp
parents:
diff changeset
123 def evar_changed(self,*args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
124 self.subexpr.expr = self.evar.get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
125
45b12307c695 Initial revision
drewp
parents:
diff changeset
126 class Subterm:
45b12307c695 Initial revision
drewp
parents:
diff changeset
127 """one Submaster and its Subexpr"""
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
128 def __init__(self,submaster,subexpr):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
129 make_attributes_from_args('submaster','subexpr')
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
130 def scaled(self,t):
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
131 return self.submaster * self.subexpr.eval(t)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
132
45b12307c695 Initial revision
drewp
parents:
diff changeset
133 class Subtermview(tk.Frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
134 def __init__(self,master,st,**kw):
45b12307c695 Initial revision
drewp
parents:
diff changeset
135 self.subterm = st
45b12307c695 Initial revision
drewp
parents:
diff changeset
136 tk.Frame.__init__(self,master,bd=1,relief='raised',**kw)
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
137 l = tk.Label(self,text="sub %r" % self.subterm.submaster.name)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
138 l.pack(side='left')
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
139 sev=Subexprview(self,self.subterm.subexpr)
45b12307c695 Initial revision
drewp
parents:
diff changeset
140 sev.pack(side='left',fill='both',exp=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
141
45b12307c695 Initial revision
drewp
parents:
diff changeset
142 class Output:
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
143 lastsendtime=0
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
144 lastsendlevs=None
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
145 def __init__(self,subterms):
45b12307c695 Initial revision
drewp
parents:
diff changeset
146 make_attributes_from_args('subterms')
45b12307c695 Initial revision
drewp
parents:
diff changeset
147 def send_dmx(self,t):
45b12307c695 Initial revision
drewp
parents:
diff changeset
148
45b12307c695 Initial revision
drewp
parents:
diff changeset
149 scaledsubs=[]
45b12307c695 Initial revision
drewp
parents:
diff changeset
150 for st in self.subterms:
45b12307c695 Initial revision
drewp
parents:
diff changeset
151 scl = st.scaled(t)
45b12307c695 Initial revision
drewp
parents:
diff changeset
152 scaledsubs.append(scl)
45b12307c695 Initial revision
drewp
parents:
diff changeset
153 out = Submaster.sub_maxes(*scaledsubs)
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
154 levs = out.get_levels()
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
155 now=time.time()
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
156 if now-self.lastsendtime>5 or levs!=self.lastsendlevs:
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
157 dispatcher.send("output levels",val=levs)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
158 dmxclient.outputlevels(out.get_dmx_list(),
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
159 twisted=1,clientid='curvecalc')
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
160 self.lastsendtime = now
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
161 self.lastsendlevs = levs
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
162
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
163 def create_status_lines(master):
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
164 for signame,textfilter in [
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
165 ('input time',lambda t: "%.2fs"%t),
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
166 ('output levels',
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
167 lambda levels: textwrap.fill("; ".join(["%s:%.2f"%(n,v)
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
168 for n,v in
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
169 levels.items()[:5]
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
170 if v>0]),70)),
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
171 ('update period',lambda t: "%.1fms"%(t*1000)),
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
172 ]:
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
173 l = tk.Label(master,anchor='w',justify='left')
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
174 l.pack(side='top',fill='x')
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
175 dispatcher.connect(lambda val,l=l,sn=signame,tf=textfilter:
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
176 l.config(text=sn+": "+tf(val)),
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
177 signame,weak=0)
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
178
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
179 def savesubterms(filename,subterms):
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
180 s=""
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
181 for st in subterms:
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
182 s=s+"%s %s\n" % (st.submaster.name,st.subexpr.expr)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
183
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
184 file(filename,'w').write(s)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
185
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
186 class SubtermSetView(tk.Frame):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
187 def __init__(self, master, *args, **kw):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
188 tk.Frame.__init__(self, master, *args, **kw)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
189 self.cur_row = 0
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
190 self.cur_col = 0
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
191 self.ncols = 2
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
192 def add_subtermview(self, stv):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
193 stv.grid(row=self.cur_row, column=self.cur_col, sticky='news')
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
194 self.columnconfigure(self.cur_col, weight=1)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
195
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
196 self.cur_col += 1
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
197 self.cur_col %= self.ncols
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
198 if self.cur_col == 0:
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
199 self.cur_row += 1
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
200
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
201 def add_one_subterm(subname, curveset, subterms, root, ssv, expr=''):
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
202 term = Subterm(Submaster.Submaster(subname), Subexpr(curveset,expr))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
203 subterms.append(term)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
204
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
205 stv=Subtermview(ssv,term)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
206 # stv.pack(side='top',fill='x')
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
207
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
208 ssv.add_subtermview(stv)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
209
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
210 return term
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
211
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
212 def subterm_adder(master, curveset, subterms, root, ssv):
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
213 f=tk.Frame(master,relief='raised',bd=1)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
214 newname = tk.StringVar()
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
215
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
216 def add_cmd():
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
217 add_one_subterm(newname.get(), curveset, subterms, root, ssv, '')
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
218
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
219 tk.Button(f,text="new subterm named:", command=add_cmd).pack(side='left')
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
220 tk.Entry(f,textvariable=newname).pack(side='left',fill='x',exp=1)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
221 return f
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
222
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
223 #######################################################################
45b12307c695 Initial revision
drewp
parents:
diff changeset
224 root=tk.Tk()
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
225 root.tk_setPalette("gray50")
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
226 root.wm_geometry("1120x850")
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
227 root.tk_focusFollowsMouse()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
228
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
229 music=Music()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
230
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
231 zc = Zoomcontrol(root)
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
232 zc.pack(side='top',fill='x')
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
233
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
234 curveset = Curveset()
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
235 csv = Curvesetview(root,curveset)
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
236 csv.pack(side='top',fill='both',exp=1)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
237
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
238 ssv = SubtermSetView(root)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
239 ssv.pack(side='top', fill='x')
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
240
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
241 song = sys.argv[1]
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
242 root.title("Curemaster 2000MX - %s" % song)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
243
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
244 musicfilename = os.path.join(os.getenv("LIGHT9_SHOW"),'music',
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
245 "%s.wav" % song)
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
246 maxtime = wavelength(musicfilename)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
247 dispatcher.send("max time",maxtime=maxtime)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
248 dispatcher.connect(lambda: maxtime, "get max time",weak=0)
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
249 curveset.load(basename=os.path.join(os.getenv("LIGHT9_SHOW"),"curves",song))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
250
45b12307c695 Initial revision
drewp
parents:
diff changeset
251 subterms = []
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
252 subterm_adder(root, curveset, subterms, root, ssv).pack(side='top',fill='x')
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
253 for line in file(os.path.join(os.getenv("LIGHT9_SHOW"),
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
254 "subterms",
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
255 song)):
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
256 subname,expr = line.strip().split(" ",1)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
257
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
258 term = add_one_subterm(subname, curveset, subterms, root, ssv, expr)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
259
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
260 # stv=Subtermview(root,term)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
261 # stv.pack(side='top',fill='x')
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
262
45b12307c695 Initial revision
drewp
parents:
diff changeset
263 out = Output(subterms)
45b12307c695 Initial revision
drewp
parents:
diff changeset
264
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
265 def savekey(*args):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
266 print "saving",song
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
267 savesubterms(os.path.join(os.getenv("LIGHT9_SHOW"),"subterms",song),
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
268 subterms)
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
269 curveset.save(basename="curves/"+song)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
270 print "saved"
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
271
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
272
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
273 root.bind("<Control-Key-s>",savekey)
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
274
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
275 create_status_lines(root)
196
07bac5061d69 evaluates curves based on input time from ascoltami; outputs dmx
drewp
parents: 0
diff changeset
276
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
277 recent_t=[]
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
278 later = None
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
279 def update():
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
280 global later
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
281 d = music.current_time()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
282 d.addCallback(update2)
45b12307c695 Initial revision
drewp
parents:
diff changeset
283 d.addErrback(updateerr)
45b12307c695 Initial revision
drewp
parents:
diff changeset
284 def updateerr(e):
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
285 global later
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
286 print "err",e
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
287 if later and not later.cancelled and not later.called: later.cancel()
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
288 later = reactor.callLater(1,update)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
289 def update2(t):
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
290 global recent_t,later
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
291
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
292 if later and not later.cancelled and not later.called: later.cancel()
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
293 later = reactor.callLater(.01,update)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
294
45b12307c695 Initial revision
drewp
parents:
diff changeset
295 recent_t = recent_t[-50:]+[t]
45b12307c695 Initial revision
drewp
parents:
diff changeset
296 period = (recent_t[-1]-recent_t[0])/len(recent_t)
45b12307c695 Initial revision
drewp
parents:
diff changeset
297 dispatcher.send("update period",val=period)
45b12307c695 Initial revision
drewp
parents:
diff changeset
298 out.send_dmx(t)
45b12307c695 Initial revision
drewp
parents:
diff changeset
299 update()
45b12307c695 Initial revision
drewp
parents:
diff changeset
300
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
301 #def logprint(msg):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
302 # print "log",msg
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
303 #twisted.python.log.addObserver(logprint)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
304
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
305 root.bind("<Control-Key-q>",lambda ev: reactor.stop)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
306 root.bind("<Destroy>",lambda ev: reactor.stop)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
307 root.protocol('WM_DELETE_WINDOW', reactor.stop)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
308 tksupport.install(root,ms=10)
45b12307c695 Initial revision
drewp
parents:
diff changeset
309 if 0:
45b12307c695 Initial revision
drewp
parents:
diff changeset
310 sys.path.append("/home/drewp/projects/editor/pour")
45b12307c695 Initial revision
drewp
parents:
diff changeset
311 from utils import runstats
45b12307c695 Initial revision
drewp
parents:
diff changeset
312 runstats("reactor.run()")
45b12307c695 Initial revision
drewp
parents:
diff changeset
313 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
314 reactor.run()