Commit | Line | Data |
---|---|---|
e28f168c AG |
1 | class GenericController { |
2 | GenericController(){} | |
3 | public void RotateKnob(int type, int num, float val){ | |
4 | LXParameter p = null; | |
5 | if(type==0) { | |
0b8db891 | 6 | p = glucose.getPattern().getParameters().get(num); |
e28f168c AG |
7 | if(p!=null) { p.setValue(val); } |
8 | } | |
9 | if(type==1) { | |
0b8db891 | 10 | p = glucose.getSelectedTransition().getParameters().get(num); |
e28f168c AG |
11 | if(p!=null) { p.setValue(val); } |
12 | } | |
13 | if(type==2) { | |
0b8db891 | 14 | p = glucose.getSelectedEffect().getParameters().get(num); |
e28f168c AG |
15 | if(p!=null) { p.setValue(val); } |
16 | } | |
17 | } | |
18 | } | |
19 | ||
20 | class MidiController extends GenericController { | |
21 | MidiController() { | |
22 | super(); | |
23 | } | |
24 | } | |
25 | //PApplet xparent; // be sure to set | |
26 | ||
27 | ||
28 | ||
29 | OscP5 listener; | |
30 | // Setup OSC | |
31 | //listener = new OscP5(this,7022); | |
32 | ||
33 | //boolean[] noteState = new boolean[16]; | |
34 | // | |
35 | //void controllerChangeReceived(rwmidi.Controller cc) { | |
36 | // if (debugMode) { | |
37 | // println("CC: " + cc.toString()); | |
38 | // } | |
39 | // if(cc.getCC()==1){ | |
40 | // for(int i=0; i<16; i++){ | |
0b8db891 MS |
41 | // if(noteState[i] && i<8) { LXParameter p = glucose.getPattern().getParameters().get(i); p.setValue(cc.getValue()/127.0); } |
42 | // else if(noteState[i] && i<12) { LXParameter p = glucose.getSelectedTransition().getParameters().get(i-8); p.setValue(cc.getValue()/127.0); } | |
43 | // else if(noteState[i] && i<16) { LXParameter p = glucose.getSelectedEffect().getParameters().get(i-12); p.setValue(cc.getValue()/127.0); } | |
e28f168c AG |
44 | // } |
45 | // } | |
46 | //} | |
47 | // | |
48 | //void noteOnReceived(Note note) { | |
49 | // if (debugMode) { | |
50 | // println("Note On: " + note.toString()); | |
51 | // } | |
52 | // int pitch = note.getPitch(); | |
53 | // if(pitch>=36 && pitch <36+16){ | |
54 | // noteState[pitch-36]=true; | |
55 | // } | |
56 | //} | |
57 | // | |
58 | //void noteOffReceived(Note note) { | |
59 | // if (debugMode) { | |
60 | // println("Note Off: " + note.toString()); | |
61 | // } | |
62 | // int pitch = note.getPitch(); | |
63 | // if(pitch>=36 && pitch <36+16){ | |
64 | // noteState[pitch-36]=false; | |
65 | // } | |
66 | //} | |
67 | // | |
68 | //void oscEvent(OscMessage theOscMessage) { | |
69 | // println(theOscMessage); | |
70 | // LXPattern currentPattern = lx.getPattern(); | |
71 | // if (currentPattern instanceof OSCPattern) { | |
72 | // ((OSCPattern)currentPattern).oscEvent(theOscMessage); | |
73 | // } | |
74 | //} | |
75 | // | |
76 | ||
77 | ||
78 | class ObjectMuckerEffect extends SCEffect { | |
79 | ObjectMuckerEffect(GLucose glucose) { | |
80 | super(glucose); | |
81 | } | |
d12e46b6 | 82 | public void apply(int[] colors){ |
e28f168c AG |
83 | /*for(Strip s: model.strips){ |
84 | for(int i=0; i<s.points.size(); i++){ | |
85 | int index = s.points.get(i).index; | |
86 | color c = colors[index]; | |
a41f334c | 87 | colors[index] = lx.hsb((i*22.5), saturation(c), brightness(c)); |
e28f168c AG |
88 | } |
89 | }*/ | |
90 | } | |
91 | } | |
92 | ||
93 | class BlendFrames extends SCEffect { | |
94 | int fcount; | |
95 | int frames[][]; | |
96 | int maxfbuf; | |
97 | int blendfactor; | |
98 | BlendFrames(GLucose glucose) { | |
99 | super(glucose); | |
100 | maxfbuf = 30; | |
101 | blendfactor=30; | |
102 | fcount=0; | |
103 | frames = new int[maxfbuf][]; | |
104 | for(int i=0; i<maxfbuf; i++){ | |
105 | frames[i] = new int[model.points.size()]; | |
106 | } | |
107 | } | |
d12e46b6 | 108 | public void apply(int[] colors) { |
e28f168c AG |
109 | if(fcount<maxfbuf){ |
110 | for(int i=0; i<colors.length; i++){ | |
111 | frames[(maxfbuf-1)-fcount][i]=colors[i]; | |
112 | } | |
113 | fcount++; | |
114 | return; | |
115 | } else { | |
116 | for(int i=maxfbuf-1; i>0; i--){ | |
117 | frames[i] = frames[i-1]; | |
118 | } | |
119 | frames[0] = new int[model.points.size()]; | |
120 | ||
121 | for(int i=0; i<colors.length; i++){ | |
122 | int r,g,b; | |
123 | r=g=b=0; | |
124 | for(int j=0; j<blendfactor; j++){ | |
125 | if(j==0) { frames[0][i] = colors[i]; } | |
126 | r += ((frames[j][i] >> 16) & 0xFF); | |
127 | g += ((frames[j][i] >> 8) & 0xFF); | |
128 | b += ((frames[j][i] >> 0) & 0xFF); | |
129 | } | |
130 | r/=blendfactor; | |
131 | g/=blendfactor; | |
132 | b/=blendfactor; | |
133 | colorMode(ARGB); | |
134 | colors[i] = (0xFF << 24) | (r << 16) | (g << 8) | b; | |
135 | colorMode(HSB); | |
136 | } | |
137 | ||
138 | } | |
139 | } | |
140 | } | |
141 | ||
142 | ||
143 | import netP5.*; | |
144 | import oscP5.*; | |
145 | ||
146 | ||
147 | ||
148 | abstract class OSCPattern extends SCPattern { | |
149 | public OSCPattern(GLucose glucose){super(glucose);} | |
150 | public abstract void oscEvent(OscMessage msg); | |
151 | } | |
152 | ||
153 | class Ball { | |
154 | public int lastSeen; | |
155 | public float x,y; | |
156 | public Ball(){ | |
157 | x=y=lastSeen=0; | |
158 | } | |
159 | } | |
160 | ||
161 | class OSC_Balls extends OSCPattern { | |
162 | Ball[] balls; | |
163 | public OSC_Balls(GLucose glucose){ | |
164 | super(glucose); | |
165 | balls = new Ball[20]; | |
166 | for(int i=0; i<balls.length; i++) { balls[i] = new Ball(); } | |
167 | } | |
168 | void oscEvent(OscMessage msg){ | |
169 | String pattern[] = split(msg.addrPattern(), "/"); | |
170 | int ballnum = int(pattern[3]); | |
171 | balls[ballnum].lastSeen=millis(); | |
172 | balls[ballnum].x = msg.get(0).floatValue(); | |
173 | balls[ballnum].y = msg.get(1).floatValue(); | |
174 | } | |
175 | ||
34327c96 | 176 | void run(double deltaMs){ |
2bb56822 | 177 | for(LXPoint p: model.points){ colors[p.index]=0; } |
e28f168c AG |
178 | for(int i=1; i<balls.length; i++){ |
179 | if(millis() - balls[i].lastSeen < 1000) { | |
2bb56822 | 180 | for(LXPoint p: model.points){ |
e28f168c AG |
181 | int x = int(balls[i].x * 255.0); |
182 | int y = int(balls[i].y * 127.0); | |
183 | if(p.x < x+4 && p.x > x-4 && p.y < y+4 && p.y > y-4) { colors[p.index] = #FF0000; } | |
184 | } | |
185 | } | |
186 | } | |
187 | } | |
188 | } | |
189 | ||
190 | import processing.serial.*; | |
191 | ||
192 | ||
193 | /*class ScreenScrape extends SCPattern { | |
194 | PImage pret; | |
195 | ScreenShot ss; | |
196 | public ScreenScrape(GLucose glucose) { | |
197 | super(glucose); | |
198 | System.loadLibrary("ScreenShot"); | |
199 | pret = new PImage(8, 128, ARGB); | |
200 | ss = new ScreenShot(); | |
201 | } | |
34327c96 | 202 | void run(double deltaMs){ |
e28f168c AG |
203 | int x=(1366/2)+516; |
204 | int y=768-516; | |
205 | int w=8; | |
206 | int h=128; | |
207 | pret.pixels = ss.getScreenShotJNI2(x, y, w, h); | |
208 | //for(int i=0; i<px.length; i++){ pret.pixels[i] = px[i]; } | |
209 | //println(pret.get(10,10)); | |
2bb56822 | 210 | for(LXPoint p: model.points){ |
e28f168c AG |
211 | colors[p.index] = pret.get((int(p.x)/8)*8, 128-int(p.y)); |
212 | } | |
213 | } | |
214 | }*/ | |
215 |