Looking back at our final performance composition, we’re not really sure how this thing came together! Like the previous projects, we would bring in different sounds to our work sessions and visuals that we previously played around with and try to make something out of them. Perhaps one of the defining moments of this performance was the buildup exercise as this is when the creepy, scratchy visuals came together with the glowing orb from our drum circle project.
So, this was the starting point for this composition, the chalkboard-like scratchy visual which inspired us to do something kind of creepy and menacing, while involving some kind of grace and elegance.
Sounds
Eadin and Sarah were mainly working together on sound. Although the visuals kind of dictated the creepy vibe, we wanted to maintain our interest in using ambient sounds like what you hear at the beginning of the piece. Later on, instead of staying scratchy and heavy, the piece involves some piano melodies (some of which we spent ages trying to fit by looking through different scales and picking specific notes). However, a lot of the sounds came through by experimentation and live editing. Finally, we made sure that our piece also included a more positive, colorful sound in an attempt to make it sound more complete and wholesome.
Code Snippets
ambient = stack[ slow 4 $ n (scale "<minor>" $ "{<g> <fs gs>}" - 5) # s "supercomparator" #lpf 500 #shape 0.3 #gain 1.1, slow 4 $ n (scale "<minor>" $ "{<g> <fs gs>}" - 5) # s "superfm" #lpf 500 #shape 0.3 #gain 1.1, slow 4 $ ccv "0 10" # ccn 0 # s "midi" ] //piano buildup first_piano_ever = every 2 (fast 2) $ fast 2 $ stack [n (scale "<minor>" $ "<f d <e a> cs>") # s "superpiano" #lpf 600 #shape 0.3 #room 0.3 #sustain 3, ccv "<20 32 <23 44 22 25 50> 60>" # ccn 2 # s "midi"] first_piano_ever_v1 = every 2 (fast 2) $ fast 2 $ stack [n (scale "<minor>" $ "<f d <e a e*2 a> cs>(2,9)") # s "superpiano" #lpf 600 #shape 0.3 #room 0.3 #sustain 3, fast 2 $ ccv "<20 32 <23 44 22 25 50> 60>(2,9)" # ccn 2 # s "midi"] first_piano_ever_v2 = every 2 (fast 2) $ fast 2 $ stack [n (scale "<minor>" $ "<f d <e a e*2 a> cs>(5,9)") # s "superpiano" #lpf 900 #shape 0.2 #room 0.2 #sustain 1 #gain 1.1, fast 5 $ ccv "<20 32 <23 44 25*2 50> 60>(5,9)" # ccn 2 # s "midi"] first_piano_ever_v3 = fast 4 $ stack [n (scale "<minor>" $ "<f d e cs>(4,8)") # s "superpiano" #lpf 900 #shape 0.2 #room 0.2 #sustain 1 #gain 1.1 , fast 4 $ ccv "<20 32 23 60>(4,8)" # ccn 2 # s "midi"] first_piano_ever_v4 = fast 8 $ stack [n (scale "<minor>" $ "<f d e cs>(2,8)") # s "superpiano" #lpf 900 #shape 0.2 #room 0.2 #sustain 1 #gain 1.3, fast 4 $ ccv "<20 32 23 60>(2,8)" # ccn 2 # s "midi"] //drum buildup d2 $ qtrigger 2 $ seqP [ (0, 4, fast 4 $ ccv "0" # ccn 0 # s "midi"), (0, 16, fast 1 $ "~ bd [bd ~] bd*2"), (2, 16, fast 1 $ "[bd, hh, bd, sd]"), (4, 16, fast 1 $ "[~bd, hh*8, bd(3,8), sd]"), (0, 8, fast 1 $ ccv "0 0 0 10" # ccn 4 # s "midi"), (8, 16, fast 2 $ "[~bd, hh*8, bd(6,8,3), sd]"), (8, 16, fast 2 $ ccv "0 0 0 10" # ccn 4 # s "midi"), (9, 16, fast 2 $ "[~bd*4]"), (10, 16, fast 2 $ "[~bd*4(5,8)]"), (12, 16, fast 2 $ "[~bd*4(5,8), hh*8, bd, sd]"), (10.5, 11, fast 2 $ n "as a f a" # s "superpiano" # lpf 900 #shape 0.3), (10.5, 11, fast 2 $ ccv "90 70 50 70" # ccn 2 # s "midi"), (12, 12.5, fast 2 $ n "as a f a" # s "superpiano" # lpf 900 #shape 0.3), (12, 12.5, fast 2 $ ccv "90 70 50 70" # ccn 2 # s "midi"), (13, 15, fast 1 $ n "as a f a as a bs a" # s "superpiano" # lpf 900 #shape 0.7 # gain 1.2), (15, 16, fast 2 $ n "as a f a as a bs a" # s "superpiano" # lpf 900 #shape 0.9 # gain 1.4), (13, 15, fast 1 $ n "190 170 150 270 190 720 120 270" # ccn 2 # s "midi"), (15, 16, fast 2 $ n "190 170 150 270 190 270 120 270" # ccn 2 # s "midi"), (12, 16, slow 2 $ s "made:3(50,8)" # gain (slow 2 (range 0 1.25 saw)) # speed (slow 2 (range 0.8 3.5 saw)) # cut 1 # lpf 900 #rel 0.5) ] #shape 0.3 #room 0.3 #size 0.6 #gain 1.4
Visuals
The visuals were Omar’s work, with the main inspiration for the audio composition being his creation. Most of what you see in the performance were derivates of this first visual layered with different elements, including the glowing orb that we used in our drum circle and looked at in class. After Omar put together the visuals, we would meet together and test out audiovisual interactions that we felt could be effective for the audience || Eadin and Sarah had my back for a good week and a half while I was working on capstone so just a big props to them for making awesome music that inspired and motivated me to make fitting visuals. Visuals were inconsistent because of our attempt to exploit glitches (by not hiding p5) in making a very pleasing visual. Some of the visual quality had to be sacrificed for reliability during the performance. Our last visual also didn’t show in the performance because I had toyed a bit with variables before the performance. But I think it was alright regardless, we learned to improvise.
Code Snippets
lightning = () => { return( src(o1).mult(src(s0).add(noteLine(),0.8).add(noteLineThin(),0.8)).blend(o0,0.3).modulate(o1, 0.03) ) //lightning light } flash = () => { return( src(o1).diff(o0).mult(src(s0).add(noteLine(),0.8).add(noteLineThin(),0.8)).modulate(o1,0.03) //lightning ) } flashH = () => { return( src(o1).mult(src(s0).add(noteLine(),0.8).add(noteLineThin(),0.8)).modulate(o1,0.03).diff(o0) //lightning with flash } flashGH = () => { return( src(o1).mult(src(s0).add(noteLine(),0.0).add(noteLineThin(),0.0)).blend(o0,0.3).modulate(o1, 0.03) //lightning with flash HEAVY ) } tissue = () => { p1.colorMode(p1.RGB); p1.noFill(); p1.stroke(255, 0.1); xoff += 0.02; yoff = xoff; for (let i = 0; i < 10; i++) { p1.push(); _x = p1.noise(xoff)*p1.width; _y = p1.noise(2*yoff)*p1.height; _r = p1.random(3); _hyp = p1.sqrt(p1.pow(width/2, 2) + p1.pow(height/2, 2)); _d = p1.map(p1.dist(_x, _y, p1.width/2, p1.height/2), 0, _hyp, 0.05, 1); //only first shape gets bold on drums if(i == 0 && p1.frameCount%4==0) { _s = 50 + 10*ccActual[4] + 50*ccActual[1]; p1.stroke(255, ccActual[4]/4 + 10*_d); } else { _s = 50; p1.strokeWeight(1); p1.stroke(255, 10*_d); } //circle if (_r < 1) p1.rect(_x, _y, _s, _s); //square else if(_r < 2) p1.circle(_x, _y, _s); //triangle else { _angle = p1.random(0, 2*p1.PI); _angle2 = p1.random(0, 2*p1.PI); _angle3 = p1.random(0, 2*p1.PI); p1.triangle(_x+_s*p1.cos(_angle), _y+_s*p1.sin(_angle), _x+_s*p1.cos(_angle2), _y+_s*p1.sin(_angle2), _x+_s*p1.cos(_angle3), _y+_s*p1.sin(_angle3)) } p1.pop(); yoff += 0.05; } }
Explaining some Creative Choices
combining Hydra diff coupled with a blend or modulate to have a lasting flash effect of the light on the canvas when the light pops into a random position. This is better achieved with instantaneous/discrete change of light positions than continuous movement.
modulating slightly with the light orb gives a 3-dimensional quality to the movement of the light, which nicely translates the drum impact.
the piano tiles were recycled from the composition project. The visual looked a little too round and symmetrical so we opted for more asymmetry by making the tiles on both ends of the canvas different sizes. Part of it was also that Sarah liked the smaller tiles and Eadin the bigger ones. So we chose to pick both and it worked well visually.
More Notes on Final Performance / Reflection
In terms of the final performance, we didn’t notice that the tidal code constantly disappeared (aka. the zoom-out thing). What we have learned here is that while performing it’s important to ensure what’s actually going on on the main screen. In addition, while doing it on stage, our pace was a bit slower than practicing, because once you miss the opportunity to trigger something you have to wait for, say, the next 2 or 4 cycles. We think there’s definitely value in improvisation. The point is how we can find a balance between following a strict plan and improvisation and this is something that we continuously experimented with as we practiced for the final performance.
The 8bit Orchestra was an incredible experience, it was so exciting to put together a lot of creative energy and come up with a piece that stuck with us to the point that we were humming it every day leading up to the performance. Moreover, seeing everyone’s work come together, from our two-minute, nervous performances in class to our algorave was an amazing reminder of our progress and the time we all spent together.
Below is a video of our performance:
<3