Jisoo Geum Final Project

 

jgeum-final project

I am uploading a zip file instead of the sketch file since the program contains sound.

My final project is an educational program that teaches the user to learn (hopefully) about the Korean alphabet: Hangul. Hangul is very easy to learn because it does not require people to memorize the meaning of each character. Since Hangul is an alphabet system like English, anyone can read without knowing the meaning itself. I only focused on the Consonant letters of Hangul so the alphabets showing up on the program does not make a full word or a letter.

As I was writing the program, I realized how complicated it is to teach a language even though I initially thought Hangul was relatively simple. Thus, I am planning to expand on this project and hopefully make a program that covers not only consonants but also vowels and maybe some simple words.

(My original plan was to make the user draw on top of the text using turtle graphics, but somehow the code didn’t work. I canceled out the turtle graphics part. )

Jisoo Geum – Final Project Proposal


For my final project, I want to incorporate music’s ability to manipulate emotions and create a program that directs users to the music of their ‘current mood’. Although there are many apps that have similar features, I wanted to make my own version that increases the interaction between music, color, and emotions. Also, I will be adding animations in my program.

*The structure may change depending on how much storage the program can take*

*I will be attempting to link Spotify play button into the pages to avoid storing large music files in my zip. If it doesn’t work, I will follow the description below https://developer.spotify.com/documentation/widgets/guides/adding-a-widget/*

The program will have 7 different directory pages, each containing up to 5 (or more if the program can take more) songs. To minimize the storage size, I will be cutting the length of each song.

The main page will contain two semi-transparent blobs intersecting with each other. Clicking the blue blob (sadness) will direct the user to a new page with three other blob buttons. Each blob buttons are assorted with a different purpose. For example, one of the blobs is a button that directs the user to the final page that plays music with a simple animation that sympathizes with his/her sadness. Pressing the S button will shuffle the music in the array of songs.

Clicking the other blobs on the main page will also do similar things.

*Since the blobs are very specific to certain feelings and lack at the variety, I will try to map the intensity of emotions in gradient colors. However, this is only workable if I can link the songs to Spotify.*

 

Jisoo Geum – Looking Outwards 12

https://moodfuse.com/

Created by Chris Zieba – 2015

Spotify

Created by Daniel Ek – 2006

Moodfuse.com is a website that allows the user to discover music based on his/her current mood. In order to load the music, the user needs to choose a genre and adjust the slide bars according to his/her mood. The website is linked to both Youtube and Spotify so it is able to display music videos as well as the information about each song. I was first very impressed by the Moodfuse because of its simple and effective visualization that allows the user to choose the range of emotion.

Spotify (pretty self-explanatory) is an app that allows people to stream a wide variety of music. I wanted to mention this app mainly because of its browsing feature. Every time the user opens the app, the algorithm in Spotify selects songs and playlists that are most relevant to the user’s listening history. The selection process is a bit different from Moodfuse since the algorithm ‘guesses’ the user’s taste instead of letting the user describe his/her preference. Thus,  Moodfuse is more personalized and relevant to one’s temporary emotion.

 

Jisoo Geum – Project 11

sketch

// Jisoo Geum
// Section B
// jgeum@andrew.cmu.edu 
// Project 11
var tt1;
var startX; 
var startY;
var aa;
var ttlength;

function setup() {
    createCanvas(480, 400);
    background(173, 255, 244);
    tt1 = makeTurtle(startX,startY);
    tt1.setColor(color(255,144,0));
    tt1.setWeight(0.5);
    startX = width/2; // set the starting point to center of the canvas 
    startY = height/2;
    aa = random(20,340) // randomise angle
    ttlength = random(100,400); // randomize the length of the lines
    

  
}


function mousePressed() {

    for( var i=0; i <height/4; i +=2){
        tt1.penDown();
        tt1.forward(ttlength);
        tt1.right(aa);
        tt1.forward(ttlength);
        tt1.penUp();
        tt1.goto(startX,startY+i);
        
    }
}


function turtleLeft(d){this.angle-=d;}function turtleRight(d){this.angle+=d;}
function turtleForward(p){var rad=radians(this.angle);var newx=this.x+cos(rad)*p;
var newy=this.y+sin(rad)*p;this.goto(newx,newy);}function turtleBack(p){
this.forward(-p);}function turtlePenDown(){this.penIsDown=true;}
function turtlePenUp(){this.penIsDown = false;}function turtleGoTo(x,y){
if(this.penIsDown){stroke(this.color);strokeWeight(this.weight);
line(this.x,this.y,x,y);}this.x = x;this.y = y;}function turtleDistTo(x,y){
return sqrt(sq(this.x-x)+sq(this.y-y));}function turtleAngleTo(x,y){
var absAngle=degrees(atan2(y-this.y,x-this.x));
var angle=((absAngle-this.angle)+360)%360.0;return angle;}
function turtleTurnToward(x,y,d){var angle = this.angleTo(x,y);if(angle< 180){
this.angle+=d;}else{this.angle-=d;}}function turtleSetColor(c){this.color=c;}
function turtleSetWeight(w){this.weight=w;}function turtleFace(angle){
this.angle = angle;}function makeTurtle(tx,ty){var turtle={x:tx,y:ty,
angle:0.0,penIsDown:true,color:color(128),weight:1,left:turtleLeft,
right:turtleRight,forward:turtleForward, back:turtleBack,penDown:turtlePenDown,
penUp:turtlePenUp,goto:turtleGoTo, angleto:turtleAngleTo,
turnToward:turtleTurnToward,distanceTo:turtleDistTo, angleTo:turtleAngleTo,
setColor:turtleSetColor, setWeight:turtleSetWeight,face:turtleFace};
return turtle;}

For this project, I wanted to use randomized angles and line lengths to explore different compositions. I also wanted to see shapes created from the repetition and overlaps of thin lines.

Jisoo Geum – Looking Outwards 11

Fedde ten Berge- of Nature and Things ( het Ei (the Egg)) – 2017 

Fedde ten Berge is a Dutch sound artist who studies the sound in different types of material. The installation above is part of a larger project called “Of Nature and Things”, a collection of artificial objects mimicking forms in nature. Through “Of Nature and Things”, the audience is able to investigate different ambient sounds generated from the unique surfaces and shapes that each sculpture has to provide. I particularly liked “The Egg” because of its nature to create a subtle yet powerful sound through indirect contact. The combination of sound and the movement of the person’s hand looked interesting and even magical. From my knowledge, “The Egg” is played by the proximity between the audience and the object using a low latency audio board for embedded applications. I think Berge’s artistic sensibility is best represented from the alien sound contrasted by familiar shapes in nature.

Jisoo Geum – Looking Outwards – 10

Pussykrew is a new media duo formed by contemporary multi-disciplinary artists Tikul and mi$ gogo. The two were born in Poland but met in Dublin and began merging their artistic and technological strengths to create groundbreaking 3D digital imageries. Their works are usually surreal, hyperrealistic, and at times grotesque. Although they both came from the fine arts background, specializing in paintings and drawings, they immediately emerged into the mobile and graphics aspects of the new media. They learned visual programming, physical computing, and many other areas of digital media at Newcastle University, and self-taught the skills they had to know for 3D/CGI animations.

SEVDALIZA – THAT OTHER GIRL (2015)

A music video work commissioned by an Iranian-Dutch singer, Sevdaliza.  

https://www.youtube.com/watch?v=koAtzvSBvfE

Since I am very interested in 3D rendered images and animation, every work made by the duo were very admiring. I appreciate the hyperrealistic and detailed depiction of curves of the human body as well as various textures rendered into the surface. Their overwhelming visualization, use of color, and composition all encaptivated me. Another reason why I was drawn to Pussykrew was that of this interesting quote:

“The internet and digital tools can be seen as a utopian environment that gives you freedom from social constructs such as gender. Technology can be used as a vehicle for the dissolution of sex and gender as well as a means to link the body with machines.” —Pussykrew

I think this quote truly depicts their artistic vision: grotesque yet beautiful and addicting imageries as a reflection of current human relationship with technology.

Jisoo Geum – Project 10 – Landscape

sketch

// Jisoo Geum
// Section B
// jgeum@andrew.cmu.edu 
// Project-10
//global variables
var thethings = [];
var boomSpeed = 0.005;
var boomDetail = 0.05;

function setup() {
    createCanvas(480,250);

    // create an initial collection of thethings
    for (var i = 0; i < 10; i++){
        var rx = random(width);
        thethings[i] = makeThethings(rx);
    }
    frameRate(10);
   
}
 
function draw() {
    //background(70,223,191);
    background(0);
    makeBooms(); 

    //display the things (ellipses)
    updateAndDisplayThethings();
    removeThethingsThatHaveSlippedOutOfView();
    addNewThethingsWithSomeRandomProbability(); 
    //display speaker
    makeSpeaker();

}

function makeBooms(){
    noStroke();
   /* 
    //1st boom
    //fill(51,194,248);
    //fill(0);
    noFill();
    strokeWeight(1);
    //stroke(160,240,19);
    stroke(247,223,90);
    beginShape(); 
    vertex(-10,height);
    for (var x = 0; x < width; x++) {
        var t = (x * boomDetail*3) + (millis() * boomSpeed*20);
        var y = map(noise(t), 0, 1 , 200, height); 
        //4th num ++=more straight, --= more abrubt
        //last num ++=lower, --= higher 
        vertex(x ,y/6); // y++ = lower, y -- = higher  
    }
    vertex(width+10,height);
    endShape();

   //2nd boom
    fill(0);
    //noFill();
    strokeWeight(1.2);
    //stroke(160,240,19);
    stroke(70,223,191);
    beginShape(); 
    vertex(-10,height);
    for (var x = 0; x < width; x++) {
        var t = (x * boomDetail) + (millis() * boomSpeed*20);
        var y = map(noise(t), 0, 1 , 200, height); 
        //4th num ++=more straight, --= more abrubt
        //last num ++=lower, --= higher 
        vertex(x ,y/4); // y++ = lower, y -- = higher  
    }
    vertex(width+10,height+10);
    endShape();
*/
    // 3rd boom
    fill(160,240,19);
    
    //noFill();
    strokeWeight(5);
    //stroke(160,240,19); // green 
    stroke(70,223,191);
    beginShape(); 
    vertex(-10,height);
    for (var x = 0; x < width; x++) {
        var t = (x * boomDetail) + (millis() * boomSpeed*20);
        var y = map(noise(t), 0, 1 , 100 , height); 
        //4th num ++=more straight, --= more abrubt
        //last num ++=lower, --= higher 
        vertex(x ,y/2); // y++ = lower, y -- = higher  
    }
    vertex(width+10,height);
    endShape();

    // 4th boom 
    //fill(70,223,191); turqoise
    fill(0);
    //noFill();
    strokeWeight(3);
    stroke(160,240,19); green
    //stroke(254,112,99); // orange 
    //stroke(255);
    beginShape(); 
    vertex(-10,height);
    for (var x = 0; x < width; x++) {
        var t = (x * boomDetail+10) + (millis() * boomSpeed*20);
        var y = map(noise(t), 0, 1 , 0 , height-90); 
        //4th num ++=more straight, --= more abrubt
        //last num ++=lower, --= higher 
        vertex(x ,y); // y++ = lower, y -- = higher  
    }
    vertex(width+10,height*2);
    endShape();
}


function updateAndDisplayThethings(){
    // Update thething's positions, and display them.
    for (var i = 0; i < thethings.length; i++){
        thethings[i].move();
        thethings[i].display();
    }
}


function removeThethingsThatHaveSlippedOutOfView(){
    var thethingsToKeep = [];
    for (var i = 0; i < thethings.length; i++){
        if (thethings[i].x + thethings[i].breadth > 0) {
            thethingsToKeep.push(thethings[i]);
        }
    }
    thethings = thethingsToKeep; // remember the surviving things
}


function addNewThethingsWithSomeRandomProbability() {
    // With a very tiny probability, add a new thing to the end.
    var newThethingsLikelihood = 0.007; 
    if (random(0,1) < newThethingsLikelihood) {
        thethings.push(makeThethings(width));
    }
}


// update position of thethings every frame
function thethingsMove() {
    this.x += this.speed;
}
    
// draw the thethings
function thethingsDisplay() {
    var floorHeight = 10;
    var thethingsX = random(0,300);
    var size1 = random(5,25);
    var size2 = random(2,20);
    var size3 = random(15,30);
    var bHeight = this.nFloors * floorHeight;  
    var transheight = random(20,height)

// making the things 
    push();
    translate(this.x, height - 50);
    noFill();
    stroke(160,240,19);
    strokeWeight(1.5);
    ellipse(thethingsX, -bHeight/4, size1 , size1);
    stroke(70,223,191);
    ellipse(thethingsX, -bHeight/4, size2 , size2);
    //stroke(80,93,255);
    //ellipse(thethingsX, -bHeight+95, size3 , size3);
    //line(thethingsX, -bHeight+90,thethingsX+20, -bHeight+90,)
    pop();
}


function makeThethings(birthLocationX) {
    var tt = {x: birthLocationX,
                breadth: .8,
                speed: -1,
                nFloors: round(random(10,12)),
                move: thethingsMove,
                display: thethingsDisplay}
    return tt;
}



function makeSpeaker (){

// the ellipses 
       /* strokeWeight(0.5);
        stroke(160,240,19);
        noFill();
        ellipse(width/2, height-50,250,40);
        ellipse(width/2, height-50,270,47);
        ellipse(width/2, height-50,290,55);
        ellipse(width/2, height-50,310,62);
        ellipse(width/2, height-50,330,68);
        ellipse(width/2, height-50,350,73);
        ellipse(width/2, height-50,370,77);
*/


    
    noStroke();
    fill(244,93,255);   // pink pill shape 
    rectMode(CENTER); 
    rect(width/2,height-80,235,60,30);
    fill(80,93,255);    // blue 
    rect(width/2,height-80, 40, 60 ); // blue middle part 
    noFill();
    strokeWeight(6);
    stroke(244,93,255);   // pink 'b'
    ellipse(width/2,height-75,15,15);
    line(232,height-95,232,height-75);
    stroke(80,93,255);  // the O s 
    ellipse(150,height-80,25,25);
    ellipse(190,height-80,25,25);
    ellipse(285,height-80,25,25);
    ellipse(325,height-80,25,25);
    strokeWeight(5);
    line(160,220,180,220);  // -
    line(290,220,310,220); //+
    line(300,210,300,230);  //+
    
}

This project was very fun but also challenging for me since the concept was open-ended.  The terrain reminded me of the waves of sound so I decided to create a ‘landscape of sound’. The result did not come out like my initial idea, but I enjoyed the process of choosing vibrant colors. I didn’t delete some of the codes I previously wrote so that I (or anyone) can try different variations of the landscape in the future.

These are some of the different styles I tried.

 

My initial sketch in Adobe Illustrator.

Jisoo Geum – Looking Outwards 09

 

https://itunes.apple.com/us/app/seaquence/id1106270489?mt=8

Seaquence (app) by  Gabriel Dunne and Ryan Alexander (2017).

Of all the Looking Outwards written by my peers, I really liked Emily Shou’s week 4 – sound art post. I felt like the direction she took in choosing the sound art piece was very interesting since the project, Seaquence, is an iOS app that can be downloaded by everyone. I agree with Emily that the creators did a great job visualizing the forms of living organisms since they tend to look very complicated and unappealing.

I also agree with Emily that the creators made a unique choice in selecting the theme.  Sequence does have a unique vision in turning something unconventional into a digital masterpiece. The part that I admire the most about Sequence is the accessibility and interactivity. Music masking software tends to be very convoluted as if it is only usable by professionals. However, Seaquence flipped the whole idea of ‘music for experts’ and made the activity approachable.

 

Jisoo Geum – 09 – Portrait

sketch

// Jisoo Geum
// Section B
// jgeum@andrew.cmu.edu 
// Project-09
var underlyingImage;

function preload() {
    var myImageURL = "https://i.imgur.com/B1NyNfc.jpg";
    underlyingImage = loadImage(myImageURL);
}

function setup() {
    createCanvas(480, 480);
    background(255);
    underlyingImage.loadPixels();
    frameRate(5000);
}

function draw() {
    var px = random(width);
    var py = random(height);
    var ix = constrain(floor(px), 0, width-1);
    var iy = constrain(floor(py), 0, height-1);
    var theColorAtLocationXY = underlyingImage.get(ix, iy);

    noStroke();
    fill(theColorAtLocationXY);
    textSize(random(5,30));
    textFont('Futura');
    text( "V", px, py);

    var theColorAtTheMouse = underlyingImage.get(mouseX, mouseY);
    stroke(theColorAtTheMouse);
    line(pmouseX, pmouseY, mouseX, mouseY);
}

I figured that the color palette of the image would be more important than the details so I chose a photo that has all my favorite colors – green, orange, and blue. The girl in the picture is me when I was 8. I changed the ellipse shape into ‘V’ letter simply because I am making a V shape with my fingers. I had fun choosing the photos for this project!

Original image.

Jisoo Geum – Looking Outwards 08

 

http://thesystemis.com/

Zach Lieberman is a new media artist, researcher, and a computer programmer. In the past, Liberman has worked and launched a variety of projects such as ‘Opneframeworks’, a c++ library for creative coding. He also worked on the Eyewriter project, an opensource hardware and a software that allows people to draw with their eyes (the project that inspired assignment 08 – A). As an artist, Liberman also works with performance and installation art using buildings and also teaches at Parsons School of Design. An interesting fact about his resume was that he has collaborated with Golan Levin, an artist/programmer whom I personally admire. A common topic that shapes Lieberman’s body of work is the mapping of movement and the human body, as can be seen in the first project he showed in the presentation. Lieberman also applied the mapping software into collaborative works with Nike, Golan Levin, Olympic coordinators, and musicians. Although Lieberman stated during the presentation that he struggled with operating the music video project, I thought the project was very admiring. As a student aspiring to work in the fields of cinematography, it was interesting to watch coding merging into a motion picture. Lieberman also talked about how his open source programs – Openframeworks and Eyewriter – are being used as foundations for new software made by students and programmers. Overall, Lieberman’s presentation was very intriguing since he showed various demonstrations of his projects during instead of showing a documentation of his work. I think this method worked effectively in communicating with the viewers due to the nature of his works.