Looking Outwards 10

Jae Son
Section C

Looking Outwards 10: Computer Music

For this LO-10, I looked at Laetitia Sonami’s Magnetic Memories. She created this new instrument “Spring Spyre,” with Rebecca Fiebrink’s neural networks. According to the Stanford University’s CCRMA stage brochure, in which she performed, “the audio signals from three pickups attached to springs are fed to the neural networks, which are trained to control the live audio synthesis in MAXMSP.” So, with the performer’s real-time performance, somewhat chaotic set of sound is produced. I admire how a random, real-time physical performance produces sound that sounds chaotic but is within the programmed pattern. I like the intersection of installation, performance art, and computer art come together.

LookingOutwards-10: Sound Art

The project I will be discussing is The Egg by Fedde ten Berge. This work is egg-shaped with textured ridges on the side which are used to to play vibrations and sound. It is a very hands-on type of installation/project, and despite its egg-shape, appears quite alien-like. It is made out of a block of wood. The artist likes to combine ceramic with another object of another material (left in their true natural form), which in this case is wood. I found this project interesting because when I think of sound art, I typically imagine technology and computers that an audience would not be so openly allowed to touch or fidget with. I was interested in how these slight ridges would produce sound, and was fascinated to find out that with wet hands, or a smooth surface like a mallet, The Egg will give off vibrations that translate to acoustic vibrations, which also makes it accessible/welcoming to those who are hard of hearing. Overall, I was most impressed with the shape of The Egg, because it is very obvious that it was likely a tedious process to hollow out a large block of wood, but keep it strong enough to hold its shell-like structure. The creator’s artistic sensibilities are manifested in the final form in many ways. When you look at the creator’s past works, they all have a few things in common. His projects are very touch-reliant, and prompt the user/audience to interact with it physically. Additionally, the artist utilizes how water and wet surfaces can produce an interesting vibration. On top of this, the artist seems to really enjoy working with natural materials, such as wood, and often tries to leave it in its most natural form without changing the medium too much.

http://www.feddetenberge.nl/het-ei

This is what The Egg looks like, with its natural wood material and usage of ceramic ridges.
Here are some of the artist’s previous works that show his focus on natural materials like wood, and how he incorporates hands-on interaction with his sound art.

Project-10: Sonic Story (& Media Sound Files)

For my project, I animated a short story about a frog on a lily pad on a lake. The story is simply about a lonely frog who gets excited to eat a fly that comes alone (because it was hungry), and gets sad when a nearby fish swims away. There is thunder and lightning that turns the sky dark, and the frog wishes the fish had stayed with him. This project was pretty difficult because there were many things to account for, like all of the coordinates, movements, sounds, and captions. I had to refresh my canvas multiple times to make sure everything was playing out the way I wanted it to. I was tempted to import images into my code, but wanted to challenge myself, so I decided to create all the images and shapes/objects myself.

My 4 sounds consist of the following: a loud thunder that echoes, a rippling/swishing noise of water, a loud croaking of a frog, and a (very irritating) buzzing of a fly. I used the buzzing sound of the fly to make sure the viewer could understand that the shape I had created was some sort of bug/fly. With the frog, I wanted to make sure its croaking was heard after it ate the fly to show some emotion. With the loud thunder, I used it to make the story more dark and scary, followed by a sudden darkening of the sky. With the water noises, I used that to make the night sounds seem louder and make it more clear that the fish had swam away.

sketch
//Annie Kim
//anniekim@andrew.cmu.edu
//SectionB
//anniekim-10-project

/* 
For my program, this is the general story line:
A lonely frog who is on a lilypad in the middle
of the water, is there with a fish. A fly comes near
the frog, and the frog eats it. Luckily, the frog is 
happy because it was getting hungry, however it is not 
so lucky for the fly. Then suddenly, lightning strikes,
and thunder echoes through the sky, and the sky turns dark.
The fish swims away in fear, and the frog is left alone again.
*/

var fly; //audio file names
var frogcroak;
var thunder;
var water;

var bug = {
    x: 450, y: 180,
    width: 45, height: 25
}
var lily = {
    x: 110, y: 320, 
    width: 200, height: 90
}
var lily1 = {
    x: 110, y: 320,
    width: 200, height: 90
}
var tongue_move = {
    x: 240, y: 220
}
var cloud = {
    x: 50, y: 75
}
var crab = {
    x: 400, y: 370,
}
var fish = {
    x: 225, y: 440,
}


function preload() {
    // call loadImage() and loadSound() for all media files here
    fly = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/fly-1.wav")
    frogcroak = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/frogcroak.wav")
    thunder = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/thunder.wav")
    water = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/water.wav")
}


function setup() {
    // you can change the next 2 lines:
    createCanvas(450, 480);
    useSound();
    frameRate(1);
}


function soundSetup() { // setup for audio generation
    // you can replace any of this with your own audio code:
    fly.setVolume(0.25);
    frogcroak.setVolume(0.75);
    thunder.setVolume(0.75);
    water.setVolume(0.8);
}


function draw() {
    //sky color
    background(217, 243, 245);
    //water
    fill(150, 214, 250);
    noStroke();
    rect(0, 250, 450, 230);
    //calling fish object
    fishy();
    //lilypad1 ~stagnant, doesnt move
    strokeWeight(2);
    stroke(100, 175, 0);
    fill(150, 225, 0);
    ellipse(lily1.x, lily1.y, lily1.width, lily1.height);
    fill(150, 214, 250); //making cut into lily pad
    noStroke();
    triangle(lily1.x, lily1.y, lily1.x - 100, lily1.y + 15, lily1.x - 50, lily1.y + 60);
    //calling cloud object
    clouds();
    //calling froggy object
    froggy();
    //fly & tongue movement + sound
    if (frameCount >= 1 && frameCount <= 7) {
        flying();
        fill(0);
        textSize(17);
        strokeWeight(1);
        textFont('HelveticaBold');
        text("The fly accidentally gets too close to the hungry frog.", 10, 100);
        tongue();
        fly.play();
    }
    if (frameCount == 7) {
        fly.stop(); //stops sound once fly disappears
    }
    if (frameCount >= 9 & frameCount <= 13) {
        frogcroak.play();
    }
    if (frameCount == 13) {
        frogcroak.stop();
    }
    if (frameCount == 25) {
        background(0);
        textSize(40);
        fill(255);
        strokeWeight(1);
        textFont('HelveticaBold');
        text("The End", 150, 240);
        water.stop();
        noLoop();
    }
}

function flying() {
    //creating 1st fly wing
    fill(255);
    stroke(0);
    ellipse(bug.x + 10, bug.y - 12, bug.width - 15, bug.height - 10);
    //creating fly body
    fill(0);
    noStroke();
    ellipse(bug.x, bug.y, bug.width, bug.height);
    //creating 2nd fly wing
    fill(255);
    stroke(0);
    ellipse(bug.x + 12, bug.y - 10, bug.width - 15, bug.height - 10);
    //making fly move
    bug.x = bug.x - 65;
    if (bug.x <=  200) {
        bug.x = 200;
    }
}

function froggy() {
    //light green color
    fill(117, 176, 111);
    //legs
    stroke(0);
    strokeWeight(3);
    ellipse(lily.x - 15, lily.y - 43, 35, 55);
    ellipse(lily.x + 65, lily.y - 43, 35, 55);
    //body
    ellipse(lily.x + 25, lily.y - 50, 80, 90);
    //feet
    fill(117, 176, 111);
    //arc(lily1.x - 3, lily1.y - 5, 40, 25, PI, 0);
    arc(lily.x + 4, lily.y - 5, 40, 30, PI, 0, CHORD);
    arc(lily.x + 46, lily.y - 5, 40, 30, PI, 0, CHORD);
    //head
    stroke(0);
    ellipse(lily.x + 25, lily.y - 105, 100, 80);
    //smile
    fill(100, 0, 0);
    arc(lily.x + 25, lily.y - 100, 70, 40, 0, PI, CHORD);
    //ears
    fill(117, 176, 111);
    circle(lily.x, lily.y - 140, 38);
    circle(lily.x + 47, lily.y - 140, 38);
    noStroke();
    circle(lily.x + 4, lily.y - 132, 36);
    circle(lily.x + 43, lily.y - 132, 36);
    //white part of eyes
    stroke(0);
    strokeWeight(2);
    fill(255);
    circle(lily.x + 47, lily.y - 140, 23);
    circle(lily.x, lily.y - 140, 23);
    //black of eyes
    fill(0);
    circle(lily.x + 47, lily.y - 140, 10);
    circle(lily.x, lily.y - 140, 10);
    //this will make the frog jump
    if (frameCount >= 9 & frameCount <= 10) {
        lily.y -= 150;
        textSize(20);
        strokeWeight(1);
        textFont('HelveticaBold');
        fill(0);
        text("The frog jumps with joy because it was hungry.", 15, 380);
    }
    if (frameCount >= 10 & frameCount <= 11) {
        lily.y += 150;
    }
}

function tongue() {
    strokeWeight(17);
    stroke(100, 0, 0);
    line(tongue_move.x, tongue_move.y - 10, 135, 230);
    //moving tongue to catch fly
    tongue_move.y -= 5;
    tongue_move.x -= 5;
    if (tongue_move.y <= 200) {
        tongue_move.y = 200;
    }
    if (tongue_move.x <= 220) {
        tongue_move.x = 220;
    }
}

function clouds() {
    if (frameCount >= 14 & frameCount <= 18) {
        darksky();
        lightning();
        textSize(28);
        fill(0);
        textFont('HelveticaBold');
        text("The sky shakes with thunder.", 100, 390);
        thunder.play();
    }
    if (frameCount >= 19 & frameCount <= 25) {
        darksky();
        thunder.stop();
        water.play();
    }
    fill(255);
    //left cloud
    circle(cloud.x, cloud.y, 100);
    circle(cloud.x - 45, cloud.y, 70);
    circle(cloud.x + 55, cloud.y, 55);
    //right cloud
    circle(cloud.x + 300, cloud.y - 30, 100);
    circle(cloud.x + 255, cloud.y - 30, 70);
    circle(cloud.x + 355, cloud.y - 30, 55);
    //clouds moving
    cloud.x += 5;
}

function lightning() {
    fill(255, 255, 0);
    quad(cloud.x, cloud.y, cloud.x - 20, cloud.y + 70, cloud.x + 10, cloud.y + 90, cloud.x + 30, cloud.y + 20);
    quad(cloud.x + 2, cloud.y + 75, cloud.x - 10, cloud.y + 145, cloud.x + 12, cloud.y + 165, cloud.x + 32, cloud.y + 95);
}

function darksky() {
    fill(160);
    rect(0, 0, 450, 250);
}

function fishy() {
    //body and tail
    fill(237, 104, 74);
    strokeWeight(1);
    stroke(255, 0, 0);
    ellipse(fish.x - 38, fish.y - 5, 17, 30);
    ellipse(fish.x - 38, fish.y + 5, 17, 30);
    ellipse(fish.x - 8, fish.y - 26, 30, 25);
    ellipse(fish.x, fish.y, 70, 60);
    //face of fish
    fill(255, 122, 92);
    ellipse(fish.x + 10, fish.y, 53, 54);
    //eyes of fish
    fill(255);
    stroke(0);
    circle(fish.x + 9, fish.y - 5, 18, 18);
    circle(fish.x + 27, fish.y - 5, 18, 18);
    fill(0);
    circle(fish.x + 9, fish.y - 5, 6, 6);
    circle(fish.x + 27, fish.y - 5, 6, 6);
    //bottom fin
    fill(237, 104, 74);
    stroke(155, 0, 0);
    triangle(fish.x, fish.y + 22, fish.x - 20, fish.y + 23, fish.x - 4, fish.y + 38);
    //smile
    noFill();
    arc(fish.x + 18, fish.y + 10, 20, 10, 0, PI);
    //fish is moving off of the canvas
    if (frameCount >= 19 & frameCount <= 25) {
        fish.x += 55;
        fish.y -= 36;
        fill(0);
        textFont('HelveticaBold');
        textSize(20);
        text("The frog wishes the fish would stay.", 50, 450);
        text("The frog doesn't want to be alone in the storm.", 50, 400);
    }
}

















This is the image of a frog that I used as reference when drawing the shape on p5js.

Project 10: Sonic Story

nighttimeDownload
var my=270;
var mdy=1;
var windowOpen=true;
var star;
var monster;
var windowSound;
var clock;
var fr=0;

function preload(){
    clock=loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/clockticksound.wav");
    star=loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/star.wav");
    windowSound=loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/window.wav");
    monster=loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/growl-1.wav");
}

function setup() {
    createCanvas(480, 480);
    useSound();
    frameRate(1);
}

function soundSetup() {
    clock.setVolume(0.5);
    star.setVolume(0.2);
    windowSound.setVolume(0.5);
    monster.setVolume(1);
}

function draw() {
    background(38, 39, 59);
    drawStatic();
    //monster
    fill(0);
    if (fr>7 & fr<=17){
        monster.play();
        ellipse(260, my, 80, 60);
        rect(220, my, 80, 300-my);
        fill(255, 0, 0);
        triangle(235, my-13, 255, my-10, 245, my-5);
        triangle(285, my-13, 265, my-10, 275, my-5);
        //claws
        for (var i=0; i<3; i++){
            fill(0);
            quad(175+(i*10), 300, 180+(i*10), 295, 185+(i*10), 300, 180+(i*10), 330);
          }
        if (fr>8 & fr<=12){
            my-=5;
        }
        if (fr>12 & fr<=16){
            my+=5;
        }
    }

    //clock
    clock.play();
    push();
    translate(355, 40);
    scale(0.22);
    drawClock();
    pop();

    //star
    push();
    if (fr<5){
        star.play();
    }
    switch(fr){
        case 0: translate(290, 100); scale(0.05); break;
        case 1: translate(280, 105); scale(0.2); break;
        case 2: translate(260, 110); scale (0.3); break;
        case 3: translate(240, 115); scale(0.2); break
        case 4: translate(220, 120); scale(0.05); break;
        case 5: translate(200, 125); scale(0); break;
        default: scale(0); break;
    }

    noStroke();
    fill(255);
    drawStar();
    pop();

    //windowPane
    drawWindow();
    if (fr>6 & fr<=16){
        windowOpen=false;
    }
    if (fr==7){
        windowSound.play();
    }
    if (fr>16){
        windowOpen=true;
    }
    if (fr==17){
        windowSound.play
    }

    fr++;
    if (fr>=22){
        fr=0;
    }
}

function drawClock(){
  //from https://p5js.org/examples/input-clock.html
  var cx;
  var cy;
  var secR;
  var minR;
  var hrR;
  var cD;

  var radius=width/2;
  secR=radius*0.71;
  minR=radius*0.6;
  hrR=radius*0.5;
  cD=radius*1.7

  cx=width/2;
  cy=height/2;

  noStroke();
  fill(15);
  ellipse(cx, cy, cD+25, cD+25);
  fill(200);
  ellipse(cx, cy, cD, cD);

  var s=map(second(), 0, 60, 0, TWO_PI)-HALF_PI;
  var m=map(minute()+norm(second(), 0, 60), 0, 60, 0, TWO_PI)-HALF_PI;
  var h=map(hour()+norm(minute(), 0, 60), 0, 24, 0, TWO_PI*2)-HALF_PI;

  stroke(0);
  strokeWeight(1);
  line(cx, cy, cx+cos(s)*secR, cy+sin(s)*secR);
  strokeWeight(2);
  line(cx, cy, cx+cos(m)*minR, cy+sin(m)*minR);
  strokeWeight(4);
  line(cx, cy, cx+cos(h)*hrR, cy+sin(h)*hrR);

  strokeWeight(2);
  beginShape(POINTS);
  for(var i=0; i<360; i+=6){
      var angle=radians(i);
      var x=cx+cos(angle)*secR;
      var y=cy+sin(angle)*secR;
      vertex(x, y);
  }
  endShape();
}

function drawStatic(){
  //window
  noStroke();
  fill(64, 65, 90);
  square(25, 25, 300);
  fill(12, 13, 42);
  square(50, 50, 250);
  //bed frame and mattress
  fill(55, 34, 26);
  strokeWeight(3);
  stroke(32, 17, 11);
  rect(240, 375, 240, 105);
  rect(240, 350, 25, 130);
  noStroke();
  fill(192, 157, 167);
  quad(270, 400, 480, 400, 480, 480, 300, 480);
  fill(120, 82, 93);
  triangle(270, 480, 270, 400, 300, 480);
  //moon
  fill(248, 216, 8);
  ellipse(100, 100, 60, 60);
}

function drawStar(){
    //same code as star example from arrays lecture
    var starX=[50, 61, 83, 69, 71, 50, 29, 31, 17, 39];
    var starY=[18, 37, 43, 60, 82, 73, 82, 60, 43, 37];
    var nPoints=starX.length;
    beginShape();
    for (var i=0; i<nPoints; i++){
        vertex(starX[i], starY[i]);
    }
    endShape(CLOSE);

}

function drawWindow(){
    stroke(64, 65, 90);
    strokeWeight(10);
    noFill();
    if (windowOpen==true){
        line(175, 30, 175, 320);
        line(30, 175, 320, 175);
    }
    if (windowOpen==false){
        line(175, 30, 175, 320);
        line(30, 175, 170, 175);
        line(210, 80, 320, 40);
        line(210, 80, 210, 360);
        line(210, 360, 320, 320);
        line(210, 220, 320, 180);

    }

}

For this project I wanted to have a scene where someone goes to bed and wakes up in the middle of the night to see a monster for the spooky vibes. I struggled a bit trying to figure out all of the objects I was going to animate so I added a shooting star in the beginning.

I got the clock from the p5.js reference site and I used the same code for the star that we had in our Arrays lecture previously in the semester.

Looking Outwards 10: Computer Music

I choose to look into Michel Waisvisz and his work “Hyper Instruments.” Waisvisz was a Dutch composer and performer and invented many experimental musical instruments. He worked at STEIM in Amsterdam from 1981 until 2008. I admire Waisvisz because of his innovation and the way he blends technology and music theory together to make new instruments. I wouldn’t be able to think of half of the things he does. He uses a lot of oscillators to get his sounds and has also taken sensor data and converted it into MIDI way back in 1984, the first to do so. Waisvisz was always trying to challenge people’s definition of music by looking to new electronic instruments, and you have definitely see that in this piece.

Project-10 Sonic Story

sonic story
// Rishi Karthikeyan 
//rkarthik@andrew.cmu.edu
//Section B 

//HW 10 Sonic Story  

let elf; 
    var elfX = 350; var elfY = 225;
let santa; 
    var santaX = 115; var santaY = 225;
let santaWorkshop;
let santaAndReindeer; 
    var santaAndReindeerX = 160; var santaAndReindeerY = 250;
let santaOnChimney;
let kid; 
    var kidX = 100; var kidY = 275;
let tree;

let elfVoice;
let sleighBells;
let santaVoice;
let kidVoice;

var count = 0;
var centerX = 250;
var centerY = 200;
var dx = 30;
var dy = 5;

function preload() {
    //load images
    elf = loadImage('https://i.imgur.com/pu8ed6l.png');
    santa = loadImage('https://i.imgur.com/5rgNTe1.png');
    santaWorkshop =loadImage('https://i.imgur.com/bmjFtUd.png');
    santaAndReindeer = loadImage('https://i.imgur.com/t86lPuw.png');
    santaOnChimney = loadImage('https://i.imgur.com/NoL1xBz.png');
    kid = loadImage('https://i.imgur.com/F06Ekzc.png');
    tree = loadImage('https://i.imgur.com/qOOQlZt.png'); 

    //load sounds
    elfVoice = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/ElfVoice.wav");
    sleighBells = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/SleighBells.wav");
    santaVoice = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/SantaVoice.wav");
    kidVoice = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/KidVoice.wav");
}


function setup() {
    createCanvas(500, 400);
    //createDiv("p5.dom.js library is loaded.");
    useSound();
    imageMode(CENTER);
    frameRate(1);
}

function soundSetup() { 
    elfVoice.setVolume(0.5);
    sleighBells.setVolume(0.5);
    santaVoice.setVolume(0.5);
    kidVoice.setVolume(0.5);
}

function draw() {
    background(200);  

    count++;

    switch (count) {
        case 1: elfVoice.play(); break;
        case 6: sleighBells.play(); break;
        case 11: santaVoice.play(); break;
        case 16: kidVoice.play(); break;
    }
    
    if (count >= 0 & count < 5) { 
        workshop();
        dy = 10;
        elfY -= dy;
        if ( elfY <= 215) {
            elfY +=20;
        }
    }
    if (count >= 5 & count < 10) { 
        reindeer(); 
        dy = 20;
        santaAndReindeerX += dx;
        santaAndReindeerY -= dy; 
    }
    if (count >= 10 & count < 15) { 
        chimney(); 
        centerY += dy;
    }
    if (count >= 15 & count < 20) {
        home(); 
        kidY -= 5;
        if ( kidY <= 270) {
            kidY +=10;
        }
    }
    if (count >=20) {
        end(); 
    } 
    
}

function workshop() {
    nightSky();
    //snow 
    fill(255);
    rect(0, 215, width, 200);
    image(santaWorkshop, centerX+80, centerY-30, 300, 100);
    image(elf, elfX, elfY, 130, 130);
    image(santa, santaX, santaY, 206, 200);
}

function reindeer() {
    nightSky();
    //moon
    noStroke();
    fill(208);
    circle(centerX, centerY-30, 200);

    //mountains 
    fill(20, 28, 38);
    beginShape();
    vertex(0, height);
    vertex(0, 270);
    vertex(105, 225);
    vertex(205, 300);
    vertex(290, 250);
    vertex(350, 280);
    vertex(450, 205);
    vertex(width, 225);
    vertex(width, height);
    endShape(CLOSE);

    image(santaAndReindeer, santaAndReindeerX, santaAndReindeerY, 270, 225);
}

function chimney() {
    nightSky();
    //roof
    image(santaOnChimney, centerX, centerY, 230, 230);
    noStroke();
    fill(195, 70, 55);
    rect(0, 315, width, 85); 
}

function home() {
    nightSky();
    
    //wall
    noStroke();
    fill(224, 193, 173);
    rect(0, 0, width, 50);
    rect(0, 0, 50, height);
    rect(250, 0, 250, height);
    rect(0, 150, width, 200);

    //floor
    fill(225, 221, 207);
    rect(0, 300, width, 100);

    //window 
    strokeWeight(5);
    stroke(255);
    noFill();
    rect(50, 50, 100, 100);
    rect(150, 50, 100, 100);
    strokeWeight(2);
    line(50, 100, 250, 100);
    line(100, 50, 100, 150);
    line(200, 50, 200, 150);

    image(kid, kidX, kidY, 150, 125);
    image(tree, 340, 220, 300, 300);
}

function end() {
    nightSky();
    noStroke();
    fill(255);
    textSize(50);
    text('The End', 185, 250);
}

function nightSky() {
    //night sky
    background(6, 20, 34);
    //stars 
    stroke(255);
    for (var i = 0; i < 1000; i++) {
        point(random(0,width), random(-0, height));
    }
}

Four Sounds (1) elf singing (2) sleigh bells (3) Santa talking (4) kid celebrating

I wanted to make something Christmas related. This story shows Santa delivering presents. This project was a lot of fun to create and helped me better understand how to code with images and sound.

LO – 10 Dubler Microphone

I am so excited that we are discussing sound synthesis in this class, since in my free time I produce music (for fun). Recently, I have been fascinated by sound synthesis and how computers can collaborate with a musician to make new sounds possible. In brainstorming what to write about for this LO, I thought of Andrew Huang, a Canadian YouTuber and music producer who is particularly well-known for taking samples of everything and making unexpectedly delightful compositions with these samples. His YouTube channel provides a wealth of entertaining information about production techniques and cool new gear he discovers, so it was hard for me to select a single thing to discuss in this blog. That being said, his most recent video about the Dubler microphone from Vochlea absolutely fascinated me.

This microphone ‘instantly’ turns audio input into MIDI information. The coolest thing about this is that you train the software to recognize the different sounds you sing into it, so you can beatbox into the mic and hear live playback of a full drum set. This is absolutely INSANE because this can transform the way a musician performs and records music. For example, a beatboxer could change the sound of their instrument (their mouth) in live performance by using this mic to control an 80s style drum kit or Skrillex style drum kit with a click of a button. Or you could record a virtual guitar solo with your voice if you don’t like playing a keyboard. I absolutely love how this invention uses technology to change the way people can manipulate sound in a way that has seemed like a fantasy until only recently. I think this relies heavily on the software’s ability to differentiate between different syllables and vowels. With recent development in audio controlled experiences like Alexa and Siri, it makes sense to me that technology is more capable than ever to precisely distinguish and interpret audio information.

Some honorable mentions for this blog post that showcase other musicians using electronics to challenge traditional music practices (some of my favorite videos of all time):

  • Electronic Music for ORCHESTRA – Composer David Bruce interprets electronic composition for an orchestra, challenging the way sound for orchestra is typically conceptualized and performed. BEAUTIFUL!!!

Alien Abduction

This story began as an idea to create a city environment using ambient noise. Then I thought about making some kind of event occur to break that ambience, which ended up being an alien abduction. From there I developed the idea to create some kind of resolution, which became the superhero who flies off after the UFO. My sound effects were the city noise, ufo slowing down, ufo beam, ufo flying, singe scream, crowd scream, single shout, crowd cheer, and an outro theme.

Alien Abduction
var city;      
var scream;
var ufoSlow;
var ufoBeam;
var ufoFly;
var crowdscream;
var yell;
var cheer;

function preload (){
    city = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/busycity.wav");       //city noise
    scream = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/screams.mp3")       //abductee scream
    crowdscream = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/crowdscream.wav");       //crowd screaming
    ufoSlow = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/ufoslow.wav");       //ufo slowing down
    ufoFly = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/ufowave.wav");       //ufo flying away
    ufoBeam = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/ufowave.wav");       //ufo capture beam noise
    yell = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/hey.wav");        //superhero yell
    cheer = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/cheer.wav");       //crowd cheering noise
    outro = loadSound("https://courses.ideate.cmu.edu/15-104/f2020/wp-content/uploads/2020/11/outro.wav");       //outro music
}

function soundSetup(){

    city.setVolume(0.3);        //setting the volume for each noise
    scream.setVolume(1);
    ufoslow.setVolume(0.5);
    ufoBeam.setVolume(0.7);
    ufoFly.setVolume(2);
    crowdscream.setVolume(.3);
    yell.setVolume(1.5);
    cheer.setVolume(1);
    outro.setVolume(1);
}


var x = [];       //x position of given person
var y = [];       //y position of given person
var dx = [];        //speed of given person
var cx = [];        //x position of given car
var cy = [];        //y position of given car
var cdx = [];       //speed of given car
var skin = [];        //skin color of given person       
var shirt= [];        //shirt color
var pants = [];       //pants color
var carW = [];        //width of car
var carH = [];        //height of car
var h = [];           //height of person
var w = [];           //width of person
var ufoY = 0;         //y position of ufo
var ufoX = 0;         //x position of ufo
var aY = 300;         //abductee y position
var sX = 0;           //superhero x position
var sY = 170;          //superhero y position


function setup() {
    createCanvas(400, 300);
   
    for (var i = 0; i < 20; i++) {
        x[i] = random(25, width-25);
        y[i] = height-25
        dx[i] = random(-3, 3);
        shirt[i] = color(random(0,255), random(0,255),random(0,255))
        skin[i] = color(random(200,250),random(100,150),random(20,100))
        pants[i] = color(random(0,255), random(0,255),random(0,255))
        h[i] = random(15,20);
        w[i] = random(5,8);
        frameRate(10);
    }
     for (var c = 0; c < 5; c++) {
        cx[c] = random(25, width-25);
        cy[c] = height-15
        carW[c] = random(20,40);
        carH[c] = random(15,20);
        cdx[c] = random(-5, 5);
    }
}

function draw() {

  if(frameCount<100){
    city.play();    //play city sound until UFO comes
    }
  
  background(43,226,232);       //light blue

  push();
      rectMode(CORNER);
      fill(169,169,169,150);    //gray
          rect(width/2,height-height/4,100,height/4);       //buildings
          rect(width/6,height-height/4.5,75,height/4.5);
          rect(width/6-25,height-height/7,25,height/5);
  pop();

    for (var c = 0; c < 5; c++) {
        car(cx[c], cy[c],carW[c],carH[c],cdx[c],shirt[c]);        //call car function
            cx[c] += cdx[c];        //move car horizontally
                if (cx[c] > width-25 || cx[c] < 25){        //turn around if hits edge
                    cdx[c] = -cdx[c];
        }
    }

    for (var i = 0; i < 20; i++) {
        person(x[i], y[i], dx[i], skin[i],shirt[i],pants[i],h[i],w[i]);       //call person function
            x[i] += dx[i];
                if(frameCount>100){
                    x[i] += 2*dx[i];       //speed up in panic when UFO comes
    }
        if (x[i] > width-25 || x[i] < 25) {       //turn around if hit edge
            dx[i] = -dx[i];
        }
    }
   
  push();
      rectMode(CORNER);
      fill(169,169,169);    //gray
          rect(0,height/2,50,height/2);       //back buildings
          rect(width-75,height-height/3,75,height/3);
  pop();


   if(frameCount>50){
    push();
         translate(ufoX,ufoY);        //translate ufo shape
                 UFO(width/2,-300);     //call ufo function to draw 
         
    pop();

    ufoSlow.play();         //play ufo slow noise      
   }
    if(frameCount>100){
        city.stop();        //stop city noise
        scream.play();        //start scream   
        ufoBeam.play();       //start beam noise
                   
   }
   if(frameCount>100 & frameCount<115){
       fill(21,249,36,150)        //light green
            triangle(width/2,height/2,width/2-50,height,width/2+50,height)        //ufo beam
                abductee(width/2,aY);       //call function to draw person
         aY-=11;        //move abductee upwards
           
    }
   
   ufoY+=4;        //move ufo down

   if(frameCount>85){
       ufoY-=4;        //stop ufo
       ufoSlow.stop();        //stop ufo sound

    }

   if(frameCount>115){
       ufoY-=3;       //move ufo up and right
       ufoX+=10;
       ufoBeam.stop();       //stop beam noise
       scream.stop();       //stopscream noise
       ufoFly.play();       //play ufo sound
       crowdscream.play();        //play crowd scream noise
    }

   if(frameCount>135){
       ufoFly.stop();       //stop ufo sound
    }

   if(frameCount>150){
       push();
           rotate(radians(50));       //turn diagonally
               superhero(sX,sY);        //call superhero function to draw
       pop();

           sX += 15        //move superhero diagonally(adjusted for rotation)
           sY -=20
    }

   if(frameCount>152){
       crowdscream.stop()
    }

   if(frameCount>152 & frameCount<154){    //as superhero flies he yells
       yell.play();
    }

   if(frameCount>160){        //as superhero flies by, people cheer
       cheer.play();       //play cheering
    }

   if(frameCount>200){
       outro.play();       //play song
       cheer.stop();       //stop cheering

       push();
           rectMode(CORNER);
           fill(255,0,0);       //red
               rect(0,0,400,300);        //red background
           textSize(50);
       fill(0);        //black
           text("THE END",100,150);

    }
   if(frameCount>500){
       outro.stop();       //end song    
    }       

}

function person(x,y,dx,skin,shirt,pants,h,w) {
 
    fill(skin);       
        ellipse(x,y-5,5, 5);        //head
    rectMode(CENTER);
    fill(shirt);
        rect(x,y+10,w,h);       //body
    fill(pants);
        rect(x,y+25,w,h);       //legs
   
}

function abductee(x,y){

    fill(219,150,30);       //beige
        ellipse(x,y-5,5,5);       //head
    rectMode(CENTER);
    fill(0,255,0);        //green
        rect(x,y+10,5,15);        //shirt
    fill(0,0,255);        //blue
        rect(x,y+25,5,15);        //pants
}


function car(cx,cy,carW,carH,cdx,shirt){
    fill(shirt);        //same as shirt, so just to save a variable
        rect(cx,cy,carW,carH);        //body of car
    noStroke();
    
     if (cdx < 0) {         //if car turns around  
        rect(cx-17,cy+4,10,10);        //front of car on left
    } else {
        rect(cx+17,cy+4,10,10);        //front of car on right
    }

    fill(0);       //black
        ellipse(cx-10,cy+10,10,10);       //wheels
        ellipse(cx+10,cy+10,10,10);
    
}


function UFO(x,y){

    push();
        translate(x,y);
        scale(2);
        fill(152,152,152);  //gray
            ellipse(0,50,40,15);    //ufo body
            quad (-5,52,-15,60,-14,61,-4,53)    //left landing leg
            rect (-2,52,1.5,10)     //middle landing leg
            quad (1,52,11,61,12,60,4,53)    //right landing leg
        fill(175,238,170,200);  //opaque green-blue
            ellipse(0,45,25,15);    //window dome
        fill(255,0,0);      //red
            circle(-12,52,3);   //left light
            circle(12,52,3);    //right light
        fill(255,255,0);    //yellow
            circle(0,54.5,3);   //middle light

    pop();
}

function superhero(x,y){
    fill(255,0,0);        //red
        quad(x+5,y+2,x-5,y+2,x-15,y+30,x+15,y+30);        //cape
    fill(219,150,30);       //beige
        ellipse(x,y-5,10,10);       //head
    rectMode(CENTER);
    fill(0,0,255);        //blue
        rect(x,y+10,10,20);       //body
    fill(0,0,255)
        rect(x,y+25,10,20);       //legs
        quad(x+2,y+5,x+8,y-10,x+10,y-8,x+5,y+6);        //right arm
        quad(x-2,y+2,x-8,y+17,x-10,y+15,x-5,y+4);       //leftarm
    fill(255,0,0);        //red
        rect(x,y+35,10,5);        //boots
}

Looking Outwards 10 – Aphex Twin

https://www.bing.com/videos/search?q=aphex+twin+4&docid=608012986934038317&mid=85290F2AD34FFDF7115B85290F2AD34FFDF7115B&view=detail&FORM=VRAASM&ru=%2Fvideos%2Fsearch%3Fq%3Daphex%2Btwin%2B4%26qpvt%3Daphex%2Btwin%2B4%26FORM%3DVDRE

Aphex Twin – “4”

Eamonn Burke

This is one of my favorite electronic songs, because it seems to blur the line between repetition and randomness in rhythm.
The beat is entrancing to me, but the changes in frequency in speed also keep your attention as you listen, as well as the pauses
and extra sound effects.

There seems to be an oscillation in the background that ranges from a very high frequency to a middle range one. One top of this,
there are notes playing at a high but varying speed, which appear to slightly oscillate in amplitude themselves. The last layer is
the beat, which repeats at a high tempo, and at certain parts of the song it speeds up greatly, creating a sort of “stutter” effect.

As I said before, I think that Aphex Twin’s creative sensibilities come in using these tools to create a high energy and spontaneous
track that commands your attention and sounds different every time you hear it, because of the unpredictability of the changes in the
melodies and rhythm.

Looking Outwards – 10: Computational Music

Holly Herndon is an electronic musician who has developed the first mainstream album, called Proto, with the help of artificial intelligence. What sets her apart is that she developed a machine learning AI named Spawn to copy her own voice, and be able to sing and harmonize with her. In regards to the learning curve of the AI, Herndon states that the beginning was uninteresting – when teaching the machine, the AI extracts rules from a training canon and follows them exactly, and is unable to go outside that canon. Herndon used different programs to teach Spawn. First, she used TensorFlow, which is a visual learning program that turned soundbytes into visual spectrograms that Spawn could ‘read’. The second program Herndon used is called SampleRNN, which is used for voice recognition, and she applied it to Spawn as a way for it to predict what would naturally come next in a flow of music. The last program used was a voice model-method which involved recording herself and her partner speaking arbitrary phrases for hours of audio that translates into hundreds of megabytes of data. At the end of the process, Spawn could independently sing unique melodies that Herndon herself is not capable of replicating. I think this usage of computation for a creative practice such as this is unprecedented, as Spawn can write music that compliments Herndon’s own style, while still being something never conceived before by a human. The AI technology is not surpassing the humans in this case, but working alongside it to create something new.