Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

Abschluss & out of memory

22. Dezember 2010

Wie alle wissen, haben wir als Abschlussaufgabe unsere Permutation weiter ausgebaut und versucht so gut es geht zu animieren. Zuerst stellte ich mir die Frage: Wie will ich meine Permutaion animieren? Geht das überhaubt, was ich alles möchte? Die Antwort auf diese Frage kam beängstigend schnell: ALLES ist möglich im Processing. Einiges etwas schwieriger zu programmieren als anderes, aber grundsätzlich möglich. Schön. Also begann ich meine Ideen aufzuschrieben und schon ziemlich schnell habe ich das meiste wieder verworfen. Vielleich wäre es besser mit etwas einfachem zu beginnen. (Und hier möchte ich Joel schon mal danken für seine Hilfe :P) Die "Augen" meiner Zeichen sollten dem Maus-Cursor folgen, 2. einen Zoom-Faktor haben, 3. per Tastendruck umkehrbar und 4. ein neues Zeichen, welches genau die gleichen Funktionen umsetzten kann. Zum Schluss baute ich noch eine Sound-Libary ein und fertig sollte das ganze sein. Doch ich wollte noch mehr. Mehr Tastenkombinationen, mehr Funktionen. Und wie es nicht anders kommen konnte, lief alles schief. Der ganze Code stimmte nicht mehr, alles für die Katz. Also habe ich alles zurückgesetzt und versucht so viel wie möglich zu retten. Nun ist es wieder so wie es ursprünglich war, nur reagiert die Animation nicht so gut auf den Sound wie ich es gärne hätte. Nun gut, ich habe es versucht und das Beste daraus gemacht. Bis morgen.. out of memory
 

import ddf.minim.*;
import ddf.minim.analysis.*;

Minim minim;
AudioPlayer song;
BeatDetect beat;

int         anzahl = 13;
int         rand = 50;
int         fade = 0;
float       xStep;
float       yStep;
float       drehen; 
float       zoom;
boolean     drawflag=false;
boolean     flagKey=false; 
boolean     flagFade=false; 
boolean     flagDirection=false; 

int[]       permutationsIndexList1 = {0, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1, 0, 
                                      1, 2, 3, 4, 5, 6, 5, 6, 5, 4, 3, 2, 1, 
                                      2, 3, 4, 5, 6, 5, 4, 5, 6, 5, 4, 3, 2, 
                                      3, 4, 5, 6, 5, 4, 3, 4, 5, 6, 5, 4, 3, 
                                      4, 5, 6, 5, 4, 3, 2, 3, 4, 5, 6, 5, 4, 
                                      5, 6, 5, 4, 3, 2, 1, 2, 3, 4, 5, 6, 5,
                                      6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 
                                      5, 6, 5, 4, 3, 2, 1, 2, 3, 4, 5, 6, 5, 
                                      4, 5, 6, 5, 4, 3, 2, 3, 4, 5, 6, 5, 4, 
                                      3, 4, 5, 6, 5, 4, 3, 4, 5, 6, 5, 4, 3, 
                                      2, 3, 4, 5, 6, 5, 4, 5, 6, 5, 4, 3, 2,
                                      1, 2, 3, 4, 5, 6, 5, 6, 5, 4, 3, 2, 1,
                                      0, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1, 0,};
                           


void setup()
{
  size(700,700);
  smooth();

  xStep = (width - 2 * rand) / (float)(anzahl-1);
  yStep = (height - 2 * rand) / (float)(anzahl-1);
  //noLoop();
  
  minim = new Minim(this);
  song = minim.loadFile("sound.mp3", 1024);
  song.play();
  beat = new BeatDetect();
}

void draw()
{
  beat.detect(song.mix);
  
  if(beat.isOnset())
  {
    //println("beat!");
    //mach was
  }
  
  background(255);

  int     permutationsIndex = 0;

  pushMatrix();
    translate(rand,rand);
    for(int y=0; y<anzahl;y++)
    {
      pushMatrix();
        for(int x=0; x<anzahl;x++)
        {
          drawPermutationObj1(permutationsIndexList1[permutationsIndex], x, y, fade); 
          drawPermutationObj2(permutationsIndexList1[permutationsIndex], x, y, 255-fade);
          //print(str(permutationsIndexList1[permutationsIndex]) + "\t");

          ++permutationsIndex;

          translate(xStep,0.0f);
        }
        //println();
      popMatrix();
      translate(0.0f,yStep);
    }
  popMatrix();
 
   if(flagFade && flagDirection) 
  {
     fade = fade - 10;
     println(fade);
  
    if(fade = 255)
    {
      flagFade = false; 
    }   
  }
}

void keyPressed()
{ 
  switch(key)
  {
    case 'A' :
    case 'a' : 
      flagKey = true;
      break; 
    
    case 'C' : 
    case 'c' : 
      flagKey = false;
      break; 
    
    case ' ' : 
      flagFade = true; 
      flagDirection = (fade>=255);
      break; 
      
  }    
}  


void drawPermutationObj1(int type, int x, int y, int fade)
{
  pushMatrix();
  drehen = map(mouseX+mouseY, 0, width+height, 0, TWO_PI*2); 
  //zoom = map(mouseX+mouseY, 0, width+height, 0, 1.1); 
  
  PVector PosObject = new PVector(x, y, 0); 
  PVector PosMouse = new PVector(map(mouseX, 0, width, 0, 6), map(mouseY, 0, height, 0, 6)); 
  
  float distance = PosObject.dist(PosMouse);
  float zoom = 1;
  
if(flagKey)
  {  
    // if((key == 'a') || (key == 'A'));
    zoom = map(distance, 0, sqrt(72), 0, 1); 
  }
  else
  {  
    // if((key == 'c') || (key == 'C'));
    zoom = map(distance, 0, sqrt(72), 1, 0); 
  }
 
  
  
  
  pushStyle();
  switch(type)
  {

  case 0:
  
    if(beat.isOnset()) { scale(zoom +2);}  
    rotate(drehen);  
    scale(zoom);
    stroke(0,fade);
    fill(0,fade);
    ellipse(0,0,75,75);
    fill(255,fade); 
    ellipse(0,0,72,72);
    fill(0,fade); 
    ellipse(-3,0,65,65); 
    fill(255,fade); 
    ellipse(-14,0,40,40);
    fill(0,fade); 
    ellipse(-17,0,32,32);
    fill(255,fade); 
    stroke(255,fade);
    ellipse(-11,0,20,20);
    break;

  case 1:

    if(beat.isOnset()) { scale(zoom +2); }  
    rotate(drehen);  
    scale(zoom);
    stroke(0,fade);
    fill(0,fade);
    ellipse(0,0,75,75);
    fill(255,fade);
    ellipse(2,0,69,69);
    fill(0,fade); 
    ellipse(-5,0,58,58); 
    fill(255,fade); 
    ellipse(-11,0,45,45);
    fill(0,fade); 
    ellipse(-13,0,38,38);
    fill(255,fade); 
    stroke(255,fade);
    ellipse(-5,0,26,26);
    break;

  case 2:
 
    rotate(drehen);  
    scale(zoom);
    if(beat.isOnset()) { scale(zoom +2); }  
    stroke(0,fade);
    fill(0,fade);
    ellipse(0,0,75,75);
    fill(255,fade);
    ellipse(4,0,65,65);
    fill(0,fade); 
    ellipse(-5,0,56,56); 
    fill(255,fade); 
    ellipse(-8,0,50,50);
    fill(0,fade); 
    ellipse(-11,0,41,41);
    fill(255,fade); 
    stroke(255,fade);
    ellipse(-4,0,30,30);
    break;

  case 3:
    
    rotate(drehen); 
    scale(zoom);
    if(beat.isOnset()) { scale(zoom +2); }  
    stroke(0);
    fill(0,fade);
    ellipse(0,0,75,75);
    fill(255,fade);
    ellipse(5,0,62,62);
    fill(0,fade); 
    ellipse(-4,0,56,56); 
    fill(255,fade); 
    ellipse(-6,0,55,55);
    fill(0,fade); 
    ellipse(-9,0,46,46);
    fill(255,fade); 
    stroke(255,fade);
    ellipse(-3,0,38,38);
    break;  

  case 4:
       
    rotate(drehen);
    scale(zoom); 
    if(beat.isOnset()) { scale(zoom +2); } 
    stroke(0,fade);
    fill(0,fade);
    ellipse(0,0,75,75);
    fill(255,fade);
    ellipse(5,0,62,62);
    fill(255,fade); 
    stroke(255,fade);
    ellipse(-4,0,57,57);
    fill(0,fade); 
    ellipse(-7,0,52,52);
    fill(255,fade); 
    stroke(255,fade);
    ellipse(-2,0,43,43);
    break;

  case 5:
    
    rotate(drehen); 
    scale(zoom);
    if(beat.isOnset()) { scale(zoom +2); } 
    stroke(0,fade);
    fill(0,fade);
    ellipse(0,0,75,75);
    fill(255,fade);
    ellipse(5,0,62,62);
    fill(255,fade); 
    stroke(255,fade);
    ellipse(-4,0,61,61);
    fill(0,fade); 
    ellipse(-6,0,58,58);
    fill(255,fade); 
    stroke(255,fade);
    ellipse(-1,0,51,51);
    break;

  case 6:
  
    rotate(drehen); 
    scale(zoom);
    if(beat.isOnset()) { scale(zoom +2); } 
    stroke(0,fade);
    fill(0,fade);
    ellipse(0,0,75,75);
    fill(255,fade); 
    stroke(255,fade);
    ellipse(0,0,66,66);
    fill(0,fade); 
    ellipse(-4,0,60,60);
    fill(255,fade); 
    stroke(255,fade);
    ellipse(0,0,58,58);
    break;

  default:
    break;
  }
  popStyle();
  popMatrix();
}


void drawPermutationObj2(int type, int x, int y, int fade)
{
  pushMatrix();
  drehen = map(mouseX+mouseY, 0, width+height, 0, TWO_PI*2); 
  //zoom = map(mouseX+mouseY, 0, width+height, 0, 1.1); 
  
  PVector PosObject = new PVector(x, y, 0); 
  PVector PosMouse = new PVector(map(mouseX, 0, width, 0, 6), map(mouseY, 0, height, 0, 6)); 
  
  float distance = PosObject.dist(PosMouse);
  float zoom = 1;
  
if(flagKey)
  {  
    // if((key == 'a') || (key == 'A'));
    zoom = map(distance, 0, sqrt(72), 0, 1.2); 
  }
  else
  {  
    // if((key == 'c') || (key == 'C'));
    zoom = map(distance, 0, sqrt(72), 1, 0); 
  }
 
  
  
  
  pushStyle();
  switch(type)
  {
 
 case 0:
    if(beat.isOnset()) { scale(zoom +2); }  
    rotate(drehen);  
    scale(zoom);
    stroke(0,fade);
    fill(0,fade);
    ellipse(0,0,75,75);
    fill(255,fade); 
    ellipse(0,0,72,72);
    fill(0,fade); 
    ellipse(0,0,65,65); 
    fill(255,fade); 
    //ellipse(0,0,40,40);
    //fill(0); 
    //ellipse(0,0,32,32);
    //fill(255); 
    //stroke(255);
    //ellipse(0,0,20,20);
    break;

  case 1:
    if(beat.isOnset()) { scale(zoom +2); }  
    rotate(drehen);  
    scale(zoom);
    stroke(0,fade);
    fill(0,fade);
    ellipse(0,0,75,75);
    fill(255,fade); 
    ellipse(0,0,72,72);
    fill(0,fade); 
    ellipse(0,0,65,65); 
    fill(255,fade); 
    ellipse(0,0,5,5);
    //fill(0); 
    //ellipse(0,0,32,32);
    //fill(255); 
    //stroke(255);
    //ellipse(0,0,20,20);
    break;

  case 2:
    if(beat.isOnset()) { scale(zoom +2); }  
    rotate(drehen);  
    scale(zoom);
    stroke(0,fade);
    fill(0,fade);
    ellipse(0,0,75,75);
    fill(255,fade); 
    ellipse(0,0,72,72);
    fill(0,fade); 
    ellipse(0,0,65,65); 
    fill(255,fade); 
    ellipse(0,0,20,20);
    fill(0,fade); 
    ellipse(0,0,10,10);
    //fill(255); 
    //stroke(255);
    //ellipse(0,0,20,20);
    break;

  case 3:
    if(beat.isOnset()) { scale(zoom +2); }  
    rotate(drehen);  
    scale(zoom);
    stroke(0,fade);
    fill(0,fade);
    ellipse(0,0,75,75);
    fill(255,fade); 
    ellipse(0,0,72,72);
    fill(0,fade); 
    ellipse(0,0,65,65); 
    fill(255,fade); 
    ellipse(0,0,35,35);
    fill(0,fade); 
    ellipse(0,0,20,20);
    fill(255,fade); 
    stroke(255,fade);
    ellipse(0,0,5,5);
    break;  

  case 4:
    if(beat.isOnset()) { scale(zoom +2); }  
    rotate(drehen);  
    scale(zoom);
    stroke(0,fade);
    fill(0,fade);
    ellipse(0,0,75,75);
    fill(255,fade); 
    ellipse(0,0,72,72);
    fill(0,fade); 
    ellipse(0,0,65,65); 
    fill(255,fade); 
    ellipse(0,0,45,45);
    fill(0,fade); 
    ellipse(0,0,30,30);
    fill(255,fade); 
    stroke(255,fade);
    ellipse(0,0,15,15);
    break;

  case 5:
    if(beat.isOnset()) { scale(zoom +2); }  
    rotate(drehen);  
    scale(zoom);
    stroke(0,fade);
    fill(0,fade);
    ellipse(0,0,75,75);
    fill(255,fade); 
    ellipse(0,0,72,72);
    fill(0,fade); 
    ellipse(0,0,65,65); 
    fill(255,fade); 
    ellipse(0,0,55,55);
    fill(0,fade); 
    ellipse(0,0,40,40);
    fill(255,fade); 
    stroke(255,fade);
    ellipse(0,0,25,25);
    break;

  case 6:
    if(beat.isOnset()) { scale(zoom +2); }  
    rotate(drehen);  
    scale(zoom);
    stroke(0,fade);
    fill(0,fade);
    ellipse(0,0,75,75);
    fill(255,fade); 
    ellipse(0,0,72,72);
    fill(0,fade); 
    ellipse(0,0,65,65); 
    fill(255,fade); 
    ellipse(0,0,60,60);
    fill(0,fade); 
    ellipse(0,0,50,50);
    fill(255,fade); 
    stroke(255,fade);
    ellipse(0,0,38,38);
    break;   



  default:
    break;
  }
  popStyle();
  popMatrix();
}