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 memoryimport 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(); }