annotate bin/curvecalc @ 210:f41004d5a507

factored out some networking, new show/ layout, curvecalc works
author drewp@bigasterisk.com
date Sun, 10 Apr 2005 20:54:14 +0000
parents flax/curvecalc@3905d3c92aaa
children 9b360ee8636e
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
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
17 from light9 import Submaster, dmxclient
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
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
20
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
21 sys.path.append("../../semprini")
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
22 from lengther import wavelength # for measuring duration of .wav
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
23
45b12307c695 Initial revision
drewp
parents:
diff changeset
24 class Curve:
45b12307c695 Initial revision
drewp
parents:
diff changeset
25 """curve does not know its name. see Curveset"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 points = None # x-sorted list of (x,y)
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 def __init__(self):
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
28 self.points = [(0,0),(10,0)]
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
29
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
30 def load(self,filename):
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
31 self.points[:]=[]
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
32 for line in file(filename):
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
33 self.points.append(tuple([float(a) for a in line.split()]))
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
34 self.points.sort()
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
35 dispatcher.send("points changed",sender=self)
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
36
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
37 def save(self,filename):
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
38 if filename.endswith('-music') or filename.endswith('_music'):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
39 print "not saving music track"
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
40 return
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
41 f = file(filename,'w')
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
42 for p in self.points:
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
43 f.write("%s %s\n" % p)
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
44 f.close()
200
f5d3492981ab moved Zoomcontrol to another file
drewp
parents: 197
diff changeset
45
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
46 def eval(self,t):
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
47 i = bisect_left(self.points,(t,None))-1
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
48
45b12307c695 Initial revision
drewp
parents:
diff changeset
49 if self.points[i][0]>t:
45b12307c695 Initial revision
drewp
parents:
diff changeset
50 return self.points[i][1]
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 if i>=len(self.points)-1:
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 return self.points[i][1]
45b12307c695 Initial revision
drewp
parents:
diff changeset
53
45b12307c695 Initial revision
drewp
parents:
diff changeset
54 p1,p2 = self.points[i],self.points[i+1]
45b12307c695 Initial revision
drewp
parents:
diff changeset
55 frac = (t-p1[0])/(p2[0]-p1[0])
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 y = p1[1]+(p2[1]-p1[1])*frac
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 return y
45b12307c695 Initial revision
drewp
parents:
diff changeset
58
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
59 def insert_pt(self,new_pt):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
60 i = bisect(self.points,(new_pt[0],None))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
61 self.points.insert(i,new_pt)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 __call__=eval
45b12307c695 Initial revision
drewp
parents:
diff changeset
63
45b12307c695 Initial revision
drewp
parents:
diff changeset
64 class Curveview(tk.Canvas):
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 def __init__(self,master,curve,**kw):
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 self.curve=curve
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
67 self._time = 0
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
68 tk.Canvas.__init__(self,master,width=10,height=10,
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
69 relief='sunken',bd=1,
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
70 closeenough=5,takefocus=1, **kw)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
71 self.selected_points=[] # idx of points being dragged
45b12307c695 Initial revision
drewp
parents:
diff changeset
72 self.update()
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
73 # self.bind("<Enter>",self.focus)
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
74 dispatcher.connect(self.input_time,"input time")
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
75 dispatcher.connect(self.update,"zoom changed")
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
76 dispatcher.connect(self.update,"points changed",sender=self.curve)
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
77 self.bind("<Configure>",self.update)
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
78 for x in range(1, 6):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
79 def add_kb_marker_point(evt, x=x):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
80 print "add_kb_marker_point", evt
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
81 self.add_point((self.current_time(), (x - 1) / 4.0))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
82
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
83 self.bind("<Key-%s>" % x, add_kb_marker_point)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
84
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
85
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
86 for butnum,factor in (5, 1.5),(4, 1/1.5):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
87 self.bind("<ButtonPress-%s>"%butnum,
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
88 lambda ev,factor=factor:
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
89 dispatcher.send("zoom about mouse",
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
90 t=self.world_from_screen(ev.x,0)[0],
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
91 factor=factor))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
92 self.bind("<Key-Escape>",lambda ev:
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
93 dispatcher.send("see time",
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
94 t=self.current_time()))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
95 def current_time(self):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
96 return self._time
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
97
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
98 def screen_from_world(self,p):
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
99 start,end = self.zoom
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
100 ht = self.winfo_height()
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
101 return (p[0]-start)/(end-start)*self.winfo_width(), (ht-5)-p[1]*(ht-10)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
102 def world_from_screen(self,x,y):
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
103 start,end = self.zoom
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
104 ht = self.winfo_height()
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
105 return x/self.winfo_width()*(end-start)+start, ((ht-5)-y)/(ht-10)
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
106
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
107 def input_time(self,val):
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
108 t=val
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
109 pts = self.screen_from_world((val,0))+self.screen_from_world((val,1))
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
110 self.delete('timecursor')
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
111 self.create_line(*pts,**dict(width=2,fill='red',tags=('timecursor',)))
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
112 self._time = t
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
113 def update(self,*args):
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
114
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
115 self.zoom = dispatcher.send("zoom area")[0][1]
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
116 cp = self.curve.points
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
117
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
118 visible_x = (self.world_from_screen(0,0)[0],
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
119 self.world_from_screen(self.winfo_width(),0)[0])
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
120
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
121 visleftidx = max(0,bisect_left(cp,(visible_x[0],None))-1)
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
122 visrightidx = min(len(cp)-1,bisect_left(cp,(visible_x[1],None))+1)
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
123
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
124 visible_points = cp[visleftidx:visrightidx+1]
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
125 visible_idxs = range(visleftidx,visrightidx+1)
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
126
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
127 self.delete('curve')
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
128
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
129 self._draw_markers(visible_x)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
130
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
131 self._draw_line(visible_idxs,visible_points)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
132
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
133 self.dots = {} # idx : canvas rectangle
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
134
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
135 if len(visible_points)<50:
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
136 self._draw_handle_points(visible_idxs,visible_points)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
137
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
138 def _draw_markers(self,visible_x):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
139 mark = self._draw_one_marker
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
140
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
141 mark(0,"0")
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
142 t1,t2=visible_x
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
143 if t2-t1<30:
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
144 for t in range(int(t1),int(t2)+1):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
145 mark(t,str(t))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
146 mark(-4,"-4")
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
147
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
148 endtimes = dispatcher.send("get max time")
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
149 if endtimes:
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
150 endtime = endtimes[0][1]
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
151 mark(endtime,"end %.1f"%endtime)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
152 mark(endtime+10,"post %.1f"%(endtime+10))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
153
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
154 def _draw_one_marker(self,t,label):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
155 x = self.screen_from_world((t,0))[0]
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
156 self.create_line(x,self.winfo_height(),x,self.winfo_height()-20,
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
157 tags=('curve',))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
158 self.create_text(x,self.winfo_height()-20,text=label,anchor='s',
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
159 tags=('curve',))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
160
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
161
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
162 def _draw_line(self,visible_idxs,visible_points):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
163 linepts=[]
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
164 step=1
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
165 linewidth=2
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
166 if len(visible_points)>800:
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
167 step = int(len(visible_points)/800)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
168 linewidth=1
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
169 for p in visible_points[::step]:
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
170 linepts.extend(self.screen_from_world(p))
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
171 if len(linepts)<4:
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
172 return
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
173 line = self.create_line(*linepts,**dict(width=linewidth,tags='curve'))
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
174
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
175 # canvas doesnt have keyboard focus, so i can't easily change the
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
176 # cursor when ctrl is pressed
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
177 # def curs(ev):
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
178 # print ev.state
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
179 # self.bind("<KeyPress>",curs)
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
180 # self.bind("<KeyRelease-Control_L>",lambda ev: curs(0))
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
181 self.tag_bind(line,"<Control-ButtonPress-1>",self.newpointatmouse)
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
182
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
183
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
184 def _draw_handle_points(self,visible_idxs,visible_points):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
185 for i,p in zip(visible_idxs,visible_points):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
186 rad=3
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
187 worldp = p
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
188 p = self.screen_from_world(p)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
189 dot = self.create_rectangle(p[0]-rad,p[1]-rad,p[0]+rad,p[1]+rad,
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
190 outline='black',fill='blue',
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
191 tags=('curve','point', 'handle%d' % i))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
192 if worldp[1] == 0:
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
193 rad += 3
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
194 dot2 = self.create_oval(p[0]-rad,p[1]-rad,
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
195 p[0]+rad,p[1]+rad,
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
196 outline='darkgreen',
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
197 tags=('curve','point', 'handle%d' % i))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
198 self.tag_bind('handle%d' % i,"<ButtonPress-1>",
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
199 lambda ev,i=i: self.dotpress(ev,i))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
200 self.bind("<Motion>",
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
201 lambda ev,i=i: self.dotmotion(ev,i))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
202 self.bind("<ButtonRelease-1>",
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
203 lambda ev,i=i: self.dotrelease(ev,i))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
204 self.dots[i]=dot
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
205
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
206 self.highlight_selected_dots()
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
207
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
208
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
209 def newpointatmouse(self, ev):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
210 p = self.world_from_screen(ev.x,ev.y)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
211 x, y = p
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
212 y = max(0, y)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
213 y = min(1, y)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
214 p = x, y
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
215 self.add_point(p)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
216
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
217 def add_point(self, p):
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
218 self.unselect()
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
219 self.curve.insert_pt(p)
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
220 self.update()
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
221
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
222 def highlight_selected_dots(self):
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
223 for i,d in self.dots.items():
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
224 if i in self.selected_points:
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
225 self.itemconfigure(d,fill='red')
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
226 else:
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
227 self.itemconfigure(d,fill='blue')
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
228
45b12307c695 Initial revision
drewp
parents:
diff changeset
229 def dotpress(self,ev,dotidx):
45b12307c695 Initial revision
drewp
parents:
diff changeset
230 self.selected_points=[dotidx]
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
231 self.highlight_selected_dots()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
232
45b12307c695 Initial revision
drewp
parents:
diff changeset
233 def dotmotion(self,ev,dotidx):
45b12307c695 Initial revision
drewp
parents:
diff changeset
234 cp = self.curve.points
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
235 moved=0
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
236 for idx in self.selected_points:
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
237 x,y = self.world_from_screen(ev.x,ev.y)
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
238 y = max(0,min(1,y))
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
239 if idx>0 and x<=cp[idx-1][0]:
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
240 continue
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
241 if idx<len(cp)-1 and x>=cp[idx+1][0]:
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
242 continue
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
243 moved=1
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
244 cp[idx] = (x,y)
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
245 if moved:
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
246 self.update()
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
247 def unselect(self):
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
248 self.selected_points=[]
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
249 self.highlight_selected_dots()
196
07bac5061d69 evaluates curves based on input time from ascoltami; outputs dmx
drewp
parents: 0
diff changeset
250
07bac5061d69 evaluates curves based on input time from ascoltami; outputs dmx
drewp
parents: 0
diff changeset
251 def dotrelease(self,ev,dotidx):
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
252 self.unselect()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
253
45b12307c695 Initial revision
drewp
parents:
diff changeset
254 class Curveset:
45b12307c695 Initial revision
drewp
parents:
diff changeset
255 curves = None # curvename : curve
45b12307c695 Initial revision
drewp
parents:
diff changeset
256 def __init__(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
257 self.curves = {}
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
258 def load(self,basename):
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
259 """find all files that look like basename-curvename and add
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
260 curves with their contents"""
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
261 for filename in glob.glob("%s-*"%basename):
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
262 curvename = filename[filename.find('-')+1:]
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
263 c=Curve()
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
264 c.load(filename)
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
265 curvename = curvename.replace('-','_')
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
266 self.add_curve(curvename,c)
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
267 def save(self,basename):
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
268 """writes a file for each curve with a name
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
269 like basename-curvename"""
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
270 for name,cur in self.curves.items():
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
271 cur.save("%s-%s" % (basename,name))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
272 def add_curve(self,name,curve):
45b12307c695 Initial revision
drewp
parents:
diff changeset
273 self.curves[name] = curve
45b12307c695 Initial revision
drewp
parents:
diff changeset
274 dispatcher.send("add_curve",sender=self,name=name)
45b12307c695 Initial revision
drewp
parents:
diff changeset
275 def globalsdict(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
276 return self.curves.copy()
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
277 def new_curve(self,name):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
278 if name=="":
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
279 print "no name given"
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
280 return
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
281 while name in self.curves:
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
282 name=name+"-1"
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
283
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
284 self.add_curve(name,Curve())
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
285
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
286
45b12307c695 Initial revision
drewp
parents:
diff changeset
287 class Curvesetview(tk.Frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
288 curves = None # curvename : Curveview
45b12307c695 Initial revision
drewp
parents:
diff changeset
289 def __init__(self,master,curveset,**kw):
45b12307c695 Initial revision
drewp
parents:
diff changeset
290 self.curves = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
291 self.curveset = curveset
45b12307c695 Initial revision
drewp
parents:
diff changeset
292 tk.Frame.__init__(self,master,**kw)
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
293
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
294 f = tk.Frame(self,relief='raised',bd=1)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
295 f.pack(side='top',fill='x')
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
296 tk.Button(f,text="new curve named:",
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
297 command=lambda: self.curveset.new_curve(self.newcurvename.get())).pack(side='left')
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
298 self.newcurvename = tk.StringVar()
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
299 tk.Entry(f,textvariable=self.newcurvename).pack(side='left',
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
300 fill='x',exp=1)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
301
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
302
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
303 dispatcher.connect(self.add_curve,"add_curve",sender=self.curveset)
45b12307c695 Initial revision
drewp
parents:
diff changeset
304 def add_curve(self,name):
45b12307c695 Initial revision
drewp
parents:
diff changeset
305 f = tk.Frame(self,relief='raised',bd=1)
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
306 f.pack(side='top',fill='both',exp=1)
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
307 tk.Label(f,text="curve %r"%name,width=15).pack(side='left')
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
308 cv = Curveview(f,self.curveset.curves[name])
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
309 cv.pack(side='right',fill='both',exp=1)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
310 self.curves[name] = cv
45b12307c695 Initial revision
drewp
parents:
diff changeset
311
45b12307c695 Initial revision
drewp
parents:
diff changeset
312 class Music:
45b12307c695 Initial revision
drewp
parents:
diff changeset
313 def __init__(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
314 self.player=None # xmlrpc Proxy to player
45b12307c695 Initial revision
drewp
parents:
diff changeset
315 self.recenttime=0
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
316
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
317 def current_time(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
318 """return deferred which gets called with the current time"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
319 if self.player is None:
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
320 self.player = Proxy("http://miles:8040")
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
321 # d = self.player.callRemote("songlength")
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
322 # 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
323 # d = self.player.callRemote("songname")
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
324 # d.addCallback(lambda n: dispatcher.send("songname",name=n))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
325 d = self.player.callRemote('gettime')
45b12307c695 Initial revision
drewp
parents:
diff changeset
326 def sendtime(t):
45b12307c695 Initial revision
drewp
parents:
diff changeset
327 dispatcher.send("input time",val=t)
45b12307c695 Initial revision
drewp
parents:
diff changeset
328 return t # pass along to the real receiver
45b12307c695 Initial revision
drewp
parents:
diff changeset
329 def error(e):
45b12307c695 Initial revision
drewp
parents:
diff changeset
330 pass#self.player=None
45b12307c695 Initial revision
drewp
parents:
diff changeset
331 d.addCallback(sendtime)
45b12307c695 Initial revision
drewp
parents:
diff changeset
332 return d
45b12307c695 Initial revision
drewp
parents:
diff changeset
333
45b12307c695 Initial revision
drewp
parents:
diff changeset
334 class Subexpr:
45b12307c695 Initial revision
drewp
parents:
diff changeset
335 curveset = None
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
336 def __init__(self,curveset,expr=""):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
337 self.curveset = curveset
45b12307c695 Initial revision
drewp
parents:
diff changeset
338 self.lasteval = None
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
339 self.expr=expr
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
340 self._smooth_random_items = [random.random() for x in range(100)]
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
341 def eval(self,t):
45b12307c695 Initial revision
drewp
parents:
diff changeset
342 if self.expr=="":
45b12307c695 Initial revision
drewp
parents:
diff changeset
343 dispatcher.send("expr_error",sender=self,exc="no expr, using 0")
45b12307c695 Initial revision
drewp
parents:
diff changeset
344 return 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
345 glo = self.curveset.globalsdict()
45b12307c695 Initial revision
drewp
parents:
diff changeset
346 glo['t'] = t
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
347
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
348 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
349 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
350 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
351 glo['bef'] = lambda x: t < x
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
352 glo['aft'] = lambda x: x < t
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
353 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
354
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
355 def smooth_random(speed=1):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
356 """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
357 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
358 x1 = int(x)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
359 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
360 y1 = self._smooth_random_items[x1]
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
361 y2 = self._smooth_random_items[x2]
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
362 return y1 + (y2 - y1) * ((x - x1))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
363
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
364 def notch_random(speed=1):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
365 """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
366 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
367 x1 = int(x)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
368 y1 = self._smooth_random_items[x1]
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
369 return y1
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
370
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
371 glo['noise'] = smooth_random
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
372 glo['notch'] = notch_random
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
373
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
374 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
375 self.lasteval = eval(self.expr,glo)
45b12307c695 Initial revision
drewp
parents:
diff changeset
376 except Exception,e:
45b12307c695 Initial revision
drewp
parents:
diff changeset
377 dispatcher.send("expr_error",sender=self,exc=e)
45b12307c695 Initial revision
drewp
parents:
diff changeset
378 else:
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
379 dispatcher.send("expr_error",sender=self,exc="ok")
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
380 return self.lasteval
45b12307c695 Initial revision
drewp
parents:
diff changeset
381
45b12307c695 Initial revision
drewp
parents:
diff changeset
382 def expr():
45b12307c695 Initial revision
drewp
parents:
diff changeset
383 doc = "python expression for level as a function of t, using curves"
45b12307c695 Initial revision
drewp
parents:
diff changeset
384 def fget(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
385 return self._expr
45b12307c695 Initial revision
drewp
parents:
diff changeset
386 def fset(self, value):
45b12307c695 Initial revision
drewp
parents:
diff changeset
387 self._expr = value
45b12307c695 Initial revision
drewp
parents:
diff changeset
388 dispatcher("expr_changed",sender=self)
45b12307c695 Initial revision
drewp
parents:
diff changeset
389 return locals()
45b12307c695 Initial revision
drewp
parents:
diff changeset
390 expr = property(**expr())
45b12307c695 Initial revision
drewp
parents:
diff changeset
391
45b12307c695 Initial revision
drewp
parents:
diff changeset
392 class Subexprview(tk.Frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
393 def __init__(self,master,se,**kw):
45b12307c695 Initial revision
drewp
parents:
diff changeset
394 self.subexpr=se
45b12307c695 Initial revision
drewp
parents:
diff changeset
395 tk.Frame.__init__(self,master,**kw)
45b12307c695 Initial revision
drewp
parents:
diff changeset
396 self.evar = tk.StringVar()
45b12307c695 Initial revision
drewp
parents:
diff changeset
397 e = self.ent = tk.Entry(master,textvariable=self.evar)
45b12307c695 Initial revision
drewp
parents:
diff changeset
398 e.pack(side='left',fill='both',exp=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
399 self.expr_changed()
45b12307c695 Initial revision
drewp
parents:
diff changeset
400 self.evar.trace_variable('w',self.evar_changed)
45b12307c695 Initial revision
drewp
parents:
diff changeset
401 dispatcher.connect(self.expr_changed,"expr_changed",
45b12307c695 Initial revision
drewp
parents:
diff changeset
402 sender=self.subexpr)
45b12307c695 Initial revision
drewp
parents:
diff changeset
403 self.error = tk.Label(master)
45b12307c695 Initial revision
drewp
parents:
diff changeset
404 self.error.pack(side='left')
45b12307c695 Initial revision
drewp
parents:
diff changeset
405 dispatcher.connect(lambda exc: self.error.config(text=str(exc)),
45b12307c695 Initial revision
drewp
parents:
diff changeset
406 "expr_error",sender=self.subexpr,weak=0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
407 def expr_changed(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
408 if self.subexpr.expr!=self.evar.get():
45b12307c695 Initial revision
drewp
parents:
diff changeset
409 self.evar.set(self.subexpr.expr)
45b12307c695 Initial revision
drewp
parents:
diff changeset
410 def evar_changed(self,*args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
411 self.subexpr.expr = self.evar.get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
412
45b12307c695 Initial revision
drewp
parents:
diff changeset
413 class Subterm:
45b12307c695 Initial revision
drewp
parents:
diff changeset
414 """one Submaster and its Subexpr"""
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
415 def __init__(self,submaster,subexpr):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
416 make_attributes_from_args('submaster','subexpr')
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
417 def scaled(self,t):
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
418 return self.submaster * self.subexpr.eval(t)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
419
45b12307c695 Initial revision
drewp
parents:
diff changeset
420 class Subtermview(tk.Frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
421 def __init__(self,master,st,**kw):
45b12307c695 Initial revision
drewp
parents:
diff changeset
422 self.subterm = st
45b12307c695 Initial revision
drewp
parents:
diff changeset
423 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
424 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
425 l.pack(side='left')
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
426 sev=Subexprview(self,self.subterm.subexpr)
45b12307c695 Initial revision
drewp
parents:
diff changeset
427 sev.pack(side='left',fill='both',exp=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
428
45b12307c695 Initial revision
drewp
parents:
diff changeset
429 class Output:
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
430 lastsendtime=0
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
431 lastsendlevs=None
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
432 def __init__(self,subterms):
45b12307c695 Initial revision
drewp
parents:
diff changeset
433 make_attributes_from_args('subterms')
45b12307c695 Initial revision
drewp
parents:
diff changeset
434 def send_dmx(self,t):
45b12307c695 Initial revision
drewp
parents:
diff changeset
435
45b12307c695 Initial revision
drewp
parents:
diff changeset
436 scaledsubs=[]
45b12307c695 Initial revision
drewp
parents:
diff changeset
437 for st in self.subterms:
45b12307c695 Initial revision
drewp
parents:
diff changeset
438 scl = st.scaled(t)
45b12307c695 Initial revision
drewp
parents:
diff changeset
439 scaledsubs.append(scl)
45b12307c695 Initial revision
drewp
parents:
diff changeset
440 out = Submaster.sub_maxes(*scaledsubs)
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
441 levs = out.get_levels()
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
442 now=time.time()
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
443 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
444 dispatcher.send("output levels",val=levs)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
445 dmxclient.outputlevels(out.get_dmx_list(),
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
446 twisted=1,clientid='curvecalc')
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
447 self.lastsendtime = now
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
448 self.lastsendlevs = levs
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
449
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
450 def create_status_lines(master):
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
451 for signame,textfilter in [
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
452 ('input time',lambda t: "%.2fs"%t),
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
453 ('output levels',
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
454 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
455 for n,v in
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
456 levels.items()[:5]
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
457 if v>0]),70)),
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
458 ('update period',lambda t: "%.1fms"%(t*1000)),
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
459 ]:
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
460 l = tk.Label(master,anchor='w',justify='left')
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
461 l.pack(side='top',fill='x')
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
462 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
463 l.config(text=sn+": "+tf(val)),
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
464 signame,weak=0)
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
465
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
466 def savesubterms(filename,subterms):
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
467 s=""
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
468 for st in subterms:
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
469 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
470
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
471 file(filename,'w').write(s)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
472
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
473 class SubtermSetView(tk.Frame):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
474 def __init__(self, master, *args, **kw):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
475 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
476 self.cur_row = 0
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
477 self.cur_col = 0
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
478 self.ncols = 2
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
479 def add_subtermview(self, stv):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
480 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
481 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
482
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
483 self.cur_col += 1
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
484 self.cur_col %= self.ncols
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
485 if self.cur_col == 0:
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
486 self.cur_row += 1
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
487
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
488 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
489 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
490 subterms.append(term)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
491
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
492 stv=Subtermview(ssv,term)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
493 # stv.pack(side='top',fill='x')
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
494
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
495 ssv.add_subtermview(stv)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
496
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
497 return term
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
498
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
499 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
500 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
501 newname = tk.StringVar()
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
502
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
503 def add_cmd():
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
504 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
505
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
506 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
507 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
508 return f
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
509
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
510 #######################################################################
45b12307c695 Initial revision
drewp
parents:
diff changeset
511 root=tk.Tk()
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
512 root.tk_setPalette("gray50")
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
513 root.wm_geometry("1120x850")
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
514 root.tk_focusFollowsMouse()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
515
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
516 music=Music()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
517
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
518 zc = Zoomcontrol(root)
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
519 zc.pack(side='top',fill='x')
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
520
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
521 curveset = Curveset()
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
522 csv = Curvesetview(root,curveset)
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
523 csv.pack(side='top',fill='both',exp=1)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
524
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
525 ssv = SubtermSetView(root)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
526 ssv.pack(side='top', fill='x')
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
527
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
528 song = sys.argv[1]
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
529 root.title("Curemaster 2000MX - %s" % song)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
530
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
531 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
532 "%s.wav" % song)
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
533 maxtime = wavelength(musicfilename)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
534 dispatcher.send("max time",maxtime=maxtime)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
535 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
536 curveset.load(basename=os.path.join(os.getenv("LIGHT9_SHOW"),"curves",song))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
537
45b12307c695 Initial revision
drewp
parents:
diff changeset
538 subterms = []
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
539 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
540 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
541 "subterms",
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
542 song)):
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
543 subname,expr = line.strip().split(" ",1)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
544
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
545 term = add_one_subterm(subname, curveset, subterms, root, ssv, expr)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
546
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
547 # stv=Subtermview(root,term)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
548 # stv.pack(side='top',fill='x')
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
549
45b12307c695 Initial revision
drewp
parents:
diff changeset
550 out = Output(subterms)
45b12307c695 Initial revision
drewp
parents:
diff changeset
551
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
552 def savekey(*args):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
553 print "saving",song
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
554 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
555 subterms)
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
556 curveset.save(basename="curves/"+song)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
557 print "saved"
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
558
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
559
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
560 root.bind("<Control-Key-s>",savekey)
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
561
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
562 create_status_lines(root)
196
07bac5061d69 evaluates curves based on input time from ascoltami; outputs dmx
drewp
parents: 0
diff changeset
563
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
564 recent_t=[]
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
565 later = None
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
566 def update():
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
567 global later
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
568 d = music.current_time()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
569 d.addCallback(update2)
45b12307c695 Initial revision
drewp
parents:
diff changeset
570 d.addErrback(updateerr)
45b12307c695 Initial revision
drewp
parents:
diff changeset
571 def updateerr(e):
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
572 global later
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
573 print "err",e
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
574 if later and not later.cancelled and not later.called: later.cancel()
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
575 later = reactor.callLater(1,update)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
576 def update2(t):
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
577 global recent_t,later
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
578
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
579 if later and not later.cancelled and not later.called: later.cancel()
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
580 later = reactor.callLater(.01,update)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
581
45b12307c695 Initial revision
drewp
parents:
diff changeset
582 recent_t = recent_t[-50:]+[t]
45b12307c695 Initial revision
drewp
parents:
diff changeset
583 period = (recent_t[-1]-recent_t[0])/len(recent_t)
45b12307c695 Initial revision
drewp
parents:
diff changeset
584 dispatcher.send("update period",val=period)
45b12307c695 Initial revision
drewp
parents:
diff changeset
585 out.send_dmx(t)
45b12307c695 Initial revision
drewp
parents:
diff changeset
586 update()
45b12307c695 Initial revision
drewp
parents:
diff changeset
587
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
588 #def logprint(msg):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
589 # print "log",msg
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
590 #twisted.python.log.addObserver(logprint)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
591
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
592 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
593 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
594 root.protocol('WM_DELETE_WINDOW', reactor.stop)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
595 tksupport.install(root,ms=10)
45b12307c695 Initial revision
drewp
parents:
diff changeset
596 if 0:
45b12307c695 Initial revision
drewp
parents:
diff changeset
597 sys.path.append("/home/drewp/projects/editor/pour")
45b12307c695 Initial revision
drewp
parents:
diff changeset
598 from utils import runstats
45b12307c695 Initial revision
drewp
parents:
diff changeset
599 runstats("reactor.run()")
45b12307c695 Initial revision
drewp
parents:
diff changeset
600 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
601 reactor.run()