Sunday, 12 October 2014

Extra rotating camera code

Fixed the camera code a bit so it rotates by itself. (Quicktime refuses to run so I can't record the screen)
 
Download package

    import ddf.minim.analysis.*;
    
    import ddf.minim.*;
    
    float eyeY, eyeX, eyeZ;
    
    float angVertical = 0;
    
    int d = 400;
    
    Minim minim;
    
    AudioPlayer [] players = new AudioPlayer[2];
    
      AudioMetaData meta;
    
    BeatDetect beat;
    
    int
    
      samples = 1024;
    
    float
    
      angleStep  = TWO_PI/samples,
    
      maxRadius = 300.,
    
      scaleF = 125.,
    
      radiusStep;
    
    PVector
    
      shapeCenter,
    
      currentVertex;
    
    PVector[]
    
      lookupTable;
    
    float phasorInc = samples / 53030.0;
    
    float phasorInc2 = samples / 90000.0;
    
    int nReflections = 10;
    
    int nPointsPerFrame = 3600;
    
    int nAngles = 6;
    
    int r = 200;
    
    float rad = 70;
   
    int theta = 0;
    
    Walker w;
    
    Phasor p;
    
    Phasor p2;
    
    float[] angles;
    
    Palette palette;
    
    PVector getVCoordinates(PVector v, float d, float a) {
    
      return new PVector(v.x + d * cos(a), v.y + d * sin(a));
    
    }
    
    float getAngleFromCenter(PVector v) {
    
      return atan2(v.y - height / 2, v.x - width / 2);
    
    }
    
    class Phasor {
    
      float inc;
    
      float phase;
    
      Phasor(float inc) {
    
        this.inc = inc;
    
      }
    
      void update() {
    
        phase += inc;
    
        while (phase >= 1.0) {
    
          phase -= 1.0;
    
        }
    
        while (phase < 0) {
    
          phase += 1.0;
    
        }
    
      }
    
    }
    
    class Walker {
    
      PVector v;
    
    
    
      Walker(float x, float y) {
    
        v = new PVector(x, y);
    
      }
    
    
    
      void update() {
    
        float gauss = p2.phase * random(2);
    
        v = getVCoordinates(v, gauss, angles[int(random(angles.length))]);
    
    
    
        float offset = width / 4;
    
        if (v.x >= width + offset) {
    
          v.x -= width + offset;
    
        }
    
      
    
        if (v.x < -offset) {
    
          v.x += width + offset;
    
        }
    
      
    
        if (v.y >= height + offset) {
    
          v.y -= height + offset;
    
        }
    
      
    
        if (v.y < 0) {
    
          v.y += height + offset;
    
        }
    
    
    
        float a = getAngleFromCenter(v);
    
        float d = dist(v.x, v.y, width / 2, height / 2);
    
        PVector center = new PVector(width / 2, height / 2);
    
        float rAngle = PI / (float) nReflections;
    
        noStroke();
    
        fill(palette.getNorm(p.phase), map(d, 0, width, 64, 12));
    
        gauss = max(0.5, gauss / 2);
    
        for (int i = 0; i < nReflections; i++) {
    
          float thisAngle = a + (TWO_PI / (float) nReflections) * i;
    
          PVector thisV = getVCoordinates(center, d, thisAngle);
    
          ellipse(thisV.x, thisV.y, gauss, gauss);
    
          thisV = getVCoordinates(center, d, PI - thisAngle);
    
          ellipse(thisV.x, thisV.y, gauss, gauss);
    
        }
    
      }
    
    }
    
    class Palette {
    
      ArrayList<Integer> colors;
    
      Palette() {
    
        colors = new ArrayList<Integer>();
    
      }
    
      void add(color c) {
    
        colors.add(c);
    
      }
    
      color getNorm(float p) {
    
        int index = (int) (p * colors.size());
    
        color c1 = colors.get(index);
    
        color c2 = colors.get((index + 1) % colors.size());
    
        return lerpColor(c1, c2, p * colors.size() - index);
    
      }
    
    }
    
    void setup()
    
    {
    
      size(1000, 600, P3D);
    
      eyeX = 0;
    
      eyeY = height/2;
    
      eyeZ = 0;
    
      eyeX = d*(sin(radians(angVertical)));
    
      eyeZ = d*cos(radians(angVertical));
    
    
    
        angles = new float[nAngles];
    
      for (int i = 0; i < angles.length; i++) {
    
        angles[i] = ((float) i / (float) nAngles) * TWO_PI;
    
      }
    
      w = new Walker(width / 2, height / 2);
    
      p = new Phasor(phasorInc);
    
      p2 = new Phasor(phasorInc2);
    
      palette = new Palette();
    
        palette.add(color(11, 17, 13));
    
        palette.add(color(44, 77, 86));
    
        palette.add(color(195, 170, 114));
    
        palette.add(color(220, 118, 18));
    
        palette.add(color(189, 50, 0));
    
      color c = palette.getNorm(0.0);
    
      for (int i = 0; i < height; i++) {
    
        stroke(lerpColor(color(32), color(0), (float) i / (float) height));
    
        line(0, i, width, i);
    
      }
    
    
    
       smooth();
    
        noStroke();
    
        frameRate(60);
    
        background(-1);
    
        noCursor();
    
        shapeCenter  = new PVector(width/2, height/2);
    
        lookupTable= new PVector[samples];
    
        for (int i = 0; i < samples; i++)
    
        {
    
             float angle= i*angleStep + HALF_PI;
    
             lookupTable[i] = new PVector(cos(angle), sin(angle));
    
        }
    
      minim = new Minim(this);
    
      players[0]= minim.loadFile("Warriors.mp3");
    
      players[1]= minim.loadFile("itstime.mp3");
    
      radiusStep = maxRadius/(players[0].length()*200/players[1].length());
    
         meta = players[0].getMetaData();
    
        beat = new BeatDetect();
    
         players[1].loop();
    
      
    
    }
    
void draw()
{
  pushMatrix();
  background(0);
  float t = map(mouseX, 0, width, 0, 1);
  beat.detect(players[1].mix);
  rect(0, 0, width, height);

  if (players[1].isPlaying())
  {
    visualizeWaves(players[1].right.toArray(), 0x50ff0000, maxRadius, scaleF);
    visualizeWaves(players[1].left.toArray(), 0x50000000, maxRadius, scaleF);
    visualizeWaves(players[1].mix.toArray(), 0x77777777, maxRadius -= radiusStep, scaleF);

    translate(width/2, height/2);
    rotate(theta*PI/16);
    theta++;
    if (beat.isOnset()) rad = rad*0.9;
    else rad = 70;
    ellipse(0, 0, 2*rad, 2*rad);
    stroke(-1, 50);
    int bsize = players[1].bufferSize();
    for (int i = 0; i < bsize - 1; i+=5)
    {
      float x = (r)*cos(i*2*PI/bsize);
      float y = (r)*sin(i*2*PI/bsize);
      float x2 = (r + players[1].left.get(i)*100)*cos(i*3*PI/bsize);
      float y2 = (r + players[1].left.get(i)*100)*sin(i*5*PI/bsize);
      line(x, y, x2, y2);
    }
  }
  popMatrix();
}
    
    void visualizeWaves(float [] wavesToVisualize, color fillColor, float radius, float scale_factor)
    
    {
    
         fill(fillColor);
    
         stroke(0x10ffffff);
    
         for (int i = 0; i < wavesToVisualize.length; i++)
    
         {
    
            float  r = radius + wavesToVisualize[i]*scale_factor;
    
        p.update();
    
        p2.update();
    
        w.update();
    
          }
    
    }
    
    void keyPressed() {
    
      switch(key) {
    
        // Move camera
    
      case CODED:
    
        if (keyCode == UP) {
    
          angVertical += 10;
    
        }
    
        if (keyCode == DOWN) {
    
          angVertical -= 10;
    
        }
    
        break;
    
      default:
    
        break;
    
      }
    
      if (angVertical>=360)
    
        angVertical=0;
    
      eyeX = d*(sin(radians(angVertical)));
    
      eyeZ = d*cos(radians(angVertical));
    
      println("With angVertical:  "+angVertical+
    
        " the cam pos is : "+
    
        eyeX+" / "+eyeY+" / "+eyeZ);
    
    }

No comments:

Post a Comment