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:

Initially I was just exploring different visual and audio possibilities, until I had a dream about swimming. Therefore, my later intention and concept were to create a sense of dream where one sinks into the water, discovers and experiences a different fantasy. I referred to ABCB structure, but the C part is mainly variation of materials. 

What I wish I have done better is the interaction between audio and visual. For example, I don’t have much visual changes going on for the buildup to increase the intensity. But overall I’m happy with what I have done. 😀

Update: I intended to create a strong contrast visually from B&W to colorful environment with the help of audio. However it turned out a bit abrupt for some viewers, and I can get the point. So I think it’s good to show things to people and get feedback, which can be different, but will provide insights that we as creators couldn’t sense otherwise.

My Code:

Hydra

osc(10,0.1,0).modulate(noise(()=>cc[0]*1,0.04),0.5).thresh().out()
// ()=>cc[0]*1,0.04
// thresh

shape(3).scale(0.4).scale(()=>cc[0]*4).out(o0)

shape(3).scale(()=>cc[0]*1.2).repeat(6,4).out(o0)

//tin
shape(3).scale(()=>cc[0]*1).rotate().repeat(5).scrollX(()=>(-cc[2])*10).scrollY(()=>(-cc[2])*10).out(o0)

shape(4).scale(()=>cc[0]*1).rotate().repeat(5).scrollX(()=>cc[2]*10).scrollY(()=>cc[2]*10).out()

hush()

s1 = osc(10,0.1,0.3).hue(()=>cc[0]*0.3).modulate(noise(()=>cc[0],0.04),0.5).colorama(0.5)
s2 = osc(10,0.1,1).hue(()=>cc[6]*2).modulate(noise(()=>cc[6],0.04),0.5).colorama(1)

//drop
s2.out()

shape(3).scale(0.5).scale(()=>cc[0]*4).repeat(6,4).out(o0)
s1.out(o1)
src(o2).modulate(src(o1).add(solid(1,1),-0.5),0.001).blend(o0,0.1).out(o2)
solid().layer(src(o2).mult(o1),0.5).out(o3)
render(o3)

//ending
tri = shape(3).kaleid(3).scale(0.6)
tri.scale(()=>cc[5]).rotate(()=>(cc[5])).repeat(5).out(o0)
osc(10,0.1,1).hue(.8).modulate(noise(2,0.04),0.5).colorama(2).out(o1)
src(o2).modulate(src(o1).add(solid(1,1),-0.5),0.001).blend(o0,0.1).out(o2)
solid(0.2,()=>cc[1]*0.2,()=>cc[1]*0.2).layer(src(o2).mult(o1).luma(0.01),0.1).out(o3)
render(o3)

hush()

Tidalcycle:

Continue reading “Eadin’s Composition Project”

For me, this project is by far the most challenging one, and again, the one I prepared for most carefully. I must say that I put more effort into making the music than the visual, and I am relatively more satisfied with the music part as well.

For the music part, I used the Lupin III theme as the theme motive. I would consider my musical pattern as=>

Intro

The main part I(with motive)

The Main part II(with buildup+motive)

Bridge(saxophone solo)

End(with buildup+motive)

For the structure of the music, I was inspired by “Theme from Lupin III 2021”.

I would also like to share some details of my music part: First, I used the classic bossa nova drum pattern in the intro and main part I, which contains an eight-beat hihat, a bottom drum, and a side drum. Secondly, I use the hihat in 8 beats as an instrument throughout the song to serve as a link between different parts (I think it works quite well). Thirdly, I deliberately increased the contrast in each part: in some parts, I used multiple fast-paced percussion and heavy metal guitars (namely, the main part II) to create a passionate atmosphere; I only used the piano for the transition between the endings. I hope to use this sense of contrast to describe Lupin’s ups and downs adventure story.

For my visual part, honestly speaking I didn’t study the transition between the images that carefully. The result of this is that while I did make some interesting graphics, there are times when “too many things are happening at the same time”. So if I have more time, I think this will be the part that I want to improve. 

Here is the link to my code: https://github.com/AvatarLouisLi/Live-Coding/tree/main/Composition%20Project

Here is my work: