annotate bin/curvecalc @ 399:40b6a06bd090

rework Effects.py to fix chase(). now uses chase lists from config.n3
author Drew Perttula <drewp@bigasterisk.com>
date Sat, 16 Jun 2007 19:12:48 +0000
parents c5f0b530ade5
children b2858c2d4a4d
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 """
351
a6662d61ebcd SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents: 335
diff changeset
4 now launches like this:
a6662d61ebcd SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents: 335
diff changeset
5 % bin/curvecalc http://light9.bigasterisk.com/show/dance2007/song1
a6662d61ebcd SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents: 335
diff changeset
6
a6662d61ebcd SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents: 335
diff changeset
7
a6662d61ebcd SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents: 335
diff changeset
8
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
9 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
10
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
11 """
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
12 from __future__ import division
399
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
13 import xmlrpclib,time,socket,sys,textwrap,math,glob,random,os,optparse,traceback
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
14 from bisect import bisect_left,bisect,bisect_right
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
15 import Tkinter as tk
332
d4aff817a304 add compatibility with louie.dispatcher
drewp@bigasterisk.com
parents: 326
diff changeset
16 try:
d4aff817a304 add compatibility with louie.dispatcher
drewp@bigasterisk.com
parents: 326
diff changeset
17 from dispatch import dispatcher
d4aff817a304 add compatibility with louie.dispatcher
drewp@bigasterisk.com
parents: 326
diff changeset
18 except ImportError:
d4aff817a304 add compatibility with louie.dispatcher
drewp@bigasterisk.com
parents: 326
diff changeset
19 import louie as dispatcher
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
20 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
21 import twisted
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
22 from twisted.web.xmlrpc import Proxy
357
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
23 from rdflib import Literal, URIRef, RDF
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
24 from rdflib.Graph import Graph
319
2193eab0650b add startup logging to curvecalc
Drew Perttula <drewp@bigasterisk.com>
parents: 296
diff changeset
25 import logging
2193eab0650b add startup logging to curvecalc
Drew Perttula <drewp@bigasterisk.com>
parents: 296
diff changeset
26 log = logging.getLogger()
2193eab0650b add startup logging to curvecalc
Drew Perttula <drewp@bigasterisk.com>
parents: 296
diff changeset
27 logging.basicConfig(format="%(asctime)s %(levelname)-5s %(name)s %(filename)s:%(lineno)d: %(message)s")
2193eab0650b add startup logging to curvecalc
Drew Perttula <drewp@bigasterisk.com>
parents: 296
diff changeset
28 log.setLevel(logging.DEBUG)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
29
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
30 import run_local
399
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
31 from light9 import Submaster, dmxclient, networking, showconfig, prof, Patch
293
1c590824dd14 chase logic is (mostly) fixed, integrate with curvecalc
David McClosky <dmcc@bigasterisk.com>
parents: 290
diff changeset
32 from light9.TLUtility import make_attributes_from_args, dict_subset
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
33 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
34 from light9.curve import Curve, Curveview, Curveset, Curvesetview
264
0f112a7dd6b3 fix window positoins for subcomposer and curvecalc. now saves geometry continuously
drewp@bigasterisk.com
parents: 248
diff changeset
35 from light9.wavelength import wavelength
0f112a7dd6b3 fix window positoins for subcomposer and curvecalc. now saves geometry continuously
drewp@bigasterisk.com
parents: 248
diff changeset
36 from light9.uihelpers import toplevelat
335
8a1ec8aca432 more rdf updates
drewp@bigasterisk.com
parents: 332
diff changeset
37 from light9.namespaces import L9
293
1c590824dd14 chase logic is (mostly) fixed, integrate with curvecalc
David McClosky <dmcc@bigasterisk.com>
parents: 290
diff changeset
38 import light9.Effects
1c590824dd14 chase logic is (mostly) fixed, integrate with curvecalc
David McClosky <dmcc@bigasterisk.com>
parents: 290
diff changeset
39
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 class Music:
45b12307c695 Initial revision
drewp
parents:
diff changeset
41 def __init__(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
42 self.player=None # xmlrpc Proxy to player
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 self.recenttime=0
287
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
44
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
45 dispatcher.connect(self.seekplay_or_pause,"music seek")
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
46
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
47 def seekplay_or_pause(self,t):
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
48 self.music.seekplay_or_pause(t)
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
49
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
50 def current_time(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 """return deferred which gets called with the current time"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 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
53 self.player = Proxy(networking.musicUrl())
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
54 # d = self.player.callRemote("songlength")
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
55 # 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
56 # d = self.player.callRemote("songname")
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
57 # d.addCallback(lambda n: dispatcher.send("songname",name=n))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 d = self.player.callRemote('gettime')
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 def sendtime(t):
45b12307c695 Initial revision
drewp
parents:
diff changeset
60 dispatcher.send("input time",val=t)
45b12307c695 Initial revision
drewp
parents:
diff changeset
61 return t # pass along to the real receiver
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 def error(e):
45b12307c695 Initial revision
drewp
parents:
diff changeset
63 pass#self.player=None
45b12307c695 Initial revision
drewp
parents:
diff changeset
64 d.addCallback(sendtime)
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 return d
277
e7630a2072bd awesome curvecalc control of ascoltami
drewp@bigasterisk.com
parents: 274
diff changeset
66
e7630a2072bd awesome curvecalc control of ascoltami
drewp@bigasterisk.com
parents: 274
diff changeset
67 def seekplay_or_pause(self,t):
e7630a2072bd awesome curvecalc control of ascoltami
drewp@bigasterisk.com
parents: 274
diff changeset
68 self.player.callRemote('seekplay_or_pause',t)
399
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
69
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
70 class Expr(object):
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
71 """singleton, provides functions for use in subterm expressions,
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
72 e.g. chases"""
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
73 def __init__(self):
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
74 self.effectGlobals = light9.Effects.configExprGlobals()
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
75
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
76 def exprGlobals(self, startDict, t):
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
77 """globals dict for use by expressions"""
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
78
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
79 glo = startDict.copy()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
80
293
1c590824dd14 chase logic is (mostly) fixed, integrate with curvecalc
David McClosky <dmcc@bigasterisk.com>
parents: 290
diff changeset
81 # add in functions from Effects
399
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
82 glo.update(self.effectGlobals)
293
1c590824dd14 chase logic is (mostly) fixed, integrate with curvecalc
David McClosky <dmcc@bigasterisk.com>
parents: 290
diff changeset
83
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
84 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
85 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
86 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
87 glo['bef'] = lambda x: t < x
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
88 glo['aft'] = lambda x: x < t
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
89 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
90
399
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
91 def chan(name):
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
92 return Submaster.Submaster(
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
93 leveldict={Patch.get_dmx_channel(name) : 1.0},
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
94 temporary=True)
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
95 glo['chan'] = chan
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
96
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
97 def smooth_random(speed=1):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
98 """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
99 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
100 x1 = int(x)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
101 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
102 y1 = self._smooth_random_items[x1]
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
103 y2 = self._smooth_random_items[x2]
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
104 return y1 + (y2 - y1) * ((x - x1))
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
105
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
106 def notch_random(speed=1):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
107 """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
108 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
109 x1 = int(x)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
110 y1 = self._smooth_random_items[x1]
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
111 return y1
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
112
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
113 glo['noise'] = smooth_random
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
114 glo['notch'] = notch_random
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
115
399
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
116 return glo
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
117
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
118 exprglo = Expr()
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
119
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
120 class Subexpr:
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
121 curveset = None
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
122 def __init__(self,curveset,expr=""):
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
123 self.curveset = curveset
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
124 self.lasteval = None
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
125 self.expr=expr
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
126 self._smooth_random_items = [random.random() for x in range(100)]
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
127 def eval(self,t):
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
128 if self.expr=="":
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
129 dispatcher.send("expr_error",sender=self,exc="no expr, using 0")
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
130 return 0
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
131 glo = self.curveset.globalsdict()
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
132 glo['t'] = t
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
133
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
134 glo = exprglo.exprGlobals(glo, t)
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
135
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
136 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
137 self.lasteval = eval(self.expr,glo)
45b12307c695 Initial revision
drewp
parents:
diff changeset
138 except Exception,e:
45b12307c695 Initial revision
drewp
parents:
diff changeset
139 dispatcher.send("expr_error",sender=self,exc=e)
45b12307c695 Initial revision
drewp
parents:
diff changeset
140 else:
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
141 dispatcher.send("expr_error",sender=self,exc="ok")
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
142 return self.lasteval
45b12307c695 Initial revision
drewp
parents:
diff changeset
143
45b12307c695 Initial revision
drewp
parents:
diff changeset
144 def expr():
45b12307c695 Initial revision
drewp
parents:
diff changeset
145 doc = "python expression for level as a function of t, using curves"
45b12307c695 Initial revision
drewp
parents:
diff changeset
146 def fget(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
147 return self._expr
45b12307c695 Initial revision
drewp
parents:
diff changeset
148 def fset(self, value):
45b12307c695 Initial revision
drewp
parents:
diff changeset
149 self._expr = value
45b12307c695 Initial revision
drewp
parents:
diff changeset
150 dispatcher("expr_changed",sender=self)
45b12307c695 Initial revision
drewp
parents:
diff changeset
151 return locals()
45b12307c695 Initial revision
drewp
parents:
diff changeset
152 expr = property(**expr())
45b12307c695 Initial revision
drewp
parents:
diff changeset
153
45b12307c695 Initial revision
drewp
parents:
diff changeset
154 class Subexprview(tk.Frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
155 def __init__(self,master,se,**kw):
45b12307c695 Initial revision
drewp
parents:
diff changeset
156 self.subexpr=se
45b12307c695 Initial revision
drewp
parents:
diff changeset
157 tk.Frame.__init__(self,master,**kw)
45b12307c695 Initial revision
drewp
parents:
diff changeset
158 self.evar = tk.StringVar()
212
a65a1634fce4 fix entry sizing bug
drewp@bigasterisk.com
parents: 211
diff changeset
159 e = self.ent = tk.Entry(self,textvariable=self.evar)
a65a1634fce4 fix entry sizing bug
drewp@bigasterisk.com
parents: 211
diff changeset
160 e.pack(side='left',fill='x',exp=1)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
161 self.expr_changed()
45b12307c695 Initial revision
drewp
parents:
diff changeset
162 self.evar.trace_variable('w',self.evar_changed)
45b12307c695 Initial revision
drewp
parents:
diff changeset
163 dispatcher.connect(self.expr_changed,"expr_changed",
45b12307c695 Initial revision
drewp
parents:
diff changeset
164 sender=self.subexpr)
212
a65a1634fce4 fix entry sizing bug
drewp@bigasterisk.com
parents: 211
diff changeset
165 self.error = tk.Label(self)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
166 self.error.pack(side='left')
45b12307c695 Initial revision
drewp
parents:
diff changeset
167 dispatcher.connect(lambda exc: self.error.config(text=str(exc)),
45b12307c695 Initial revision
drewp
parents:
diff changeset
168 "expr_error",sender=self.subexpr,weak=0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
169 def expr_changed(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
170 if self.subexpr.expr!=self.evar.get():
45b12307c695 Initial revision
drewp
parents:
diff changeset
171 self.evar.set(self.subexpr.expr)
45b12307c695 Initial revision
drewp
parents:
diff changeset
172 def evar_changed(self,*args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
173 self.subexpr.expr = self.evar.get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
174
45b12307c695 Initial revision
drewp
parents:
diff changeset
175 class Subterm:
45b12307c695 Initial revision
drewp
parents:
diff changeset
176 """one Submaster and its Subexpr"""
274
9bf9685f5aae curvecalc exprs can return a whole Submaster now
David McClosky <dmcc@bigasterisk.com>
parents: 267
diff changeset
177 def __init__(self, submaster, subexpr):
9bf9685f5aae curvecalc exprs can return a whole Submaster now
David McClosky <dmcc@bigasterisk.com>
parents: 267
diff changeset
178 make_attributes_from_args('submaster', 'subexpr')
9bf9685f5aae curvecalc exprs can return a whole Submaster now
David McClosky <dmcc@bigasterisk.com>
parents: 267
diff changeset
179 def scaled(self, t):
9bf9685f5aae curvecalc exprs can return a whole Submaster now
David McClosky <dmcc@bigasterisk.com>
parents: 267
diff changeset
180 subexpr_eval = self.subexpr.eval(t)
296
e99bd20dad85 curvecalc: fully catch and display errors in expr eval
David McClosky <dmcc@bigasterisk.com>
parents: 294
diff changeset
181 # we prevent any exceptions from escaping, since they cause us to
e99bd20dad85 curvecalc: fully catch and display errors in expr eval
David McClosky <dmcc@bigasterisk.com>
parents: 294
diff changeset
182 # stop sending levels
e99bd20dad85 curvecalc: fully catch and display errors in expr eval
David McClosky <dmcc@bigasterisk.com>
parents: 294
diff changeset
183 try:
e99bd20dad85 curvecalc: fully catch and display errors in expr eval
David McClosky <dmcc@bigasterisk.com>
parents: 294
diff changeset
184 if isinstance(subexpr_eval, Submaster.Submaster):
e99bd20dad85 curvecalc: fully catch and display errors in expr eval
David McClosky <dmcc@bigasterisk.com>
parents: 294
diff changeset
185 # if the expression returns a submaster, just return it
e99bd20dad85 curvecalc: fully catch and display errors in expr eval
David McClosky <dmcc@bigasterisk.com>
parents: 294
diff changeset
186 return subexpr_eval
e99bd20dad85 curvecalc: fully catch and display errors in expr eval
David McClosky <dmcc@bigasterisk.com>
parents: 294
diff changeset
187 else:
e99bd20dad85 curvecalc: fully catch and display errors in expr eval
David McClosky <dmcc@bigasterisk.com>
parents: 294
diff changeset
188 # otherwise, return our submaster multiplied by the value
e99bd20dad85 curvecalc: fully catch and display errors in expr eval
David McClosky <dmcc@bigasterisk.com>
parents: 294
diff changeset
189 # returned
e99bd20dad85 curvecalc: fully catch and display errors in expr eval
David McClosky <dmcc@bigasterisk.com>
parents: 294
diff changeset
190 return self.submaster * subexpr_eval
e99bd20dad85 curvecalc: fully catch and display errors in expr eval
David McClosky <dmcc@bigasterisk.com>
parents: 294
diff changeset
191 except Exception, e:
e99bd20dad85 curvecalc: fully catch and display errors in expr eval
David McClosky <dmcc@bigasterisk.com>
parents: 294
diff changeset
192 dispatcher.send("expr_error", sender=self.subexpr, exc=str(e))
e99bd20dad85 curvecalc: fully catch and display errors in expr eval
David McClosky <dmcc@bigasterisk.com>
parents: 294
diff changeset
193 return Submaster.Submaster('Error: %s' % str(e), temporary=True)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
194
45b12307c695 Initial revision
drewp
parents:
diff changeset
195 class Subtermview(tk.Frame):
360
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
196 def __init__(self, master, graph, st, **kw):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
197 self.subterm = st
45b12307c695 Initial revision
drewp
parents:
diff changeset
198 tk.Frame.__init__(self,master,bd=1,relief='raised',**kw)
360
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
199 l = tk.Label(self,
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
200 text="sub %s" % graph.label(self.subterm.submaster.uri))
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
201 l.pack(side='left')
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
202 sev=Subexprview(self,self.subterm.subexpr)
45b12307c695 Initial revision
drewp
parents:
diff changeset
203 sev.pack(side='left',fill='both',exp=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
204
45b12307c695 Initial revision
drewp
parents:
diff changeset
205 class Output:
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
206 lastsendtime=0
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
207 lastsendlevs=None
287
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
208 def __init__(self,subterms,music):
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
209 make_attributes_from_args('subterms','music')
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
210
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
211 self.recent_t=[]
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
212 self.later = None
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
213
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
214 self.update()
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
215
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
216 def update(self):
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
217 d = music.current_time()
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
218 d.addCallback(self.update2)
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
219 d.addErrback(self.updateerr)
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
220
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
221 def updateerr(self,e):
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
222
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
223 print e.getTraceback()
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
224 dispatcher.send("update status",val=e.getErrorMessage())
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
225 if self.later and not self.later.cancelled and not self.later.called:
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
226 self.later.cancel()
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
227 self.later = reactor.callLater(1,self.update)
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
228
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
229 def update2(self,t):
326
a3267d8c498e leave in a comment about how to offset the audio time in case your sound card is lying
Drew Perttula <drewp@bigasterisk.com>
parents: 319
diff changeset
230
a3267d8c498e leave in a comment about how to offset the audio time in case your sound card is lying
Drew Perttula <drewp@bigasterisk.com>
parents: 319
diff changeset
231 # spot alsa soundcard offset is always 0, we get times about a
a3267d8c498e leave in a comment about how to offset the audio time in case your sound card is lying
Drew Perttula <drewp@bigasterisk.com>
parents: 319
diff changeset
232 # second ahead of what's really getting played
a3267d8c498e leave in a comment about how to offset the audio time in case your sound card is lying
Drew Perttula <drewp@bigasterisk.com>
parents: 319
diff changeset
233 #t = t - .7
a3267d8c498e leave in a comment about how to offset the audio time in case your sound card is lying
Drew Perttula <drewp@bigasterisk.com>
parents: 319
diff changeset
234
287
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
235 dispatcher.send("update status",
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
236 val="ok: receiving time from music player")
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
237 if self.later and not self.later.cancelled and not self.later.called:
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
238 self.later.cancel()
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
239
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
240 self.later = reactor.callLater(.05, self.update)
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
241
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
242 self.recent_t = self.recent_t[-50:]+[t]
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
243 period = (self.recent_t[-1] - self.recent_t[0]) / len(self.recent_t)
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
244 dispatcher.send("update period", val=period)
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
245 self.send_dmx(t)
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
246
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
247 def send_dmx(self,t):
362
fc87327e29c4 CC now attaches to hardware sliders and knobs. tres cool. KC gets a --sliders option to enable the sliders
Drew Perttula <drewp@bigasterisk.com>
parents: 361
diff changeset
248 dispatcher.send("curves to sliders", t=t)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
249 scaledsubs=[]
45b12307c695 Initial revision
drewp
parents:
diff changeset
250 for st in self.subterms:
45b12307c695 Initial revision
drewp
parents:
diff changeset
251 scl = st.scaled(t)
45b12307c695 Initial revision
drewp
parents:
diff changeset
252 scaledsubs.append(scl)
45b12307c695 Initial revision
drewp
parents:
diff changeset
253 out = Submaster.sub_maxes(*scaledsubs)
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
254 levs = out.get_levels()
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
255 now=time.time()
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
256 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
257 dispatcher.send("output levels",val=levs)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
258 dmxclient.outputlevels(out.get_dmx_list(),
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
259 twisted=1,clientid='curvecalc')
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
260 self.lastsendtime = now
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
261 self.lastsendlevs = levs
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
262
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
263 def create_status_lines(master):
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
264 for signame,textfilter in [
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
265 ('input time',lambda t: "%.2fs"%t),
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
266 ('output levels',
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
267 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
268 for n,v in
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
269 levels.items()[:5]
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
270 if v>0]),70)),
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
271 ('update period',lambda t: "%.1fms"%(t*1000)),
236
63601fe0c3b0 curvecalc cmdline checking, connection status now in gui
drewp@bigasterisk.com
parents: 230
diff changeset
272 ('update status',lambda t: str(t)),
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
273 ]:
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
274 l = tk.Label(master,anchor='w',justify='left')
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
275 l.pack(side='top',fill='x')
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
276 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
277 l.config(text=sn+": "+tf(val)),
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
278 signame,weak=0)
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
279
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
280 class SubtermSetView(tk.Frame):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
281 def __init__(self, master, *args, **kw):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
282 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
283 self.cur_row = 0
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
284 self.cur_col = 0
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
285 self.ncols = 2
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
286 def add_subtermview(self, stv):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
287 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
288 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
289
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
290 self.cur_col += 1
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
291 self.cur_col %= self.ncols
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
292 if self.cur_col == 0:
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
293 self.cur_row += 1
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
294
360
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
295 def add_one_subterm(graph, subUri, curveset, subterms, root, ssv, expr=None):
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
296 subname = graph.label(subUri)
287
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
297 if expr is None:
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
298 expr = '%s(t)' % subname
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
299
360
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
300 term = Subterm(Submaster.Submaster(graph=graph, sub=subUri),
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
301 Subexpr(curveset,expr))
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
302 subterms.append(term)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
303
360
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
304 stv=Subtermview(ssv, graph, term)
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
305 # stv.pack(side='top',fill='x')
210
f41004d5a507 factored out some networking, new show/ layout, curvecalc works
drewp@bigasterisk.com
parents: 205
diff changeset
306
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
307 ssv.add_subtermview(stv)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
308
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
309 return term
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
310
351
a6662d61ebcd SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents: 335
diff changeset
311 def sub_commands_tk(master, curveset, subterms, root, ssv, graph):
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
312 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
313 newname = tk.StringVar()
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
314
398
c5f0b530ade5 curvecalc: easy curve+sub creation
David McClosky <dmcc@bigasterisk.com>
parents: 397
diff changeset
315 def add_cmd(evt):
360
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
316 add_one_subterm(graph, L9['sub/%s' % newname.get()],
397
c43691ddd39e curvecalc: better default expr
David McClosky <dmcc@bigasterisk.com>
parents: 362
diff changeset
317 curveset, subterms, root, ssv, None)
398
c5f0b530ade5 curvecalc: easy curve+sub creation
David McClosky <dmcc@bigasterisk.com>
parents: 397
diff changeset
318 if evt.state & 4: # control key modifier
c5f0b530ade5 curvecalc: easy curve+sub creation
David McClosky <dmcc@bigasterisk.com>
parents: 397
diff changeset
319 curveset.new_curve(newname.get())
281
e3362ad9a123 curvecalc gets "see time until end", C-r for reload, doc updates
David McClosky <dmcc@bigasterisk.com>
parents: 280
diff changeset
320 newname.set('')
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
321
279
5bfcf309e1ad Submaster objects listen for a signal to reload, curvecalc can broadcast it
David McClosky <dmcc@bigasterisk.com>
parents: 277
diff changeset
322 def reload_subs():
5bfcf309e1ad Submaster objects listen for a signal to reload, curvecalc can broadcast it
David McClosky <dmcc@bigasterisk.com>
parents: 277
diff changeset
323 dispatcher.send('reload all subs')
5bfcf309e1ad Submaster objects listen for a signal to reload, curvecalc can broadcast it
David McClosky <dmcc@bigasterisk.com>
parents: 277
diff changeset
324
281
e3362ad9a123 curvecalc gets "see time until end", C-r for reload, doc updates
David McClosky <dmcc@bigasterisk.com>
parents: 280
diff changeset
325 tk.Button(f, text="reload subs (C-r)",
e3362ad9a123 curvecalc gets "see time until end", C-r for reload, doc updates
David McClosky <dmcc@bigasterisk.com>
parents: 280
diff changeset
326 command=reload_subs).pack(side='left')
398
c5f0b530ade5 curvecalc: easy curve+sub creation
David McClosky <dmcc@bigasterisk.com>
parents: 397
diff changeset
327 tk.Label(f, text="new subterm named (C-Enter for curve too):").pack(side='left')
282
d482699decbd curvecalc: "Enter" in the new term entry creates new term
David McClosky <dmcc@bigasterisk.com>
parents: 281
diff changeset
328 entry = tk.Entry(f, textvariable=newname)
d482699decbd curvecalc: "Enter" in the new term entry creates new term
David McClosky <dmcc@bigasterisk.com>
parents: 281
diff changeset
329 entry.pack(side='left', fill='x', exp=1)
398
c5f0b530ade5 curvecalc: easy curve+sub creation
David McClosky <dmcc@bigasterisk.com>
parents: 397
diff changeset
330 entry.bind("<Key-Return>", add_cmd)
282
d482699decbd curvecalc: "Enter" in the new term entry creates new term
David McClosky <dmcc@bigasterisk.com>
parents: 281
diff changeset
331
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
332 return f
287
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
333
357
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
334 def savesubterms(filename,subterms):
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
335 raise NotImplementedError
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
336 s=""
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
337 for st in subterms:
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
338 s=s+"%s %s\n" % (st.submaster.name, st.subexpr.expr)
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
339
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
340 file(filename,'w').write(s)
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
341
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
342 def createSubtermGraph(song, subterms):
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
343 """rdf graph describing the subterms, readable by add_subterms_for_song"""
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
344 graph = Graph()
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
345 for subterm in subterms:
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
346 uri = URIRef(song + "/subterm/" + subterm.submaster.name)
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
347 graph.add((song, L9['subterm'], uri))
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
348 graph.add((uri, RDF.type, L9['Subterm']))
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
349 graph.add((uri, L9['sub'], L9['sub/%s' % subterm.submaster.name]))
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
350 graph.add((uri, L9['expression'], Literal(subterm.subexpr.expr)))
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
351 return graph
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
352
335
8a1ec8aca432 more rdf updates
drewp@bigasterisk.com
parents: 332
diff changeset
353 def add_subterms_for_song(graph, song, curveset, subterms, root, ssv):
8a1ec8aca432 more rdf updates
drewp@bigasterisk.com
parents: 332
diff changeset
354 for st in graph.objects(song, L9['subterm']):
8a1ec8aca432 more rdf updates
drewp@bigasterisk.com
parents: 332
diff changeset
355 add_one_subterm(graph, graph.value(st, L9['sub']), curveset, subterms,
8a1ec8aca432 more rdf updates
drewp@bigasterisk.com
parents: 332
diff changeset
356 root, ssv, graph.value(st, L9['expression']))
287
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
357
357
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
358 def graphPathForSubterms(song):
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
359 return showconfig.subtermsForSong(showconfig.songFilenameFromURI(song)) + ".n3"
351
a6662d61ebcd SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents: 335
diff changeset
360
360
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
361 def read_all_subs(graph):
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
362 """read all sub files into this graph so when add_one_subterm tries
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
363 to add, the sub will be available"""
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
364 subsDir = showconfig.subsDir()
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
365 for filename in os.listdir(subsDir):
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
366 graph.parse(os.path.join(subsDir, filename), format="n3")
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
367
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
368 #######################################################################
45b12307c695 Initial revision
drewp
parents:
diff changeset
369 root=tk.Tk()
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
370 root.tk_setPalette("gray50")
264
0f112a7dd6b3 fix window positoins for subcomposer and curvecalc. now saves geometry continuously
drewp@bigasterisk.com
parents: 248
diff changeset
371 toplevelat("curvecalc",root)
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
372 root.tk_focusFollowsMouse()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
373
236
63601fe0c3b0 curvecalc cmdline checking, connection status now in gui
drewp@bigasterisk.com
parents: 230
diff changeset
374 parser = optparse.OptionParser()
362
fc87327e29c4 CC now attaches to hardware sliders and knobs. tres cool. KC gets a --sliders option to enable the sliders
Drew Perttula <drewp@bigasterisk.com>
parents: 361
diff changeset
375 parser.add_option("--sliders", action='store_true',
fc87327e29c4 CC now attaches to hardware sliders and knobs. tres cool. KC gets a --sliders option to enable the sliders
Drew Perttula <drewp@bigasterisk.com>
parents: 361
diff changeset
376 help='use hardware sliders')
fc87327e29c4 CC now attaches to hardware sliders and knobs. tres cool. KC gets a --sliders option to enable the sliders
Drew Perttula <drewp@bigasterisk.com>
parents: 361
diff changeset
377 parser.add_option("--skip-music", action='store_true',
fc87327e29c4 CC now attaches to hardware sliders and knobs. tres cool. KC gets a --sliders option to enable the sliders
Drew Perttula <drewp@bigasterisk.com>
parents: 361
diff changeset
378 help="ignore music and smooth_music curve files")
fc87327e29c4 CC now attaches to hardware sliders and knobs. tres cool. KC gets a --sliders option to enable the sliders
Drew Perttula <drewp@bigasterisk.com>
parents: 361
diff changeset
379 opts, args = parser.parse_args()
236
63601fe0c3b0 curvecalc cmdline checking, connection status now in gui
drewp@bigasterisk.com
parents: 230
diff changeset
380
63601fe0c3b0 curvecalc cmdline checking, connection status now in gui
drewp@bigasterisk.com
parents: 230
diff changeset
381 try:
335
8a1ec8aca432 more rdf updates
drewp@bigasterisk.com
parents: 332
diff changeset
382 song = URIRef(args[0])
236
63601fe0c3b0 curvecalc cmdline checking, connection status now in gui
drewp@bigasterisk.com
parents: 230
diff changeset
383 except IndexError:
63601fe0c3b0 curvecalc cmdline checking, connection status now in gui
drewp@bigasterisk.com
parents: 230
diff changeset
384 raise SystemExit("song name is required, e.g. '05-mix'")
63601fe0c3b0 curvecalc cmdline checking, connection status now in gui
drewp@bigasterisk.com
parents: 230
diff changeset
385
319
2193eab0650b add startup logging to curvecalc
Drew Perttula <drewp@bigasterisk.com>
parents: 296
diff changeset
386 log.debug("music")
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
387 music=Music()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
388
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
389 zc = Zoomcontrol(root)
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
390 zc.pack(side='top',fill='x')
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
391
362
fc87327e29c4 CC now attaches to hardware sliders and knobs. tres cool. KC gets a --sliders option to enable the sliders
Drew Perttula <drewp@bigasterisk.com>
parents: 361
diff changeset
392 curveset = Curveset(sliders=opts.sliders)
fc87327e29c4 CC now attaches to hardware sliders and knobs. tres cool. KC gets a --sliders option to enable the sliders
Drew Perttula <drewp@bigasterisk.com>
parents: 361
diff changeset
393 csv = Curvesetview(root, curveset)
197
ba2677823b35 zoom control and other cleanups. also reads song length now
drewp
parents: 196
diff changeset
394 csv.pack(side='top',fill='both',exp=1)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
395
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
396 ssv = SubtermSetView(root)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
397 ssv.pack(side='top', fill='x')
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
398
360
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
399 graphOrig = showconfig.getGraph()
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
400 graph = Graph() # a copy, since we're going to add subs into it
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
401 for s in graphOrig:
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
402 graph.add(s)
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
403 read_all_subs(graph)
335
8a1ec8aca432 more rdf updates
drewp@bigasterisk.com
parents: 332
diff changeset
404 root.title("Curvemaster 3000MX - %s" % graph.label(song))
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
405
335
8a1ec8aca432 more rdf updates
drewp@bigasterisk.com
parents: 332
diff changeset
406 musicfilename = showconfig.songOnDisk(song)
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
407 maxtime = wavelength(musicfilename)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
408 dispatcher.send("max time",maxtime=maxtime)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
409 dispatcher.connect(lambda: maxtime, "get max time",weak=0)
360
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
410 curveset.load(basename=os.path.join(showconfig.curvesDir(),
362
fc87327e29c4 CC now attaches to hardware sliders and knobs. tres cool. KC gets a --sliders option to enable the sliders
Drew Perttula <drewp@bigasterisk.com>
parents: 361
diff changeset
411 showconfig.songFilenameFromURI(song)),
fc87327e29c4 CC now attaches to hardware sliders and knobs. tres cool. KC gets a --sliders option to enable the sliders
Drew Perttula <drewp@bigasterisk.com>
parents: 361
diff changeset
412 skipMusic=opts.skip_music)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
413
45b12307c695 Initial revision
drewp
parents:
diff changeset
414 subterms = []
351
a6662d61ebcd SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents: 335
diff changeset
415 sub_commands_tk(root, curveset, subterms, root, ssv, graph).pack(side='top',fill='x')
279
5bfcf309e1ad Submaster objects listen for a signal to reload, curvecalc can broadcast it
David McClosky <dmcc@bigasterisk.com>
parents: 277
diff changeset
416
357
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
417 try:
360
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
418 graph.parse(graphPathForSubterms(song), format='n3')
415c206f7534 fix sub loading and reloading in CC
Drew Perttula <drewp@bigasterisk.com>
parents: 357
diff changeset
419 add_subterms_for_song(graph, song, curveset, subterms, root, ssv)
357
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
420 except OSError, e:
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
421 print e
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
422
319
2193eab0650b add startup logging to curvecalc
Drew Perttula <drewp@bigasterisk.com>
parents: 296
diff changeset
423 log.debug("output")
287
5322639d61e9 refactoring and little fixes in curvecalc and keyboardcomposer
Drew Perttula <drewp@bigasterisk.com>
parents: 284
diff changeset
424 out = Output(subterms, music)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
425
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
426 def savekey(*args):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
427 print "saving",song
357
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
428 g = createSubtermGraph(song, subterms)
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
429 g.serialize(graphPathForSubterms(song), format="nt")
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
430
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
431 curveset.save(basename=os.path.join(showconfig.curvesDir(), showconfig.songFilenameFromURI(song)))
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
432 print "saved"
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
433
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
434 root.bind("<Control-Key-s>",savekey)
281
e3362ad9a123 curvecalc gets "see time until end", C-r for reload, doc updates
David McClosky <dmcc@bigasterisk.com>
parents: 280
diff changeset
435 root.bind("<Control-Key-r>", lambda evt: dispatcher.send('reload all subs'))
202
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
436
97e21bc387fe loading and saving
drewp
parents: 200
diff changeset
437 create_status_lines(root)
294
c9dcc57116c2 new curve editing: select single/multiple points, delete selection, move selection
Drew Perttula <drewp@bigasterisk.com>
parents: 293
diff changeset
438 for helpline in ["Bindings: C-s save subterms; Esc see current time; S-Esc see curtime to end; Mousewheel zoom; C-p play/pause music at mouse",
361
ff914126f3ea fix CC selection bindings
Drew Perttula <drewp@bigasterisk.com>
parents: 360
diff changeset
439 "Curve point bindings: B1 drag point; C-B1 curve add point; S-B1 sketch points; Del selected points; 1..5 add point at time; B1 drag select points",
399
40b6a06bd090 rework Effects.py to fix chase(). now uses chase lists from config.n3
Drew Perttula <drewp@bigasterisk.com>
parents: 398
diff changeset
440 "Available in functions: nsin/ncos period=amp=1; within(a,b) bef(x) aft(x) compare to time; smoove(x) cubic smoothstep; chan(name); curvename(t) eval curve"]:
228
9827df597f86 added help texts to subcomposer, curvecalc
drewp@bigasterisk.com
parents: 216
diff changeset
441 tk.Label(root,text=helpline, font="Helvetica -12 italic",
9827df597f86 added help texts to subcomposer, curvecalc
drewp@bigasterisk.com
parents: 216
diff changeset
442 anchor='w').pack(side='top',fill='x')
9827df597f86 added help texts to subcomposer, curvecalc
drewp@bigasterisk.com
parents: 216
diff changeset
443
205
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
444 #def logprint(msg):
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
445 # print "log",msg
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
446 #twisted.python.log.addObserver(logprint)
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
447
3905d3c92aaa twisted mainloop, more row-change keys, xmlrpc fadesub command on port 8050
drewp
parents: 202
diff changeset
448 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
449 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
450 root.protocol('WM_DELETE_WINDOW', reactor.stop)
267
9de7bbf50267 curvecalc fixes, especially a slowdown of the updates that's working better
drewp@bigasterisk.com
parents: 264
diff changeset
451 tksupport.install(root,ms=20)
319
2193eab0650b add startup logging to curvecalc
Drew Perttula <drewp@bigasterisk.com>
parents: 296
diff changeset
452 log.debug("run")
357
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
453 prof.run(reactor.run, profile=False)
7771f37252da curvecalc persistence, wavecurve -a option
Drew Perttula <drewp@bigasterisk.com>
parents: 351
diff changeset
454