ALBERTE STEFFEN DOHN
PROJECT
YEAR
WORK
PROCESSING
2024
DYNAMIC VISUAL

SCHOOL ASSIGNMENT
Processing which was used for this project is a free graphics library and integrated development environment designed for electronic arts, new media art and visual design. It visually teaches non-programmers 'computer programming basic'. Using Java language, it offers simplified classes and mathematical functions, with a user-friendly interface for compilation and execution.
BRIEF
Use Processing to create a dynamic graphical composition that, in expression, style and movements supports a music track of your choice. The music is input, and the moving graphics are output. You can use geometric shapes, colors, photos, drawings, text or other design elements. The expression can be abstract and artistic, explicitly illustrative, typographic, documentary or something completely different.
SOLUTION
I have for this project chosen to base my visual design of my culture night poster and how its build up by geometric shapes 'rectangles and arcs', creating a dynamic composition using tracking of a background image. To create a dynamic visual, i have chosen to use music frequences as a variant in how the background image changes, what colors it uses from the colorpalette and controling the size of the left top arc, therefore creating an intriguing and moving visual. The movements of the arcs in my piece is also controlled by a sine wave, giving the piece a more dynamic expression, i have chosen to create a key that can control the sine wave to also give the user control over the piece.

STILLS

PROCESS
TESTING
/* * This code creates a dynamic geometric tile pattern using rectangles and arcs, all movement in the code is controlled by the music, * and can therefore create different outcomes depending on the music used. * It is furthermore controlled by a changing background image, therefore the image is another variable that can change the outsome of the artwork * (the image can be changed, u can add more images to change the outcome). * The code is created with two layers where we sample the brightness on the background image to change the color from the light colorpalette to the dark colorpalette of the shapes on the front layer * 's' - saves the artwork as a PDF * 'c' - stops the sine wave * 'v' - starts the sine wave */ // the minim library imported (used to control the music) import ddf.minim.*; import ddf.minim.analysis.*; import processing.pdf.*; // the library for recording PDF-files imported float tileSize = 80; // tilesize declared and initialized PImage backgroundImage; // image declared color sample; // samlpe declared int bSample; // bSample declared boolean record = false; // variable that decides if an artwork is getting recorded or not boolean stopSinus = false; boolean startSinus = false; // colorpalette int fl = 116; // lenght of colorpaletteLight array int fd = 29; // lenght of colorpaletteDark array // sine wave float factorX; float factorY; float k = 1; // costant declared and initialized float a = 0; // amplitude declared and initialized // arrays PShape [] s = new PShape [4]; // PShape array declared PImage [] imgArray = new PImage [5]; // PImage array declared (change the number 4 according to the ammount of images u initialize in the setup color [] colorpaletteLight = new color [fl]; // colorpaletteLight array declared color [] colorpaletteDark = new color [fd]; // colorpaletteDark array declared Minim myMinim; // music library declared AudioPlayer music; //stores a sound file FFT fft; //make an FFT object for analysing the sound void setup() { myMinim = new Minim(this); myMinim.debugOn(); music = myMinim.loadFile("PANDORA.mp3"); //initializing the music file music.loop(); //music plays in a loop fft = new FFT(music.bufferSize(), music.sampleRate()); //new FFT object with settings from the input fft.logAverages(22, 3); //these settings result in 30 logarithmic averages (the way we perceive sound) size(640, 880); // canvas size initialized frameRate(15); // 4 arcs initialized s[0] = createShape(ARC, tileSize/2, tileSize/2, tileSize, tileSize, PI, 3*PI/2); s[1] = createShape(ARC, 0, tileSize/2, tileSize, tileSize, 3*PI/2, TWO_PI); s[2] = createShape(ARC, -tileSize/2, 0, tileSize, tileSize, PI/2, PI); s[3] = createShape(ARC, 0, 0, tileSize, tileSize, 0, PI/2); // images initialized (change accoding to the number of images u want the artwork to change according to) imgArray[0] = loadImage("0.png"); imgArray[1] = loadImage("1.png"); imgArray[2] = loadImage("2.png"); imgArray[3] = loadImage("3.png"); imgArray[4] = loadImage("4.png"); // colorpaletteDark initialized colorpaletteDark[0] = color(#1D2656); colorpaletteDark[1] = color(#303866); colorpaletteDark[2] = color(#1E2A5C); colorpaletteDark[3] = color(#0e245c); colorpaletteDark[4] = color(#1F1A50); colorpaletteDark[5] = color(#1d1e4d); colorpaletteDark[6] = color(#0f2b59); colorpaletteDark[7] = color(#1D2656); colorpaletteDark[8] = color(#1E2A5C); colorpaletteDark[9] = color(#142660); colorpaletteDark[10] = color(#1F1A50); colorpaletteDark[11] = color(#151d53); colorpaletteDark[12] = color(#2A317E); colorpaletteDark[13] = color(#1b2a51); colorpaletteDark[14] = color(#13274B); colorpaletteDark[15] = color(#272c66); colorpaletteDark[16] = color(#131a4b); colorpaletteDark[17] = color(#283271); colorpaletteDark[18] = color(#1F1A50); colorpaletteDark[19] = color(#1F1A50); colorpaletteDark[20] = color(#1F1A50); colorpaletteDark[21] = color(#1F1A50); colorpaletteDark[22] = color(#1F1A50); colorpaletteDark[23] = color(#1F1A50); colorpaletteDark[24] = color(#1F1A50); colorpaletteDark[25] = color(#1F1A50); colorpaletteDark[26] = color(#1F1A50); colorpaletteDark[27] = color(#1F1A50); colorpaletteDark[28] = color(#1F1A50); } void draw() { // colorpaletteLight initialized colorpaletteLight[0] = color(#A3DBE0); colorpaletteLight[1] = color(#6ABD45); colorpaletteLight[2] = color(#FAD1DE); colorpaletteLight[3] = color(#AC78B4); colorpaletteLight[4] = color(#FFF48D); colorpaletteLight[5] = color(#A1C1E6); colorpaletteLight[6] = color(#53BE93); colorpaletteLight[7] = color(#DDAD34); colorpaletteLight[8] = color(#EF9EB8); colorpaletteLight[9] = color(#D186AE); colorpaletteLight[10] = color(#F7D79E); colorpaletteLight[11] = color(#FDEE20); colorpaletteLight[12] = color(#FAA542); colorpaletteLight[13] = color(#F69890); colorpaletteLight[14] = color(#BCABCC); colorpaletteLight[15] = color(#DE476C); colorpaletteLight[16] = color(#F07736); colorpaletteLight[17] = color(#A3DBE0); colorpaletteLight[18] = color(#75C272); colorpaletteLight[19] = color(#FFF48D); colorpaletteLight[20] = color(#F47820); colorpaletteLight[21] = color(#FAA719); colorpaletteLight[22] = color(#F3927F); colorpaletteLight[23] = color(#F69890); colorpaletteLight[24] = color(#A1C1E6); colorpaletteLight[25] = color(#C1366B); colorpaletteLight[26] = color(#6ABD45); colorpaletteLight[27] = color(#EF9EB8); colorpaletteLight[28] = color(#D186AE); colorpaletteLight[29] = color(#D44A4A); colorpaletteLight[30] = color(#EA644B); colorpaletteLight[31] = color(#DE476C); colorpaletteLight[32] = color(#0C9995); colorpaletteLight[33] = color(#34BA9B); colorpaletteLight[34] = color(#017382); colorpaletteLight[35] = color(#c9da2b); colorpaletteLight[36] = color(#F7D79E); colorpaletteLight[37] = color(#FFF48D); colorpaletteLight[38] = color(#EF9EB8); colorpaletteLight[39] = color(#F8B580); colorpaletteLight[40] = color(#D186AE); colorpaletteLight[41] = color(#BCABCC); colorpaletteLight[42] = color(#F9C672); colorpaletteLight[43] = color(#FECA34); colorpaletteLight[44] = color(#FFF48D); colorpaletteLight[45] = color(#DAE13B); colorpaletteLight[46] = color(#F69953); colorpaletteLight[47] = color(#FAD1DE); colorpaletteLight[48] = color(#D186AE); colorpaletteLight[49] = color(#EB5D81); colorpaletteLight[50] = color(#FFC82C); colorpaletteLight[51] = color(#75C272); colorpaletteLight[52] = color(#F8B580); colorpaletteLight[53] = color(#BCABCC); colorpaletteLight[54] = color(#A3DBE0); colorpaletteLight[55] = color(#A1C1E6); colorpaletteLight[56] = color(#F8E365); colorpaletteLight[57] = color(#FECA76); colorpaletteLight[58] = color(#EFE267); colorpaletteLight[59] = color(#FAA719); colorpaletteLight[60] = color(#F69890); colorpaletteLight[61] = color(#F8B580); colorpaletteLight[62] = color(#E96346); colorpaletteLight[63] = color(#EF9EB8); colorpaletteLight[64] = color(#A1C1E6); colorpaletteLight[65] = color(#C9DA2B); colorpaletteLight[66] = color(#A3DBE0); colorpaletteLight[67] = color(#53BE93); colorpaletteLight[68] = color(#FFF48D); colorpaletteLight[69] = color(#E03493); colorpaletteLight[70] = color(#BCABCC); colorpaletteLight[71] = color(#D186AE); colorpaletteLight[72] = color(#75C272); colorpaletteLight[73] = color(#B55771); colorpaletteLight[74] = color(#EB7A6B); colorpaletteLight[75] = color(#FFF48D); colorpaletteLight[76] = color(#FAD1DE); colorpaletteLight[77] = color(#75C272); colorpaletteLight[78] = color(#EF9EB8); colorpaletteLight[79] = color(#F29136); colorpaletteLight[80] = color(#FFF48D); colorpaletteLight[81] = color(#C2B130); colorpaletteLight[82] = color(#C3CC71); colorpaletteLight[83] = color(#F4DD35); colorpaletteLight[84] = color(#FBB040); colorpaletteLight[85] = color(#F7D79E); colorpaletteLight[86] = color(#FAD1DE); colorpaletteLight[87] = color(#EB7A6B); colorpaletteLight[88] = color(#F69953); colorpaletteLight[89] = color(#D186AE); colorpaletteLight[90] = color(#DB5226); colorpaletteLight[91] = color(#C9DA2B); colorpaletteLight[92] = color(#53BE93); colorpaletteLight[93] = color(#A3DBE0); colorpaletteLight[94] = color(#FEE248); colorpaletteLight[95] = color(#EFE267); colorpaletteLight[96] = color(#F69890); colorpaletteLight[97] = color(#DF9F46); colorpaletteLight[98] = color(#AC78B4); colorpaletteLight[99] = color(#3D899B); colorpaletteLight[100] = color(#75C272); colorpaletteLight[101] = color(#DAC646); colorpaletteLight[102] = color(#1D763B); colorpaletteLight[103] = color(#F69953); colorpaletteLight[104] = color(#BCABCC); colorpaletteLight[105] = color(#FAD1DE); colorpaletteLight[106] = color(#BE509E); colorpaletteLight[107] = color(#A44D9D); colorpaletteLight[108] = color(#CE4F8E); colorpaletteLight[109] = color(#6ABD45); colorpaletteLight[110] = color(#FFF48D); colorpaletteLight[111] = color(#F7D79E); colorpaletteLight[112] = color(#FDEE20); colorpaletteLight[113] = color(#FAD12E); colorpaletteLight[114] = color(#C9DA2B); colorpaletteLight[115] = color(#DAE13B); if (record) { // if the variable "record" is true, a PDF will be recorded beginRecord(PDF, "output/artwork_####.pdf"); //the PDF will be saved as artwork_####, the "####" gives a new number every time it saves } noStroke(); // declares no stroke on the artwork smooth(); // makes sure that it draws all geometry with smooth (anti-aliased) edges fft.forward(music.mix); //for every draw(), sample and analyse the sound // used to contol the image float highhat2 = constrain(fft.getAvg(22)/(fft.specSize()-1), 0, 1); // (16-22-23)get an average in the highhat2 area, normalize value between 0 and 1 float r = floor(constrain(map(highhat2*100, 0, 1, 0, 4), 0, 4)); // remap sound value to your chosen graphic (image) backgroundImage = imgArray[int(r)]; // initializing background image, controlled by the sound println(r); // used to contol scale float highhat = constrain(fft.getAvg(22)/(fft.specSize()-1), 0, 1); // used for changing the colors float highhat22 = constrain(fft.getAvg(5)/(fft.specSize()-1), 0, 1); //get an average in the highhat2 area, normalize value between 0 and 1 -- erklære - initialisere int m = int(map(highhat22, 0, 1, 0, fd)); // remap sound value to my colorpalette int l = int(map(highhat22, 0, 1, 0, fl)); // remap sound value to my colorpalette // the sine wave a += 0.1; // amplitude k = 5; // constant 5 or 10 // ser på om min key c eller v er aktiv - stopper og starter min sinusbølge if (stopSinus) { factorX = 0; factorY = 0; } else { factorX = sin(a)*k; // makes a sine curve, changes the arcs movement factorY = sin(a)*k; // makes a sine curve, changes the arcs movement } if (startSinus) { factorX = sin(a)*k; // makes a sine curve, changes the arcs movement factorY = sin(a)*k; // makes a sine curve, changes the arcs movement stopSinus = false; startSinus = false; } // By using the modulo operator, we are able to distinguish between even and odd rows in the pattern, which allows us to create alternating tile arrangements to achieve the desired geometric effect for (int j = 0; j < 22; j++) { // this loop controls the rows of the pattern. It iterates from 0 to 21 (total of 22 iterations), which defines the number of rows in the pattern if (j % 2 == 0) { // this operator checks if j is even or odd. If j is even, it executes code for even rows, and if j is odd, it executes code for odd rows for (int i = 0; i = 10 && bSample = 10 && bSample = 10 && bSample = 10 && bSample < 255) { m = int(map(highhat22, 0, 1, 0, fd)); fill(color(colorpaletteDark[m])); shape(s[1], factorX, factorY); } } pop(); } } else if (j % 2 == 1) { for (int i = 0; i = 10 && bSample = 10 && bSample = 10 && bSample = 10 && bSample
CODE

SOFTWARE
ILLUSTRATOR
PROCESSING
YOU MAY ALSO LIKE