From 935819e636e2487e42859b5cbabb9b4ba2a326ea Mon Sep 17 00:00:00 2001 From: bb3dan Date: Fri, 18 Oct 2013 20:08:40 -0700 Subject: [PATCH] updated dpat --- DanHorwitz.pde | 47 ++++++----- DanUtil.pde | 216 +++++++++++++++++++------------------------------ 2 files changed, 109 insertions(+), 154 deletions(-) diff --git a/DanHorwitz.pde b/DanHorwitz.pde index 009d74f..76dd0d3 100644 --- a/DanHorwitz.pde +++ b/DanHorwitz.pde @@ -99,8 +99,6 @@ public class Noise extends DPat N[2].set(40 ,100,100,2 ,15 ,2 ,180); N[3].set(60 ,100,100,2 ,15 ,1.5,270); pSharp.set(.5); break; // spark } - - DG.UpdateLights(); } for (int i=0; i<_ND; i++) if (N[i].Active()) { @@ -212,6 +210,14 @@ public class Play extends DPat } void StartPattern() { zTheta=0; } + + int KeyPressed = -1; + boolean noteOn(Note note) { + int row = note.getPitch(), col = note.getChannel(); + if (row == 57) {KeyPressed = col; return true; } + return super.noteOn(note); + } + void StartRun(double deltaMs) { t = lx.tempo.rampf(); amp = pAmp.Val(); @@ -244,13 +250,13 @@ public class Play extends DPat w.move(deltaMs); if (w.bDone) waves.remove(i); else i++; } - if ((t-1) { + if ((t-1) { waves.add(new rWave( - pKey.b ? map(DG.KeyPressed,0,7,0,1) : random(1), // location + KeyPressed>-1 ? map(KeyPressed,0,7,0,1) : random(1), // location bnc*10, // bounciness 7, // velocity 2*(1-amp))); // dampiness - DG.KeyPressed=-1; + KeyPressed=-1; if (waves.size() > 5) waves.remove(0); } @@ -336,7 +342,8 @@ public class Play extends DPat case 12: return lx.hsb(lxh() + noise(Pn.x,Pn.y,Pn.z + (NoiseMove+50000)/1000.)*200, 85,c1c(Pn.y < noise(Pn.x + NoiseMove/2000.,Pn.z)*(1+amp)-amp/2.-.1 ? 1 : 0)); // noise - case 13: float y=0; for (rWave w : waves) y += .5*w.val(Pn.x); + case 13: + case 14: float y=0; for (rWave w : waves) y += .5*w.val(Pn.x); // wave V.set(Pn.x, .7+y, Pn.z); break; @@ -366,39 +373,39 @@ class dCursor { boolean isDone () { return pos==posStop; } boolean atDest () { return vCur.s==vDest.s || - PointDist(vCur.getPoint(0), vDest.getPoint(0)) < 12 || - PointDist(vCur.getPoint(0), vDest.getPoint(15))< 12;} - void setCur (dVertex _v, int _p) { p2=null; vCur=_v; pos=_p; PickNext(); } + pointDist(vCur.getPoint(0), vDest.getPoint(0)) < 12 || + pointDist(vCur.getPoint(0), vDest.getPoint(15))< 12;} + void setCur (dVertex _v, int _p) { p2=null; vCur=_v; pos=_p; pickNext(); } void setCur (dPixel _p) { setCur(_p.v, _p.pos); } void setNext (dVertex _v, int _p, int _s) { vNext = _v; posNext = _p<<12; posStop = _s<<12; } void setDest (dVertex _v, float _speed) { vDest = _v; destSpeed = _speed; } - void onDone () { setCur(vNext, posNext); PickNext(); } + void onDone () { setCur(vNext, posNext); pickNext(); } float minDist; int nTurns; boolean bRandEval; - void Evaluate(dVertex v, int p, int s) { + void evaluate(dVertex v, int p, int s) { if (v == null) return; ++nTurns; if (bRandEval) { if (random(nTurns) < 1) setNext(v,p,s); return; } else { - float d = PointDist(v.getPoint(15), vDest.getPoint(0)); + float d = pointDist(v.getPoint(15), vDest.getPoint(0)); if (d < minDist) { minDist=d; setNext(v,p,s); } if (d == minDist && random(2)<1) { minDist=d; setNext(v,p,s); } } } - void EvalTurn(dTurn t) { + void evalTurn(dTurn t) { if (t == null || t.pos0<<12 <= pos) return; - Evaluate(t.v , t.pos1, t.pos0); - Evaluate(t.v.opp, 16-t.pos1, t.pos0); + evaluate(t.v , t.pos1, t.pos0); + evaluate(t.v.opp, 16-t.pos1, t.pos0); } - void PickNext() { + void pickNext() { bRandEval = random(.05+destSpeed) < .05; minDist=500; nTurns=0; - Evaluate(vCur.c0, 0, 16); Evaluate(vCur.c1, 0, 16); - EvalTurn(vCur.t0); EvalTurn(vCur.t1); + evaluate(vCur.c0, 0, 16); evaluate(vCur.c1, 0, 16); + evalTurn(vCur.t0); evalTurn(vCur.t1); } Point p1, p2; int i2; @@ -409,14 +416,14 @@ class dCursor { int nTo = min(15,(pos+nMv) >> 12); dVertex v = vCur; - if (dDebug) { p1 = v.getPoint(nFrom); float d = (p2 == null ? 0 : PointDist(p1,p2)); if (d>5) { println("too wide! quitting: " + d); exit(); }} + if (dDebug) { p1 = v.getPoint(nFrom); float d = (p2 == null ? 0 : pointDist(p1,p2)); if (d>5) { println("too wide! quitting: " + d); exit(); }} for (int i = nFrom; i <= nTo; i++) { pat.getColors()[v.ci + v.dir*i ] = clr; } if (v.same != null) for (int i = nFrom; i <= nTo; i++) { pat.getColors()[v.same.ci + v.same.dir*i] = clr; } if (dDebug) { p2 = v.getPoint(nTo); i2 = nTo; } pos += nMv; return nAmount - nMv; - } + } } //---------------------------------------------------------------------------------------------------------------------------------- diff --git a/DanUtil.pde b/DanUtil.pde index 37dc956..d41716a 100644 --- a/DanUtil.pde +++ b/DanUtil.pde @@ -1,15 +1,14 @@ //---------------------------------------------------------------------------------------------------------------------------------- xyz mMax, mCtr, mHalf; int NumApcRows = 5, NumApcCols = 8; -DGlobals DG = new DGlobals(); boolean btwn (int a,int b,int c) { return a >= b && a <= c; } boolean btwn (double a,double b,double c) { return a >= b && a <= c; } float interp (float a, float b, float c) { return (1-a)*b + a*c; } float randctr (float a) { return random(a) - a*.5; } float min (float a, float b, float c, float d) { return min(min(a,b),min(c,d)); } - -float distToSeg (float x, float y, float x1, float y1, float x2, float y2) { +float pointDist(Point p1, Point p2) { return dist(p1.x,p1.y,p1.z,p2.x,p2.y,p2.z); } +float distToSeg(float x, float y, float x1, float y1, float x2, float y2) { float A = x - x1, B = y - y1, C = x2 - x1, D = y2 - y1; float dot = A * C + B * D, len_sq = C * C + D * D; float xx, yy,param = dot / len_sq; @@ -108,99 +107,58 @@ public class xyz { float x,y,z; // extends pVector; eliminate half of the functi void interpolate(float i, xyz d) { x = interp(i,x,d.x); y = interp(i,y,d.y); z = interp(i,z,d.z); } } //---------------------------------------------------------------------------------------------------------------------------------- -public class DGlobals { - boolean bInit = false; +public class DPat extends SCPattern +{ MidiOutput APCOut = null; - MidiInput APCIn = null, OxygenIn = null; - DPat CurPat = null; - int KeyPressed = -1; - boolean bSustain = false; - - - float Sliders[] = new float [] {1,0,0,0,0,0,0,0}; - String SliderText[] = new String[] {"Level", "??", "Spark", "Xwave", "Ywave", "??", "??", "??", "??"}; - - void SetNoteOn (int row, int col, int clr){ if (APCOut != null) APCOut.sendNoteOn (col, row, clr); } - void SetNoteOff (int row, int col, int clr){ if (APCOut != null) APCOut.sendNoteOff (col, row, clr); } - void SetKnob (int cc , int c , int v ){ if (APCOut != null) APCOut.sendController (cc , c, v); } - - DBool GetBool (int i) { return (DBool)CurPat.bools .get(i); } - Pick GetPick (int i) { return (Pick) CurPat.picks .get(i); } - DParam GetParam(int i) { return (DParam) CurPat.params.get(i); } - - float _Level () { return Sliders[0]; } - float _Spark () { return Sliders[2]; } - float _XWave () { return Sliders[3]; } - float _YWave () { return Sliders[4]; } - void Init () { - if (bInit) return; bInit=true; - for (MidiOutputDevice o: RWMidi.getOutputDevices()) { if (o.toString().contains("APC")) { APCOut = o.createOutput(); break;}} - for (MidiInputDevice i: RWMidi.getInputDevices ()) { if (i.toString().contains("APC")) { i.createInput (this); break;}} - } - - boolean isFocused () { return CurPat != null && CurPat == midiEngine.getFocusedDeck().getActivePattern(); } - void Deactivate (DPat p) { if (p != CurPat) return; uiDebugText.setText(""); CurPat = null; } - void Activate (DPat p) { - bSustain = false; - CurPat = p; - while (lx.tempo.bpm() > 40) lx.tempo.setBpm(lx.tempo.bpm()/2); - for (int i=0; i 40) lx.tempo.setBpm(lx.tempo.bpm()/2); + for (int i=0; i picks = new ArrayList (); + ArrayList bools = new ArrayList (); + ArrayList params = new ArrayList(); - if (row == 84 && col==0) { Activate(CurPat); CurPat.StartPattern(); return; } - if (row == 85 && col==0) { bSustain=true; return; } - - if (row == 52) { KeyPressed = col; return; } - println("row: " + row + " col: " + col); - } -} -//---------------------------------------------------------------------------------------------------------------------------------- -public class DPat extends SCPattern -{ - ArrayList picks = new ArrayList(); // should be ArrayList picks = new ArrayList(); - ArrayList params = new ArrayList(); - ArrayList bools = new ArrayList(); int nMaxRow = 53; float LastQuant = -1, LastJog = -1; float[] xWaveNz, yWaveNz; @@ -209,9 +167,9 @@ public class DPat extends SCPattern xyz modmin; float NoiseMove = random(10000); - DParam pBlank, pBlank2, pRotX, pRotY, pRotZ, pSpin, pTransX, pTransY; + DParam pSpark, pWave, pRotX, pRotY, pRotZ, pSpin, pTransX, pTransY; - DBool pXsym, pYsym, pRsym, pXdup, pXtrip, pJog, pKey; + DBool pXsym, pYsym, pRsym, pXdup, pXtrip, pJog, pGrey; float lxh () { return lx.getBaseHuef(); } float Dist (xyz a, xyz b) { return dist(a.x,a.y,a.z,b.x,b.y,b.z); } int c1c (float a) { return round(100*constrain(a,0,1)); } @@ -223,12 +181,6 @@ public class DPat extends SCPattern void StartPattern() { } void StartRun(double deltaMs) { } color CalcPoint(xyz p) { return lx.hsb(0,0,0); } - boolean IsActive() { return this == DG.CurPat; } - boolean IsFocused() { return midiEngine != null && midiEngine.getFocusedDeck() != null && - this == midiEngine.getFocusedDeck().getActivePattern(); } - void onInactive() { UpdateState(); } - void onActive () { UpdateState(); StartPattern(); } - void UpdateState() { if (IsFocused() != IsActive()) { if (IsFocused()) DG.Activate(this); else DG.Deactivate(this); } } color blend3(color c1, color c2, color c3){ return blendColor(c1,blendColor(c2,c3,ADD),ADD); } DParam addParam(String label, double value) { @@ -247,8 +199,8 @@ public class DPat extends SCPattern DPat(GLucose glucose) { super(glucose); - pBlank = addParam("", 0); - pBlank2 = addParam("" , .5); + pSpark = addParam("Sprk", 0); + pWave = addParam("Wave", 0); pTransX = addParam("TrnX", .5); pTransY = addParam("TrnY", .5); pRotX = addParam("RotX", .5); @@ -257,12 +209,12 @@ public class DPat extends SCPattern pSpin = addParam("Spin", .5); nPoints = model.points.size(); - pXsym = new DBool("X-SYM", false, 49, 0); bools.add(pXsym ); - pYsym = new DBool("Y-SYM", false, 49, 1); bools.add(pYsym ); - pRsym = new DBool("R-SYM", false, 49, 2); bools.add(pRsym ); - pXdup = new DBool("X-DUP", false, 49, 3); bools.add(pXdup ); - pJog = new DBool("JOG" , false, 49, 4); bools.add(pJog ); - pKey = new DBool("KBD" , false, 49, 5); bools.add(pKey ); + pXsym = new DBool("X-SYM", false, 48, 0); bools.add(pXsym ); + pYsym = new DBool("Y-SYM", false, 48, 1); bools.add(pYsym ); + pRsym = new DBool("R-SYM", false, 48, 2); bools.add(pRsym ); + pXdup = new DBool("X-DUP", false, 48, 3); bools.add(pXdup ); + pJog = new DBool("JOG" , false, 48, 4); bools.add(pJog ); + pGrey = new DBool("GREY" , false, 48, 5); bools.add(pGrey ); modmin = new xyz(model.xMin, model.yMin, model.zMin); mMax = new xyz(model.xMax, model.yMax, model.zMax); mMax.subtract(modmin); @@ -273,18 +225,18 @@ public class DPat extends SCPattern //println (model.xMin + " " + model.yMin + " " + model.zMin); //println (model.xMax + " " + model.yMax + " " + model.zMax); - DG.Init(); + for (MidiOutputDevice o: RWMidi.getOutputDevices()) { if (o.toString().contains("APC")) { APCOut = o.createOutput(); break;}} } void run(double deltaMs) { - UpdateState(); + if (deltaMs > 100) return; NoiseMove += deltaMs; NoiseMove = NoiseMove % 1e7; StartRun (deltaMs); xyz P = new xyz(), tP = new xyz(), pSave = new xyz(); xyz pTrans = new xyz(pTransX.Val()*200-100, pTransY.Val()*100-50,0); - DG.SetText(); + SetText(); nPoint = 0; if (pJog.b) { @@ -294,20 +246,22 @@ public class DPat extends SCPattern } // precalculate this stuff - float yWv = DG._YWave(), xWv = DG._XWave(), sprk = DG._Spark(); - if (yWv > 0) for (int i=0; i 0) { + for (int i=0; i 0) for (int i=0; i 0) { P.y += sprk*randctr(50); P.x += sprk*randctr(50); P.z += sprk*randctr(50); } - if (yWv > 0) P.y += interpWv(p.x-modmin.x, yWaveNz); - if (xWv > 0) P.x += interpWv(p.y-modmin.y, xWaveNz); + if (sprk > 0) {P.y += sprk*randctr(50); P.x += sprk*randctr(50); P.z += sprk*randctr(50); } + if (wvAmp > 0) P.y += interpWv(p.x-modmin.x, yWaveNz); + if (wvAmp > 0) P.x += interpWv(p.y-modmin.y, xWaveNz); if (pJog.b) P.add(xyzJog); @@ -317,12 +271,8 @@ public class DPat extends SCPattern if (pYsym.b) { tP.set(P.x,mMax.y-P.y,P.z); cNew = blendColor(cNew, CalcPoint(tP), ADD); } if (pRsym.b) { tP.set(mMax.x-P.x,mMax.y-P.y,mMax.z-P.z); cNew = blendColor(cNew, CalcPoint(tP), ADD); } if (pXdup.b) { tP.set((P.x+mMax.x*.5)%mMax.x,P.y,P.z); cNew = blendColor(cNew, CalcPoint(tP), ADD); } - - float s = lx.s(cNew); - float b = lx.b(cNew)/100.; - if (DG.bSustain == true) b = max(b, (float) (lx.b(cOld)/100.)); - - colors[p.index] = lx.hsb(lx.h(cNew), s, 100 * b * DG._Level()); + if (pGrey.b) { cNew = lx.hsb(0, 0, lx.b(cNew)); } + colors[p.index] = cNew; } } } @@ -355,8 +305,6 @@ class dStrip { dStrip(Strip _s, int _i, int _row, int _col) { s = _s; row = _row; col = _col; } } //---------------------------------------------------------------------------------------------------------------------------------- -float PointDist(Point p1, Point p2) { return dist(p1.x,p1.y,p1.z,p2.x,p2.y,p2.z); } - class dPixel { dVertex v; int pos; dPixel(dVertex _v, int _pos) { v=_v; pos=_pos; } } class dLattice { private int iTowerStrips=0; @@ -369,15 +317,15 @@ class dLattice { //} void addTurn(dVertex v0, int pos0, dVertex v1, int pos1) { dTurn t = new dTurn(pos0, v1, pos1); if (v0.t0 == null) v0.t0=t; else v0.t1=t; } - float Dist2 (Strip s1, int pos1, Strip s2, int pos2) { return PointDist(s1.points.get(pos1), s2.points.get(pos2)); } - float PD2 (Point p1, float x, float y, float z) { return dist(p1.x,p1.y,p1.z,x,y,z); } - boolean SameSame (Strip s1, Strip s2) { return max(Dist2(s1, 0, s2, 0), Dist2(s1,15, s2,15)) < 5 ; } // same strut, same direction - boolean SameOpp (Strip s1, Strip s2) { return max(Dist2(s1, 0, s2,15), Dist2(s1,15, s2,0 )) < 5 ; } // same strut, opp direction - boolean SameBar (Strip s1, Strip s2) { return SameSame(s1,s2) || SameOpp(s1,s2); } // 2 strips on same strut - void AddJoint (dVertex v1, dVertex v2) { + float dist2 (Strip s1, int pos1, Strip s2, int pos2) { return pointDist(s1.points.get(pos1), s2.points.get(pos2)); } + float pd2 (Point p1, float x, float y, float z) { return dist(p1.x,p1.y,p1.z,x,y,z); } + boolean sameSame (Strip s1, Strip s2) { return max(dist2(s1, 0, s2, 0), dist2(s1,15, s2,15)) < 5 ; } // same strut, same direction + boolean sameOpp (Strip s1, Strip s2) { return max(dist2(s1, 0, s2,15), dist2(s1,15, s2,0 )) < 5 ; } // same strut, opp direction + boolean sameBar (Strip s1, Strip s2) { return sameSame(s1,s2) || sameOpp(s1,s2); } // 2 strips on same strut + void addJoint (dVertex v1, dVertex v2) { // should probably replace parallel but further with the new one - if (v1.c0 != null && SameBar(v2.s.s, v1.c0.s.s)) return; - if (v1.c1 != null && SameBar(v2.s.s, v1.c1.s.s)) return; + if (v1.c0 != null && sameBar(v2.s.s, v1.c0.s.s)) return; + if (v1.c1 != null && sameBar(v2.s.s, v1.c1.s.s)) return; if (v1.c0 == null) v1.c0 = v2; else if (v1.c1 == null) v1.c1 = v2; } @@ -387,10 +335,10 @@ class dLattice { dVertex v = null; int pos=0; float d = 500; for (int j=0; j 30) continue; for (int k=0; k<=15; k++) { - nd = PD2(s.s.points.get(k),p.x,p.y,p.z); if (nd < d) { v = s.v0; d=nd; pos=k; } + nd = pd2(s.s.points.get(k),p.x,p.y,p.z); if (nd < d) { v = s.v0; d=nd; pos=k; } } } return random(2) < 1 ? new dPixel(v,pos) : new dPixel(v.opp,15-pos); @@ -416,14 +364,14 @@ class dLattice { for (int j=0; j0) continue; // Are they touching at all? @@ -431,8 +379,8 @@ class dLattice { while (pos1 < 15 || pos2 < 15) { float oldD = d; - if (pos1<15) { float d2 = Dist2(s1.s, pos1+1, s2.s, pos2+0); if (d2 < d) { d=d2; pos1++; } } - if (pos2<15) { float d2 = Dist2(s1.s, pos1+0, s2.s, pos2+1); if (d2 < d) { d=d2; pos2++; } } + if (pos1<15) { float d2 = dist2(s1.s, pos1+1, s2.s, pos2+0); if (d2 < d) { d=d2; pos1++; } } + if (pos2<15) { float d2 = dist2(s1.s, pos1+0, s2.s, pos2+1); if (d2 < d) { d=d2; pos2++; } } if (d > 50 || oldD == d) break ; } -- 2.34.1