I was inspired by the music box gif on the giphy website. I want to have the main melody which is To Alice. Throughout the whole composition, there are three main components. The first one is the verse, which in context includes when the music box is turned on and winded and plays beautiful tunes. However, it follows the distortion. I introduced the distortion by varying the speed of the melody so that it sounds like rewinding the music. To go with the music, I found a gif on giphy to present to the audience the music box being played.
It is convenient that the gif is already creepy in some ways because it facilitates my chorus, which I use to portray the increasingly broken music box. Composition wise, I added lower end melody using different samples as the original one, as well as changing the beats a little to give the composition piece more variety. As for the visuals, I introduced noise into the giphy to simulate chaotic features. Moreover, In the second half of the chorus, I use heavy electric guitar sound to push the music to a peak. At the same time, the visuals are even more chaotic and by using feedbacks, I was able to convey the emotion of fear.
Next is the bridge. To contrast with the chorus, I slowed down music and added some bass. In the visuals, chaos are gone, instead there is slowed and smooth distortion I created using blend function.
I think the performance could be improved by a more cohesive use of visuals, sounds as well as midi. I These would facilitate me in telling the story since the audience won’t be distracted by the incoherent movement between different parts of music or visuals. I have pasted the YouTube video here:
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.
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];
}
}
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!
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.
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"
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