I was playing around with variations of “notes” from the tidal cycle archive and came across this line that sounded oddly familiar to my phone when it is buzzing intensely at me.

d5 $ slow 4 $ s "notes:2" >| note (scale "major" ("<0>(2,2)") +"f2") # room 2.3 #krush 1.7 # gain (range 1.0 1.4 rand)

Hearing the buzz repeat itself, over and over again, gave me flashbacks to all the times I got notifications when I wasn’t supposed to – such as in my deep nap mode, when in a class trying to focus, when on a digital detox etc. Phone notifications can be inviting at times – I love getting texts from a best friend, family, or a loved one – but it could also be very irritating. I was inspired to create a composition expressing this very specific type of irritation we feel sometimes towards our digital best friend.

I used a mix of notes:1 and notes:2 for the main melodies. The build up of the sound was achieved by speeding up the base drums, snare drums, the bass (auto:5, auto:7), and the three melodies. For the visuals, I tried to find a cartoon character that resembled how I look like when I am sleep deprived. I came across a clip that I found really funny, from this particular scene in Spongebob where Squidward was very upset from the endless incoming calls from Spongebob and Patrick. Squidward had just finished preparing himself to sleep and was ready to go to dream land. The last thing he wanted to hear was the phone buzzing. This scene matched my inspiration perfectly. I wanted to sync the build up of the music to the anger I assume was building within Squidward. The story was the main component of focus within the composition, hence both the code for the visual and sound were structured around the storyline, the comments of which were left on Atom for the viewers to follow during the performance.

I hope you enjoy 😴

 

 

Tidal:

-- START

do
  d2 $ fast 2 $ s "notes:1" >| note (arp "up" (scale "major" ("[2,3,7,6]"+"<2 3 7 3>") + "f4")) # room 0.4 # gain (range 0.7 1.0 rand)
  d1 $ fast 2 $ s "notes:1" >| note (scale "major" ("[0,<5 <4 3>>](<1 2>,4)") + "f3") # room 0.7 # gain 1.5 #krush 1.2
  d3 $ s "bd bd <sd> bd" # room 0.1
  d14 $ fast 2 $ ccv "<127 50 127 50 >" # ccn "1" # s "midi"

-- CALL INCOMING!!!!!
do
  d5 $ slow 4 $ s "notes:2" >| note (scale "major" ("<0>(2,2)") +"f2") # room 2.3 #krush 1.7 # gain (range 1.0 1.4 rand)
  d14 $ slow 2 $ ccv "<127 50 127 50 >" # ccn "1" # s "midi"

  d5 silence

-- Second melody
d4 $ fast 2 $ s "notes:2" >| note (scale "major" ("<6 <2 4 8 4 2>>(1,3)")) # room 1.2 # gain 1.1

hush

-- build up of anger
do
  d7 $ slow 2 $ s "[auto:5, auto:7]" # gain (1.1) # size (0.9) # room (0.8)
  d8 $ s "[~ sd, hh*2 hh*2 hh*2 <hh*6 [hh*2]!3>]" # room 1 # gain (range 0.8 1.0 rand)
  d9 $ s "sd*4" # krush 2 # room 0.4
  d14 $ fast 16 $ ccv "<127 50 127 50 >" # ccn "1" # s "midi"

hush

-- ANGER BUILDING

d10 $ qtrigger 10 $ seqP [
    (0, 1, s "[sd*4]"),
    (1, 2, s "[bd*8, sd*8]"),
    (2, 3, s "[bd*16, sd*16, auto:1*16]"),
    (3, 4, s "[bd*32, sd*32, auto:1*32]"),
    (4, 5, s "sine*8" # up "g ~ e a [g ~] [~c] ~ ~")
]

-- REAL ANGRY
do
  d14 $ whenmod 24 16 (# ccn ("0*128"+"<t(7,16) t t(7,16) t>")) $ ccn "0*128" # ccv (slow 2 (range 0 127 saw)) # s "midi"
  d5 $ slow 2 $ s "notes:2" >| note (scale "major" ("<0>(2,2)") +"f2") # room 1.8 #krush 1.2 # gain 1
  d6 $ s "sine*8" # up "g? ~ e a [g ~] [~c] ~ ~" # room (1) # gain (0.9)
  d7 $ slow 2 $ s "[auto:5, auto:7]" # gain (1) # size (0.9) # room (0.8) # cutoff 5000
  d8 $ s "[~ cp, hh*2 hh*2 hh*2 <hh*6 [hh*2]!3>]" # room 1.1
-- fast

hush

-- OMG

do
  d14 $ fast 16 $ whenmod 24 16 (# ccn ("0*128"+"<t(7,16) t t(7,16) t>")) $ ccn "0*128" # ccv (slow 2 (range 0 127 saw)) # s "midi"
  d5 $ slow 1 $ s "notes:2" >| note (scale "major" ("<0>(2,2)") +"f2") # room 1.8 #krush 1.2 # gain 1
  d6 $ fast 2 $ s "sine*8" # up "g? ~ e a [g ~] [~c] ~ ~" # room (1) # gain (0.7)
  d7 $ slow 1 $ s "[auto:5, auto:7]" # gain (1) # size (0.9) # room (0.8) # cutoff 5000
  d8 $ fast 2 $ s "[~ cp, hh*2 hh*2 hh*2 <hh*6 [hh*2]!3>]" # room 1

do
  d14 $ fast 4 $ ccv "<127 50 127 50 >" # ccn "1" # s "midi"
  d9 silence
  d8 silence
  d7 silence
  d6 silence
  d4 silence
  d3 silence
  d2 silence
  d1 silence

  d5 silence

-- PEACEFUL TIMES

do
  d14 $ fast 1 $ ccv "<127 50 127 50 >" # ccn "1" # s "midi"
  d13 $ fast 1 $ s "notes:2" >| note (scale "major" ("a3 g3 e3 <b3 c3 e3 f3>")) # room 1.2 # gain 1.1

hush

 

Hydra:

// video control
vid = document.createElement('video')
vid.autoplay = true
vid.loop = true
vid.volume = 0


// BE SURE TO CHANGE THE FOLDER NAME
// BE SURE TO PUT A SLASH AFTER THE FOLDER NAME TOO
basePath = "/Users/yejikwon/Desktop/Fall\ 2022/Live\ Coding/class_examples/composition/video/"
videos = [basePath+"1.mp4", basePath+"2.mp4", basePath+"3.mp4", basePath+"4.mp4", basePath+"5.mp4"]

// choose video source from array
// SLEEP TIME
vid.src = videos[0]
// CALL
vid.src = videos[1]
// HELLO?!
vid.src = videos[2]
// HELLO?!!!!
vid.src = videos[3]
// THE END
vid.src = videos[4]


// use video within hydra
s1.init({src: vid})

render


// cc[1] will be zero always during the "A" section
// thus making the scale value not change
src(s1).scale(()=>-1*cc[0]*cc[1]+1).out()
render(o0)
let whichVideo = -1;

update = ()=> {
  // only change the video when the number from tidal changes,
  // otherwise the video wil keep triggering from the beginning and look like it's not playing
  // cc[2] is for changing the video
  if (cc[2]!=whichVideo){
    vid.src = videos[ccActual[2]]
    whichVideo=cc[2];
  }
}

​

 

Visuals:

I really liked the mask code examples and how they interact with basic geometric shapes, like encasing chaos in one small orderly container. So I chose to use triangles with very chaotic (noise, Voronoi, screen recording) fillings. This was to allow for the readability of discrete sounds by affecting the base shapes of containers (triangles!) and complexity by using more fluid cc values to affect noise and other chaotic textures of the shapes.

Edit: After the first day of performances, I changed a lot of my visuals to be more minimalistic and readable in the ways that they interact with the music. I also had to dump many of my previous visuals without looking back, simply because they did not fit the mood of the musical score.

Music:

I think this was the hardest part for me. I never learned to play an instrument or done anything music-related, so I felt very behind in stuff related to TidalCycle. To make up for that I’ve been going to the piano room often and trying to replicate the sounds I made on the keyboard in TidalCycle. It’s been fun and very helpful because it gave me an intuition of what I wanted to go for. The idea was to make a creepy sound, something that inspired anxiety, and contrast it with sounds that brought a soft, almost hopeful joy. Eiden had a very similar project to mine in that aspect and her performance inspired many of the changes I made to mine.

A lot of times for the music I had to borrow other people’s ears to ask what was wrong with the things that bothered me and give them names (learned about dissonant notes). I listened to some soundtracks that reflected my feelings and what I wanted to make out of this piece.

  When I finished my Live Coding course one day and headed back to my room, I met two cats yelling at each other. I recorded the process and began to make my project based on this.

  About the visual part, all of my visual art is developed from a 5-second clip of the cat yelling record. I originally planned to cover color flow over the video. However, I found it may lead to the result that the audience can’t find the cat video backside. So I turned to make the record “repeat” with the rhythm. Then, I added some noise or effect over the cat video. And I paid my attention to if the noise and effect will cover the cat video. 

  About the audio part, my “motive” (ok, it’s not a real motive) is two kinds of “meow meow”, one of them meowing down and the other one meowing up. (you can listen to the meow clip by clicking the link!) And I added beats and some rhythm to it. But I think, I kinda failed to make a real “climax” of the whole song, tho it’s still good!

Enjoy the video:

 

Concept

I wanted to create a short 8-bit indie game type of story, but I also wanted the audience to sort of build the story/game themselves. By naming the functions as I did, I hoped to stir the audience to know what part of the game/story they were in. once_upon_a_time is meant to signify the beginning of the game, usually where the story is told. “adventure” builds off from once upon a time and shows a more adventurous part of the game. “uh_oh” means trouble, the boss fight or critical moment in the game. By skipping directly to the end credits, I wanted the user to imagine the ending themselves, whether they won or lost, if it was a happy or sad ending, open to creativity and interpretation! 

Sound

Most of the sounds I used were already existing sound samples and synthesizers available in SuperDirt. The only “original” sound that I used was the piano sound as the sounds produced by SuperPiano did not fit the theme or vibe I was going for. I made three separate sections with an idea of what role each section would play in the overall story/game experience I was aiming for. The three sections are as follows: beginning (once_upon_a_time and adventure), climax (uh_oh) and ending (end_credits). The difficulty I faced the most was combining all the different parts together since they were all drastically different. But i’m happy with how the outcome was overall

 

Visuals

I built the visuals separately and then adapted them based on how I imagined the sounds would look like. Most of the experimenting I did with the visuals was trying to find out which parameter and which sound would be best to sync together to better match the visuals.

 

Reflection 

Although it was frustrating at times, I really enjoyed working on this assignment and trying to think of a way to convey a story by combining sound and visuals. Taking into consideration the feedback I got in class, I would change the colour scheme to be more unified to give it a more coherent outcome. Overall I’m happy with the outcome.

There’s the link to the recorded performance:

 

Hydra Code:

//start
cc[2] = 0
cc[8] = 0
cc[1] = 0.5
cc[9] =0
shape(()=>cc[2]*4+2,.6,.3).color(20,1,10).modulateRepeat(osc(2),()=>cc[1]*3+1,()=>cc[1]*3+1).modulate(noise(()=>cc[0]*3)).posterize().blend(src(o1), ()=>cc[3]).blend(o2, ()=>cc[8]).blend(o3, ()=>cc[9]).out()


shape(()=>cc[2]*4+2,.6,.3).color(20,1,10).modulateRepeat(osc(2),()=>cc[1]*2+1,()=>cc[1]*2+1).modulate(noise(()=>cc[0]*3)).modulateScale(o0,0.1).colorama(1).out(o1)

//mid
shape(100,0,3).repeat(2).modulate(noise(1,()=>cc[4]*10)).invert().mult(osc(1, 0.8, 1).color(-3.5, -3.0, -3.0)).posterize(1.1).scale(()=>cc[5]*1.2).modulateScale(o0, 0.5).pixelate(300,300).out(o2)

render()
//end
shape([40,50,60].smooth(1),0.5,0.5).modulateRepeat(noise(1)).mult(osc(1,0.1,5).diff(gradient(2)).modulateScale(osc(5),0.5),0.9).posterize(3).scale(0.5).kaleid(()=>cc[6]*10).out(o3)

hush()

 

Tidal Code: 

once_upon_a_time = do {
  d1 $ s "soskick" >| note "f(3,8,3)" #gain 0.8 #legato 2;
  d3 $ s "jazz:8" >| note (arp "diverge" (scale "maj" ("[2,5,7,1]") + "<c4 c5>")) #gain 1.2 #legato 1 #vowel "o i u" #speed 0.5;
  d2 $ slow 2 $ stack [ s "supervibe" >| note "d'm7 g'7m c? [f c]" #room 0.5 #velocity 0.6,
  struct "t t t? [t t]" $ ccv (segment 128 (range 100 20 isaw)) # ccn "0" # s "midi"];
}
-- d1 $ s "bd"
adventure = do {
  once_upon_a_time;
  d2 $ almostNever (fast 2) $ stack [s "supervibe" >| note "d'm7 g'7m c? [f c]" #room 0.5 #velocity 0.3, struct "t t? t [t t]" $ ccv (segment 128 (range 100 20 isaw)) # ccn "0" # s "midi"];
  d5 $ juxBy 0.2 (#vowel "a") $ almostNever (fast 2)$ stack [
  s "blip:8" >| note "d'm7 g'7m? c [f c]" #room 0.3 ,
  struct "t t t? [t t]" $ ccv (segment 128 (range 128 20 isaw)) # ccn "1" # s "midi"];
  d4 $ someCyclesBy 0.4 (rev) $ stack[note  "<c(5,8) d(3,8)? e(3,8,2) f(5,8,2)>" |< s "supergong", struct "<t(5,8) t(3,8)? t(3,8,2) t(5,8,2)>" $ ccv "64" # ccn "2" # s "midi"];
  d6 $ s "bd(5,8,2)"  #room 0.2;
  d8 $ s "sd:8*4";
}

uh_oh = do {
  d10 $ ccv "0" # ccn "3" # s "midi";
  d1 $ stack[ s "sine" >| note "d'm7 g'7m c [f c] d g c'maj d'm7",struct "t t t [t t] t t t" $ ccv (segment 128 (range 128 20 isaw)) # ccn "5" # s "midi"] ;
  d2 $ someCycles (rev) $ fast 2 $ s "supervibe" >| note (arp "diverge" (scale "minor" ("[1, 4, 1, 4]") + "<c5 d5 g5>")) #room 1  #legato 2 #pF "modamp" 2 #velocity 0.1;
  d4 $ s "bass(3,8)" #room 1;
  d5 $ s "sd*4";
  d6 $ s "808bd(5,8,2)" #room 0.5;
  d7 $ someCyclesBy 0.4 (fast 2) $ s "blip:8*8" #room 0.4;
  d8 $ someCyclesBy 0.4 (# ccv "127") $ struct "t*8" $ccv "10" #ccn "4" #s "midi";
}

uh_oh
end_credits
d7 $ silence

end_credits = do {
  d10 $ ccv "0" # ccn "8" # s "midi";
  d9 $ s "super808" >| note "<c'sus2 d'9sus4> [g'sus3 f'dom9]? g'sus ~" #vowel "a i o" #gain 1.5;
  d10 $ s "hh*4" #room 0.5;
  d11 $ scramble 8 $ fast 2 $ stack [ s "piano:25" >| note (arp "diverge" (scale "ritusen" ("[2,4,1,7]") + "<c4 c5>")) # room 0.4 #legato 1 #vowel "o i u", struct "[t t t t]" $ ccv (segment 128 (range 128 20 isaw)) # ccn "6" # s "midi"];
}

hush
//////
all id

once_upon_a_time


--

do
  hush
  d2 $ stack [s "supervibe" >| note "d'm7 g'7m c? [f c]" #room 0.5,struct "t t t? [t t]" $ ccv (segment 128 (range 128 20 sine)) # ccn "0" # s "midi"]

--
adventure

do
  d8 $ s "sd*8"
  d6 $ s "808bd(5,8,2)" #room 0.5
  d7 $ someCyclesBy 0.8 (fast 2) $ s "blip:8*8" #room 0.4
  d2 $ almostAlways (fast 2) $ stack [s "supervibe" >| note "d'm7 g'7m c? [f c]" #room 0.5 #velocity 0.4, struct "t t t? [t t]" $ ccv (segment 128 (range 100 20 isaw)) # ccn "0" # s "midi",struct "t t t? [t t]" $ ccv "0 127" # ccn "3" # s "midi" ]


d11 $ ccv "127" # ccn "8" # s "midi"
xfade 2 $ fast 2 $s "sine" >| note "d'm7 g'7m c [f c]"
d7 $ silence

uh_oh
--

all degrade 

hush

do
  d12 $ ccv "127" # ccn "9" # s "midi"
  end_credits

all id

all degrade

hush

 

Idea

For my composition, I decided to compose a piece inspired by Rick and Morty (because I’ve been watching it a lot lately). I wanted the visuals to be very colourful (primarily green and blue because these are the colours that stick out the most to me in the show), and I wanted to make the sounds be reminiscent of the theme song as well as the overall hectic vibe of the show.

Sounds

I included two different types of sounds for my composition: a harsher, more chaotic compilation of sounds that are inspired by the first few seconds of the Rick and Morty theme song.

After the beat drop, I included a more musical composition that reminds me of the chorus of the theme song.

I was also inspired by Professor’s washing machine composition, so I chopped up a sound bite from the show and tried to make a beat from it.

Visuals

The visuals are a combination of colourful patterns and images of Rick embedded into the shaders. I’ve added an example below:

 

Evaluation

Overall, I had a lot of fun completing this project, despite the fact that I found it quite challenging creating a cohesive composition. If I had more time to work on this project, I would try to make the composition resemble a full Rick and Morty episode, such as including a conflict/fight scene and a resolution at the end.

Here is the link to watch my composition: https://youtu.be/m9Rry4Msyqk

Tidal

-- start
-- portal

d1 $ loopAt 4 $ qtrigger 3 $ slow 2 $ s "superpiano" <| n "g@3 as a c f ds d@3 ~@5 g@3 as a c6 f6 ds6 d6@3 ~@5" # room 10 # krush 30 # legato 2
d2 $ loopAt 4 $ qtrigger 4 $ slow 2 $ s "superpiano" <| n "g3@3 as3 a3 c3 f3 ds3 d3@3 ~@5 g3@3 as3 a3 c4 f4 ds4 d4@3 ~@5" # room 10 # krush 30 # legato 2
d3 $ loopAt 4 $ qtrigger 5 $ slow 2 $ s "superpiano" <| n "g6@3 as6 a6 c6 f6 ds6 d6@3 ~@5 g6@3 as6 a6 c7 f7 ds7 d7@3 ~@5" # room 10 # krush 30 # legato 3

-- FIRST AND SECOND VISUAL SOUNDS
d9 $ qtrigger 9 $ fast 2 $ "<lt:2,lt:1 lt:8> lt:4 lt:10 ~" <| n "<c d a b> g as f" # gain 2 # room 10
-- first visual
d4 $ ccv (segment 68 (range 127 60 saw)) # ccn "0" # s "midi"
-- second visual
d5 $ ccv "2 10 50 100" # ccn "1" # s "midi"

-- THIRD VISUAL SOUNDS

d3 $ qtrigger 3 $ stack [
s "~ cp" # room 0.5,
fast 8 $ slice 16 "15" $ s "riggity*2 riggity*2 riggity*2 <hh*6 [hh*2]!3>" # room 0.7 # gain (range 1 1.2 rand)
] # speed (slow 2 (range 1 2 saw)) # room 5

d5 $ ccv "~ 0 <1 2 1.5?> 0" # ccn "2" # s "midi"

--Build (third visual)

do{
d1 silence;
d2 silence;
d3 silence;
d4 silence;
d5 silence;
d2 $ qtrigger 2 $ seqP[
(0, 1, s "mash2*2"),
(1, 2, s "mash2*4"),
(2, 3, s "mash2*8"),
(3, 4, s "mash2"),
(3, 4, s "riggity" # speed 1.5)
] # room 10 # gain 5}

-- change colour of rick (third visual)
d4 $ ccv "1 0" # ccn "3" # s "midi"

-- end
d7 $ qtrigger 2 $ slow 2 $ s "hit" <| n "g ~ as a c f ds d" # room 2
d8 $ qtrigger 1 $ slow 2 $ s "hoover" <| n "g ~ as a c6 f6 ds6 d6" # room 2
d9 $ slice 16 "15 1 5 6" $ slow 2 $ s "riggity" # room 2 # krush 5
d6 $ fast 2 $ "<juno:11, juno:10, invaders>"

-- finale
d3 $ s "show ~" # room 4

d9 silence
d2 silence
d1 silence
d3 silence
hush

Hydra

osc(10,()=>cc[0]/10000)
.color(2, 255, 0)
.posterize( [1, 5, 15, 100] , 0.5)
.colorama(0.005,0.33,0.66,1.0)
.layer(src(s1).rotate(1).scale( ()=>Math.sin(time/6.2)*.12+.15 ))
.layer(osc(15).rotate( ({time}) => time%360 ).luma(0.7,0.7).color(0,0,10))
// .add(osc(200))
// .luma(.99)
// .modulateRotate(voronoi(()=>cc[0], 1, 100))
.out()

osc((()=>cc[1]*500), 0, 10)
// .layer(src(s1).rotate(1).scale( ()=>Math.sin(time/6.2)*.12+.15 ))
// .layer(src(s0).scale(0.2).rotate(1))
// .colorama( ({time})=> Math.sin(time/5) )
// .colorama( ({time})=> Math.sin(time/5) )
.repeat(()=>cc[0],0.5)
.color(2, 255, 0)
.rotate(0, -0.08)
.modulateRotate(o1, 0.4).out(o0)
osc(33).rotate(2, 0.8)
.modulateRotate(o0, () => (a.fft[0]*2))
.add(osc(200)
.luma(.99)
.color(1, 0, 1)
.modulateRotate(voronoi(400, 1, 10)))
.out(o1)

//LOAD IMAGE
basePath1 = “/Users/debbie/Desktop/CompositionPics/rick2.png”
basePath2 = “/Users/debbie/Desktop/CompositionPics/rick.png”
s1.initImage(basePath1)
s2.initImage(basePath2)

shape(5,0.1,1)
.rotate( ({time}) => time%360 * 2 )
.posterize( [10, 15, 30] , 0.5 )
.invert(()=>ccActual[3])
.repeat(10.0, 10.0, 0.5, 0.0)
.color(1,0,3)
.mult(src(s1).thresh(0.3).rotate(()=>ccActual[2]))
.invert(()=>ccActual[3])
// .scale( ()=>Math.sin(time/6.2)*.12+.15 )
.add(osc(200)
.luma(.99)
.color(1, 0, 1)
.modulateRotate(voronoi(400, 1, 10)))
.out(o0)

 

hush()

 

 

 

The composition project was a really challenging one but also extremely fun and enjoyable at the same time. Initially, I struggled a lot with the audio and visuals, but slowly it all finally came together! :)) I started working with the sound first. I played around with multiple audio samples, layered them, added variations, and made a list of all the rhythms and patterns I liked. Then I worked on visuals, trying multiple different functions together to create unique and interesting patterns. After having a collection of various sounds and visuals I liked, it was time to get all these individual components into a whole composition.

Having no music knowledge, I started by reading about music and composition and different song structures. The first was to come up with a beat, a base rhythm on which my composition will be built. Then layer in and out sounds to make a composition. I listened to a lot of techno music, video games soundtracks, and other artists to understand how they build up and transition in their songs. The dramatic silence part of my composition is inspired by the song Dance Macabre – one of my favorites. The indie techno vibe and drums are inspired by Coke Studio music.

One very important thing I learned through this composition project is something my professor, Aaron Sherwood says, “Don’t force it.” I had to be very selective in my choices for the audio and visuals and only choose the ones that went with my theme. Some sounds and visuals looked good individually, but I did not use them if they did not add to the composition as a whole.

As I worked on this project, I took extensive notes – notes of what sounded nice, what needed improvement, which track I am playing and which ones to choose next, which sounds I like, and what is the structure and my thought process of getting it all together. Writing it all down was very helpful and I also recorded myself so that I could go back to these later if needed. (A few of my scribbled notes can be found above).

My final live composition project video can be found here:

The Tidal Code for my composition:

-- reset midi values

reset_midi = do {
  d15 $ stack [
    ccv "0*128" # ccn "0" # s "midi",
    ccv "0*128" # ccn "1" # s "midi",
    ccv "0*128" # ccn "2" # s "midi",
    ccv "0*128" # ccn "3" # s "midi",
    ccv "0*128" # ccn "4" # s "midi",
    ccv "0*128" # ccn "5" # s "midi",
    ccv "0*128" # ccn "6" # s "midi",
    ccv "0*128" # ccn "7" # s "midi",
    ccv "0*128" # ccn "8" # s "midi",
    ccv "0*128" # ccn "9" # s "midi",
    ccv "0*128" # ccn "10" # s "midi",
    ccv "0*128" # ccn "11" # s "midi"
  ]
}

reset_midi
d15 silence

hush
d15 $ ccv "0*128" # ccn "11" # s "midi"
d15 silence

-- midi values

segment128 = ccv (segment 128 (range 127 0 saw)) # ccn "0"  # s "midi"
alt0127 = ccv "0 127" # ccn "1"  # s "midi"
alt64127 = ccv "64 127" # ccn "2"  # s "midi"
segment4 = ccv (segment 4 (range 127 0 saw)) # ccn "3"  # s "midi"
triplehalf = ccv "127 127 127 64" # ccn "4" # s "midi"
trigger = ccv "127" # ccn "5" # s "midi"
trigger2 = ccv "127" # ccn "6" # s "midi"
trigger3 = ccv "127" # ccn "7" # s "midi"
ripOff = ccv "[0 127 0] [127 0 127] 0 127" # ccn "9" # s "midi"


-- composition parts

base_gtr = s "gtr"
base_drum = s "~  808bd:1" # room 1.5 # sustain 8
tabla1 = s "<tabla:24(3,8)? tabla:6(3,8)>" # gain "1.5 1" -- put gain for first one
tabla2 = fast 2 $ s "<808ht:1(3,8) 808ht:3(5,8)?>" -- why does it have a weird beat in the beginning?
acoustic = fast 2 $ s "<tabla2:8(3,8) sf(5,8)>" # gain "1 0.5"
playful = sometimesBy 0.9 (fast 2) $ "pluck*4" <| n (run 4) # gain 1.3
honeyComb = sometimesBy 0.2 (  scramble 8 ) $ fast 2 $ s "pluck:2" >| note (arp "updown" (scale "pelog" ("[1,2]"+"<0 2 3>") + "c5")) # gain 1

andd_Beginnn = do {
  xfade 1 $ fast 2 $ s "moog:6" >| note (scale "major" "<[1@2 2 3] [1@2 2 1] [1@.5 1@1.5 2 1] [1@.5 1@1.5 2 3]>") # cut 6 # gain (range 0.6 0.75 rand);
  d8 $ qtrigger 8 $ seqP [
    (0, 4, ccv (segment 128 (range 0 127 saw)) # ccn "11"  # s "midi"),
    (4, 6, ccv "127" # ccn "11"  # s "midi")
  ]
}

riseEE = do {
  d9 $ qtrigger 9 $ seqP [
    (0, 2, sometimesBy 1 (fast 2) $ "pluck*2" <| n (run 2) # gain "<1 1.2>"),
    (2, 4, sometimesBy 1 (fast 2) $ "pluck*4" <| n (run 4) # gain "<1.4 1.5>" # room 0.2),
    (4, 8, sometimesBy 1 (fast 2) $ "pluck*8" <| n (run 8) # gain "<1.7 1.8 1.9 2>" # room 0.3)
  ];
  d3 $ qtrigger 3 $ seqP [
    (0, 2, s "bd*4" # gain "<1 1.2>"),
    (2, 4, s "bd:1*8" # gain "<1.4 1.5>" # room 0.2),
    (4, 8, s "bd:2*16" # gain "<1.7 1.8 1.9 2>" # room 0.3)
    --(6, 8, s "bd:4*32")
  ] # room 0.3
}

dRAMAAATIC_SILENCE = do
  hush
  d12 $ trigger2
  d2 $ segment128
  d3 $ fast 1 $ segment4


attack = do
  d2 $ segment128
  d3 $ fast 2 $ segment4
  d8 $ trigger3

are_you_readyyyy = do {
    d6 silence ;
    d3 silence ;
    d1 silence;
    d2 silence ;
    d8 silence ;
    --d12 silence ;
    d4 silence ;
    d5 silence ;
    d11 $ qtrigger 11 $ seqP [
        (0, 1, fast 1 $ "tabla2:24*4" # gain 1 # room 0.2),
        --(0, 1, fast 4 $ ccv "0 127" # ccn "8" # s "midi"),
        (1, 2, rotL 1 $ fast 1 $ palindrome $ degradeBy 0.1 $ s "tabla2:5" <| n "[20 23 22] [15 12 15] [20 12 15] [22 20 23]" # gain ((range 1.1 0.75 rand)) # room 0.3 # gain 1),
        (1, 3, rotR 1 $ fast 2 $ s "tabla2" <| n "[<17 ~@7>]" # room 0.1 # gain 1),
        --(1, 3, fast 32 $ ccv "0 127" # ccn "8" # s "midi"),
        --(2, 24, fast 32 $ ccv "127" # ccn "8" # s "midi"),
        (2, 16, fast 2 $ s "tabla2" <| n "[13 22 13 22,[~ 19]*2,[<17 ~@7>]]" # gain 1 # room 0.1)
        --(2, 24, attack)
    ];
    d12 $ qtrigger 12 $ seqP [
        (0, 1, fast 4 $ ccv "0 127" # ccn "8" # s "midi"),
        (1, 3, fast 32 $ ccv "0 127" # ccn "8" # s "midi"),
        (2, 24, fast 32 $ ccv "127" # ccn "8" # s "midi")
        --(2, 24, attack)
    ];
    attack
}

finalleYYYY = do {
  d9 $ qtrigger 9 $ seqP [
    (0, 8, ccv "0" # ccn "10" # s "midi"),
    (0, 2, sometimesBy 0.9 (fast 2) $ "pluck*2" <| n (run 2) # gain "<1 1.1>"),
    (2, 4, sometimesBy 0.9 (fast 2) $ "pluck*4" <| n (run 4) # gain "<1.2 1.3>"),
    (4, 6, sometimesBy 0.9 (fast 2) $ "pluck*6" <| n (run 6) # gain "<1.5 1.7>"),
    (0, 2, segment4),
    (2, 8, fast 2 $ segment4),
    (4, 6, ripOff),
    (6, 8, fast 2 $ ripOff),
    (4, 6, s "[bd gretsch:9] [bd gretsch:0] gretsch:1 gretsch:1" # gain 2),
    (4, 6, s "~ ~ ~ hh:1" # gain 1.5),
    (6, 8, fast 2 $ palindrome $ degradeBy 0.1 $ s "gretsch" <| n "[20 23 22] [15 12 15] [20 12 15] [22 20 23]" # gain ((range 1.1 0.75 rand)) # room 0.2 # gain 1.5),
    (7, 9, rotR 1 $ fast 2 $ s "gretsch" <| n "[<17 ~@7>]" # room 0.3 # gain 2),
    (8, 9, ccv (segment 128 (range 0 127 saw)) # ccn "10" # s "midi")
  ];
}




-----------------------------------------------------------------------------
-- START PERFORMANCE

do
  d1 $ base_gtr
  d2 $ segment128
  d7 $ trigger3

do
  d3 $ base_drum
  d4 $ alt0127

do
  d5 $ acoustic
  d6 $ alt64127

do
  xfade 7 $ playful
  d8 $ segment4
  d2 silence

do
  clutch 5 $ tabla1
  d9 $ tabla2

d10 $ triplehalf

do
  clutch 7 $ honeyComb
  clutch 5 $ fast 2 $ "hh hh:5 hh:11 hh"
  d11 $ trigger

clutch 9 $ degradeBy 0.2 $ someCyclesBy 0.8 (fast 1) $ fast 2 $ s "pluck:2" >| note (arp "updown" (scale "pelog" ("[1,2,5]"+"<0 6 1>") + "c5")) # gain 1
d3 $ "bd*8 bd*2"

riseEE

dRAMAAATIC_SILENCE

andd_Beginnn

xfade 4 $ fast 2 $ struct "t(5,8)" $ s "dr55" <| n (run (range 10 15 rand))
xfade 5 $ every 4 (fast 2) $ sound "drum*2" # room 0.1
xfade 6 $ fast 2 $ "hh hh:5? hh:11? hh" # room 0.2
xfade 7 $ fast 2 $ "pluck*8" <| n (run 8) # gain 1.2

are_you_readyyyy

finalleYYYY

d7 $ silence

hush

The Hydra Code for my composition:

///////////////////////////////////////////
// Section 1

render(o0)
solid().blend(
  osc(10,0.1,0).color(0.1,0.5,0.3)
    .modulateRotate( osc(10,0.1), ()=>cc[0] )
    .hue(  ()=>cc[2] ).kaleid(10)
    .modulate(o0, ()=>(cc[1]*0.5) )
    .modulate( osc(1,()=>cc[2]*15) )
    .repeat(()=>cc[3]*4+1,()=>cc[3]*4+1)
    .kaleid(5)
    .blend(shape(100)
      .rotate(() => Math.PI /180)
      .repeatX(3)
      .repeatY( ()=>Math.sin(time)*4 )
      .scale(() => Math.PI/4)
      .repeat(()=>cc[3]*4,()=>cc[3]*4)
      .blend(src(o0).color(0.2,1,0))
      .modulate(osc([4,15,25,50].fast(8), 0,.4))
      .kaleid(10), ()=>cc[4])
    .blend( shape( ()=> cc[3]+4 ,0.000001,[0.2,0.7].smooth(1))
      .color(0.2,0.4,0.3)
      .scrollX(()=>Math.sin(time*0.27))
      .add(
        shape( ()=> cc[3]+4, 0.000001,[0.2,0.7,0.5,0.3].smooth(1))
        .color(0.6,0.2,0.5)
        .scrollY(0.35)
        .scrollX(()=>Math.sin(time*0.33)))
      .add(
        shape( ()=> cc[3]+4 ,0.000001,[0.2,0.7,0.3].smooth(1))
        .color(0.2,0.4,0.6)
        .scrollY(-0.35)
        .scrollX(()=>Math.sin(time*0.41)*-1))
      .modulate(voronoi(10,2,2)).rotate(()=>cc[3],2), ()=>cc[5] )
    .modulateRotate(src(o0)).modulateRotate(src(o0))
    .modulateRotate(src(o0)).modulateRotate(src(o0))
    .blend(solid(), ()=>cc[6] )
    ,()=>cc[7])
  .out()

///////////////////////////////////////////
// Section 2

solid().blend(
  osc( ()=>cc[3]*100 ,0.2,1)
  .mult(osc(20,-0.1,1).modulate(noise(3,1)).rotate(0.7))
  .luma(()=>cc[0])
  .mult(osc(5,2,1))
  .modulateRotate( noise(1)  )
  .modulateRotate( o1,1  )
  .blend(o0).blend(o0)
  .rotate(()=>cc[0],()=>cc[3])
  .blend (osc(10,0.1,()=>cc[0])
    .modulateRotate(osc(10,0.1).rotate(),()=>cc[3])
    .hue(0.2).kaleid(4).modulateRotate(noise( ()=>cc[3]*10 ))
    .color(()=>cc[0],0,0.5)
  , ()=>cc[8])
, ()=>cc[11])
.out()

///////////////////////////////////////////
// Finale

osc(10,0.1,1)
    .modulateRotate(osc(10,0.1).rotate(),1)
    .hue(0.2).kaleid(4).modulateRotate(noise( 1*10 ))
    .color(1,0,0.5)
    .out()
shape(30,0.3,1).invert(()=>cc[9]).out(o2)
noise(()=>cc[3]*4,0.2,3)
  .thresh(0.3,0.03)
  .diff(o2).out(o1)
gradient([0.3,3].fast(4)).mult(o0).blend(o1)
  .modulateRotate(o3).modulateRotate(o3).modulateRotate(o3)
  .blend(solid(), ()=>cc[10])
  .out(o3)
render(o3)

hush()
render(o0)

///////////////////////////////////////////

 

Process

As someone who is very indecisive, it’s often difficult to find a starting point, especially when there are no limitations or specific guidelines but I had to start somewhere. I looked over my previous assignments, pasted in some code for hydra, and started experimenting. I started with the visuals first as I wanted to get an idea of how fast or slow I would like to have my audio.

Visuals

For the visuals in this project, I decided to take a more sleek and simple approach relative to my previous assignments. I noticed that in all of my previous assignments I would create visuals that take up the whole screen and have colors all over the place, so I decided to make something different and focus on the use of shapes. I chose to incorporate my personality into the theme by choosing a color palette consisting of my favorite colors; pink and blue, with some transitional colors and shades. I made at least 10 different mini-performances with the visuals, left them, and started working on the audio.

Audios

In regards to the audio, I also wanted to step out of my comfort zone and find and work with my own samples rather than the ones offered by tidal. The longer audios were a bit more difficult to incorporate as I had to figure out how many loops to set them as and add effects to make them sound like the original sample file. I got Aaron’s help for one of them and applied the same logic to the rest. As usual, for me, the audios were more difficult to put together, as I feel that I don’t have a musical ear and so it takes me some time to find different sounds that go together and asked a few of my friends if they sound good. Similar to the visuals, I put together maybe 7 mini-performances until I was satisfied with the results I had. I experimented with different scales of structure, however, I ended up choosing performances that included longer audio files so I didn’t feel that the scales went along with them.

Composition

Next, I had to put the visuals and audio together so I went through them all, and deleted the performances that I either didn’t like or felt that they don’t go with the rest. Testing by mixing and matching different visuals with different audios, I reached 2 of each that I really liked and decided to incorporate them with one another. I separated the performance into 2 phases, fading in and out of the first one, merging into the second one, and lastly fading out with the second one. I connected the visuals and audio through Midi, also testing out several output patterns, and organized everything in a thought-out order of events to put together the composition.

Reflection and Outcome

Out of all of the assignments that we have done since the beginning of the semester, I would say I enjoyed the composition project the most. It gave me the opportunity to explore and experiment but with the goal of having a well-put-together composition that takes into account the sounds as well as the visuals. Ironically, screen recording was a challenge that I had as every time I record something goes wrong; the laptop lags, the audio doesn’t play, I mess up, the audio doesn’t record, …etc. I had to record over 20 times until I finally had a proper recording as could be seen below: