comparison light8/Configeffects.py @ 0:45b12307c695

Initial revision
author drewp
date Wed, 03 Jul 2002 09:37:57 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:45b12307c695
1 from random import randrange
2 from time import time
3 from __future__ import generators,division
4 from Subs import *
5 from Cue import *
6
7 def strobe(params, slideradjuster):
8 patterns = {
9 'blue' : fulls((23,27,31,35,'b0 4 b','b2 3 b')),
10 'cyc' : {42:FL,43:FL},
11 'scp all' : fulls((13,16,18,19,39)),
12 '1-5' : fulls(range(1, 6)),
13 }
14 params.add_param('offtime',SliderParam(range=(0.1,0.3), res=0.001,
15 initial=0.11, length=100))
16 params.add_param('ontime',SliderParam(range=(0.0,0.8), res=0.001,
17 length=100))
18 params.add_param('pattern',ListParam(patterns.keys()))
19 params.add_param('current',LabelParam('none'))
20 params.add_param('count',SliderParam(range=(0, 10), res=1, initial=0))
21 lastchanged = time()
22 state = 0
23 blinkcounter = 0
24 my_pattern = None
25
26 while 1:
27 if params['count'] and blinkcounter > params['count']:
28 blinkcounter = 0
29 slideradjuster.set(0)
30
31 if params['pattern'] != None:
32 params['current'] = params['pattern']
33 my_pattern = params['pattern']
34
35 if state == 0:
36 delay = params['offtime']
37 else:
38 delay = params['ontime']
39
40 if time() > (lastchanged + delay):
41 # ready for change
42 state = not state
43 lastchanged = time()
44 blinkcounter += 0.5
45
46 try: # protect against keyerrors (and possibly everything else)
47 if state:
48 yield patterns[my_pattern]
49 else:
50 yield scaledict(patterns[my_pattern], .1)
51 except:
52 yield {}
53
54 def chase(params, slideradjuster):
55 patterns = {
56 'all': ( fulls(('b01','b21')),
57 fulls(('b02','b22')),
58 fulls(('b03','b23')),
59 fulls(('b04','b24')),
60 fulls(('b05','b25')),
61 fulls(('b06','b26')),
62 ),
63 'red':( fulls(('b0 1 r','b2 2 r')),
64 fulls(('b0 5 r','b2 6 r'))),
65 'randcol':([fulls((x,)) for x
66 in ("b21 b23 b25 b03 b06 b24 b22 "+
67 "b24 b03 b23 b01 b04 b05 b22 "+
68 "b02 b02 b26 b21 b06 b25 b26 "+
69 "b01 b04 b05").split()]),
70 'ctrpong':[fulls((x,)) for x in (
71 "b11 b12 b13 b14 b15 b16 b15 b14 b13 b12".split())],
72 'l-r': ( fulls(('b01','b11','b21')),
73 fulls(('b02','b12','b22')),
74 fulls(('b03','b13','b23')),
75 fulls(('b04','b14','b24')),
76 fulls(('b05','b15','b25')),
77 fulls(('b06','b16','b26'))),
78 'flutter':(
79 fulls(('main 6','b15')),
80 fulls(('main 1','b12')),
81 fulls(('main 2','b11')),
82 fulls(('b12', 'main 3')),
83 fulls(('b15', 'main 9')),
84 fulls(('b16', 'main 4')),
85 fulls(('main 4','b13')),
86 fulls(('main 3','b11')),
87 fulls(('main 8','b15')),
88 fulls(('main 9','b12')),
89 fulls(('b11', 'main 1')),
90 fulls(('main 5','b15')),
91 fulls(('b13', 'main 6')),
92 fulls(('b14', 'main 2')),
93 fulls(('main 7','b16')),
94 ),
95 'randstage':([fulls((x,)) for x
96 in ("""
97 b22 27 b04 26 b26 21 28 b25 23 b02 31 b05 32 34 b03 24 b01 25
98 b23 29 22 35 30 b24 33 36 """).split()]),
99
100 }
101
102 params.add_param('steptime',SliderParam(range=(.1,3),
103 initial=.4,length=150))
104 params.add_param('overlap',SliderParam(range=(0,8),initial=1.5))
105 params.add_param('pattern',ListParam(options=patterns.keys(),
106 initial='all'))
107 params.add_param('current',LabelParam('none'))
108
109 steps=()
110
111 def fn(x):
112 warm=.1
113 # the _/\_ wave for each step. input 0..1, output 0..1
114 if x<0 or x>1:
115 return warm
116 if x<.5:
117 return warm+(1.0-warm)*(x*2)
118 else:
119 return warm+(1.0-warm)*(2-(x*2))
120
121 def stepbrightness(stepnum,numsteps,overlap,pos):
122 startpos = stepnum/numsteps
123 p=( (pos-startpos)*(1.0+overlap) )%1.0
124 ret=fn( p )
125 #print "step %(stepnum)i/%(numsteps)i pos %(pos)f ,p=%(p)f is %(ret)f" % locals()
126 return ret
127
128 queued=[] # list of steps, each step is starttime,stepcue
129 lastaddtime=time()-100
130 currentpattern='all'
131 steps=patterns[currentpattern]
132 stepsiter=iter(())
133 while 1:
134 params['current'] = params['pattern']
135
136 # changed pattern?
137 if params['pattern']!=currentpattern and params['pattern'] in patterns:
138 currentpattern=params['pattern']
139 steps=patterns[currentpattern]
140 stepsiter=iter(steps) # restart iterator
141
142 # time to put a new step in the queue?
143 if time()>lastaddtime+params['steptime']:
144 lastaddtime=time()
145 try:
146 nextstep = stepsiter.next()
147 except StopIteration:
148 stepsiter=iter(steps)
149 nextstep=stepsiter.next()
150 queued.append( (time(),nextstep) )
151
152 # loop over queue, putting still-active (scaled) steps in shiftedsteps
153 keepers=[]
154 shiftedsteps=[]
155 for started,s in queued:
156 steptime = time()-started
157 finish = started+(1.0+params['overlap'])*params['steptime']
158 pos = (time()-started)/(finish-started)
159 if time()<finish:
160 keepers.append((started,s))
161 shiftedsteps.append( scaledict(s,fn(pos)) )
162
163 if len(keepers)>30:
164 print "too many steps in chase - dumping some"
165 queued=keepers[:20]
166 else:
167 queued=keepers
168
169
170 # pos=(time()%params['steptime'])/params['steptime'] # 0..1 animated variable
171 # shiftedsteps=[]
172 # for i,s in zip(range(0,len(steps)),steps):
173 # shiftedsteps.append( scaledict(s, stepbrightness(i,len(steps),params['overlap'],pos)) )
174 yield maxes(shiftedsteps)
175
176
177 def randomdimmer(params, slideradjuster):
178 params.add_param('magic', CheckboxParam())
179 params.add_param('cheese', TextParam())
180 params.add_param('stuff', ListParam(('a', 'b', 'c')))
181
182 curtime = time()
183 dim = 1
184 while 4:
185 if time() - curtime > 1:
186 dim = randrange(1, 64)
187 curtime = time()
188 yield {dim : 100, 20 : params.get_param_value('magic')}
189