/* Sonic Youth - Do You Believe In Rapture? * * Sonic Youth is often descirbed as a "noise" band. * Whether or not the label is entirely accurate, Sonic * Youth's music does takes advantage of free-form noise * to build and release tension over the course of their * songs. * * My visualization of "Do You Believe In Rapture?" is * somewhat literal. Time progresses horizontally from left * to right, the top half of the stage representing the first * half of the song, the bottom being the second. * * The song is driven by a few distinct chords play on guitar * represented by the jagged vertical lines. The background * switches from black to white to signify a new, more stark * chord progression. * * The line of circles represent the constant pounding of the * bass drum throughout the song. The lines extending from the * bottom of each row represnt cymbals gradually gaining volume. * * The song's climax is preceded by a verse that becomes more * and more obscured by dissonance and noise, as represented by * static. It briefly switches to the "white" chord progression * before releasing a line of very melodic very staccato guitar * notes. The song fades out the same way it came in. * * The visualization attempts to illustrate the way Sonic Youth * buries rewarding hooks and melodies within plenty of * dissonance and repetition. * */ size(400,400); background(0); smooth(); rectMode(CORNERS); float songLength = 3+11/60.0; // 3:11 float leftBound; float rightBound; int lowerBound = height/2; // Divide stage stroke(20); line(0, height/2, width, height/2); // Verse 1 - 0:00 - 0:50 leftBound = (0.0/60.0)/(songLength/2)*width; rightBound = (50.0/60.0)/(songLength/2)*width; stroke(255); for (float i=leftBound; i < rightBound; i+=6) { // Guitar strums line (i, lowerBound-140, i, lowerBound-100); line (i+3, lowerBound-130, i+3, lowerBound-90); ellipse(i, lowerBound-50, 3, 3); // Cymbals increase in volume from silence line (i, lowerBound, i, lowerBound-i/10); } // Verse 2 - 0:50 - 0:57 leftBound = (50.0/60.0)/(songLength/2)*width; rightBound = (57.0/60.0)/(songLength/2)*width; noStroke(); fill(255); rect(leftBound, 0, rightBound, lowerBound); // Guitar raises stroke(0); fill(0); for (float i=leftBound; i <= rightBound; i+=6) { line (i, lowerBound-160, i, lowerBound-120); line (i+3, lowerBound-150, i+3, lowerBound-110); // Kick drum ellipse(i, lowerBound-50, 3, 3); } // Verse 3 - 0:57 - width (overlaps) // Some ambiguous guitar noises and scratches begin to cloud the melody leftBound = (57.0/60.0)/(songLength/2)*width; rightBound = width; // Cutoff before stretches into second half stroke(255); fill(255); for (float i=leftBound; i < rightBound; i+=6) { // Guitar strums line (i, lowerBound-140, i, lowerBound-100); line (i+3, lowerBound-130, i+3, lowerBound-90); ellipse(i, lowerBound-50, 3, 3); // Cymbals increase in volume from silence line (i, lowerBound, i, lowerBound-(i-leftBound)/7); } // Noise float j = 0; for (float i=leftBound; i < rightBound; i+=1) { j = (i - leftBound)/2; for (int k = 0; k < j; k++) { float yPos = random(0, height/2); point(i, yPos); } } // Verse 3 - Moving onto bottom half of stage lowerBound = height; leftBound = 0; rightBound = ((1+41.0/60.0)-(songLength/2))/(songLength/2)*width; for (float i=leftBound; i < rightBound; i+=6) { // Guitar strums line (i, lowerBound-140, i, lowerBound-100); line (i+3, lowerBound-130, i+3, lowerBound-90); ellipse(i, lowerBound-50, 3, 3); } // Noise for (float i=leftBound; i < rightBound; i+=1) { float o = (i - leftBound)/2 + j; for (int k = 0; k < o; k++) { float yPos = random(height/2, lowerBound); point(i, yPos); } } // Verse 4 - 1:41 - 1:50 leftBound = ((1+41.0/60.0)-(songLength/2))/(songLength/2)*width; rightBound = ((1+50.0/60.0)-(songLength/2))/(songLength/2)*width; noStroke(); fill(255); rect(leftBound, height/2, rightBound, lowerBound); // Guitar raises stroke(0); fill(0); for (float i=leftBound; i <= rightBound; i+=6) { line (i, lowerBound-160, i, lowerBound-120); line (i+3, lowerBound-150, i+3, lowerBound-110); // Kick drum ellipse(i, lowerBound-50, 3, 3); } // Verse 5 - 1:50 - 2:08 // Melodic leftBound = ((1+50.0/60.0)-(songLength/2))/(songLength/2)*width; rightBound = ((2+8.0/60.0)-(songLength/2))/(songLength/2)*width; for (float i=leftBound; i <= rightBound; i+=6) { stroke(255); line (i, lowerBound-140, i, lowerBound-100); line (i+3, lowerBound-140, i+3, lowerBound-100); // Guitar melody noStroke(); fill(255, 50); for (float g=0; g<6; g+=0.5) { float diameter = random(2,6); float yPos = random(height/2, lowerBound); ellipse(i+g, yPos, diameter, diameter); } // Kick drum fill(255); if ((i-leftBound)%12 == 0) { ellipse(i, lowerBound-50, 3, 3); } } // Verse 6 - 2:08 - 2:17 leftBound = ((2+8.0/60.0)-(songLength/2))/(songLength/2)*width; rightBound = ((2+17.0/60.0)-(songLength/2))/(songLength/2)*width; noStroke(); fill(255); rect(leftBound, height/2, rightBound, lowerBound); // Guitar raises stroke(0); fill(0); for (float i=leftBound; i <= rightBound; i+=6) { line (i, lowerBound-160, i, lowerBound-120); line (i+3, lowerBound-150, i+3, lowerBound-110); // Kick drum ellipse(i, lowerBound-50, 3, 3); } // Verse 7 - 2:17 - 2:51 leftBound = ((2+17.0/60.0)-(songLength/2))/(songLength/2)*width; rightBound = ((2+51.0/60.0)-(songLength/2))/(songLength/2)*width; stroke(255); fill(255); for (float i=leftBound; i < rightBound; i+=6) { // Guitar strums line (i, lowerBound-140, i, lowerBound-100); line (i+3, lowerBound-130, i+3, lowerBound-90); ellipse(i, lowerBound-50, 3, 3); // Cymbals increase in volume from silence line (i, lowerBound, i, lowerBound-(i-leftBound)/7); } // Last Verse - 2:51 - 3:00 leftBound = ((2+51.0/60.0)-(songLength/2))/(songLength/2)*width; rightBound = ((3.0)-(songLength/2))/(songLength/2)*width; print(leftBound + " " + rightBound); noStroke(); fill(255); rect(leftBound, height/2, rightBound, lowerBound); // Guitar raises stroke(0); fill(0); for (float i=leftBound; i <= rightBound; i+=6) { line (i, lowerBound-160, i, lowerBound-120); line (i+3, lowerBound-150, i+3, lowerBound-110); // Kick drum ellipse(i, lowerBound-50, 3, 3); }