Performance recording
Audio code 🎧
setcps (130/60/4)
-- chords
d1 $ qtrigger $ filterWhen (>=0) $ stack [
struct ("[1 0] [0 1] [0 0] [1 0]")
$ s "longer:1" >| begin 0 >| end "0.003"
# note ("<f'min'4 df'maj'4 c'min'4 ef'maj'4>") # hpf 1000,
ccv "[<90 40 30 90> 0] [0 <90 40 30 90>] [0 0] [<90 40 30 90> 0]" # ccn "0" # s "midi"
]
-- bass drum
d2 $ qtrigger $ filterWhen (>=0) $ stack [
struct ("1 1 [1 0 0 1] [0 0 1 0]") $ s "house",
ccv "60 60 [60 0 0 60] [0 0 60 0]" # ccn "1" # s "midi"
]
-- melody
d3 $ qtrigger $ filterWhen (>=0) $ stack [
fast 2 $ struct ("1 1 1 <0 1>") $ rolledBy 0.7 $ note (arp "diverge" "<f'min'4 ef'maj'4>")
# s "bubble:2" # gain 1.3 # hpf 1000,
ccv "30 30 30 <0 30>" # ccn "2" # s "midi"
]
-- kick & hh
do
d4 $ qtrigger $ filterWhen (>=0) $ struct ("[1 0 1 1 <0 1> [0 1] [0 1] 0]") $ s "bubble:5" -- bubble kick
d5 $ qtrigger $ filterWhen (>=0) $ struct ("0 1 0 1") $ s "jchh:1" # gain 0.8 # room 0.1
-- shaker?
do
d7 $ qtrigger $ filterWhen (>=0)
$ seqP [
(2,3, "ukgfx:3@4")
]
d8 $ qtrigger $ filterWhen (>=0) $ struct ("[1 1] [1 0] [0 1] 0") $ s "house:2" # lpf 2000
-- faster
do
d1 $ qtrigger $ filterWhen (>=0) $ struct ("[1 0] [0 1] [0 0] [1 0]") $ s "longer:1" >| begin 0 >| end "0.003"
# note ("<f'min'4 df'maj'4 c'min'4 ef'maj'4>")
d5 $ qtrigger $ filterWhen (>=0)
$ seqP [
(0,4, struct ("[0 1] [0 1] [0 1] [0 1]") $ s "jchh:1" # gain "0.8" # room 0.1),
(4,8, struct ("[0 1] [0 1] [0 1] [0 1]") $ s "jchh:1" # gain "0.8" # room 0.1)
]
-- little break
do
d1 $ qtrigger $ filterWhen (>=0) $ struct ("1@4") $ s "longer:1" >| begin 0 >| end "0.003"
# note ("<f'min'4 df'maj'4 c'min'4 ef'maj'4>")
d2 $ silence
d3 $ qtrigger $ filterWhen (>=0)
$ seqP [
(4,8, fast 2 $ struct ("1 1 1 <0 1>") $ rolledBy 0.7 $ note (arp "diverge" "<f'min'4 ef'maj'4>"))
] # s "bubble:2" # gain 1.4 # hpf 1000 -- louder bubble
d5 $ silence
d6 $ silence
d8 $ silence
-- highlight
do
d1 $ qtrigger $ filterWhen (>=0) $ stack [
struct ("1@4") $ s "longer:1" >| begin 0 >| end "0.003"
# note ("<f'min'4 df'maj'4 c'min'4 ef'maj'4>") # gain 1.07,
ccv "[<90 40 30 90> 0] [0 <90 40 30 90>] [0 0] [<90 40 30 90> 0]" # ccn "0" # s "midi"
]
d2 $ qtrigger $ filterWhen (>=0) $ stack [
struct ("1 1 [1 0 0 1] [0 0 1 0]") $ s "house",
ccv "60 60 [60 0 0 60] [0 0 60 0]" # ccn "1" # s "midi"
]
d3 $ qtrigger $ filterWhen (>=0) $ fast 2 $ struct ("1 1 1 <0 1>") $ rolledBy 0.7 $ note (arp "diverge" "<f'min'4 ef'maj'4>")
# s "bubble:2" # gain 1.3 # hpf 1000
d4 $ qtrigger $ filterWhen (>=0) $ struct ("[1 0 1 1 <0 1> [0 1] [0 1] 0]") $ s "bubble:5" # hpf 1000
d5 $ qtrigger $ filterWhen (>=0) $ struct ("[0 1] [0 1] [0 1] [0 1]") $ s "jchh:1" # gain 0.8 # room 0.1
d6 $ qtrigger $ filterWhen (>=0) $ struct ("0 1 0 1") $ s "ukgclap:5" # gain 0.7 # room 0.1
d7 $ silence
d8 $ qtrigger $ filterWhen (>=0) $ struct ("[1 1] [1 0] [0 1] 0") $ s "house:2"
-- riser
d7 $ qtrigger $ filterWhen (>=0) $ stack [
seqP [
(0,1, s "jcfx:12@8" # gain 0.7 # room 0.2),
(0,1, s "ukgriser:3@8" # lpf 2000 # gain 0.8 # room 0.2),
(2,6, s "h:1@4" # n "<f'min'4 df'maj'4 c'min'4 ef'maj'4>" # crush 3 # cut 1 # hpf 1000 # gain 0.6 # room 0.4)
],
ccv "<90 40 30 90>" # ccn "2" # s "midi"
]
-- only chords + vox
do
d1 $ struct ("[1 0] [0 1] [0 0] [1 0]") $ s "longer:1" >| begin 0 >| end "0.003"
# note ("<f'min'4 df'maj'4 c'min'4 ef'maj'4>")
d2 $ silence
d3 $ silence
d4 $ silence
d5 $ silence
d6 $ silence
d7 $ qtrigger $ filterWhen (>=0) $ s "h:1@4" # n "<f'min'4 df'maj'4 c'min'4 ef'maj'4>"
# crush 3 # cut 1 # hpf 1000 # gain 0.6 # room 0.4
d8 $ silence
-- ending..
do
d1 $ silence
d2 $ silence
d3 $ silence
d4 $ silence
d5 $ silence
d6 $ silence
d7 $ qtrigger $ filterWhen (>=0) $ struct ("[1 0] [0 1] 0 0") $ s "longer:1" >| begin 0 >| end "0.003"
# note ("<f'min'4 df'maj'4 c'min'4 ef'maj'4>" + "-3")
d8 $ silence
d9 $ silence
d7 $ struct ("[1 0] [0 1] 0 0") $ s "longer:1" >| begin 0 >| end "0.003"
# note ("<f'min'4 df'maj'4 c'min'4 ef'maj'4>" + "-3") # lpf 2000 -- 2000 -> 1000
Visual code 🫧
hush()
bpm = 65
// -- load everything here --
// load video 1 (hand)
s1.initVideo('https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExOWRlamczNDZkNWwwNjl3cXMzN3FjYnR5bWlmbTNlbWZmaHVoOTJ2MiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3oKIPw0gVImPZISxlS/giphy.mp4')
src(s1).out(o1) // out at o1
// load video 2 (background)
s0.initVideo('https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExcGtoMWl5ZzN1czdxMW40N3kyZGhjOTJmczB4bjQ1YWg3anFsYnUzeCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/xUOwGedYaNseUaJRa8/giphy.mp4')
// load noises
voronoi(10,1,5)
.brightness(()=>Math.random()*0.15)
.modulatePixelate(noise(() => (cc[2]*25),0.5), 100)
.out(o2)
// --------------------------
// start
src(s0)
.modulate(noise(() => (cc[0]*0.3)))
// .blend(noise(() => (cc[2]*0.5)), 0.1).brightness(0.2) // melody
// .blend(o2, 0.1) // shaker
.out(o0)
// little break
speed = 0.01
src(s0).brightness(0.1).out(o0)
// highlight
speed = 1
src(s0)
.modulate(noise(() => (cc[0]*0.3)))
.blend(noise(() => (cc[2]*0.5)), 0.1).brightness(0.2)
.blend(o2, 0.1)
.add(src(s1), 0.2)
.out(o0)
// chords + vox
speed = 1
src(s0)
.add(src(s1), 0.4)
// .brightness(0.2) // ending
.out(o0)
For the composition project, I wanted to create pop-like, melodic music with nostalgic visuals. I first started experimenting with different rhythms for the beat and created a main beat using the ‘bubble’ sound sample from the DirtSamples library. I instantly liked how it sounded, so I decided to go with the lightweight melody that can go well with the bubble kick drum. The hardest part for me was to come up with the chord progression. With the professor’s help, I could devise the main chord that I used as an intro. I couldn’t find a synth that fit the rest of the beat, so I ended up chopping off the chord sound from another song (OMG by NewJeans). Then, I changed the notes to apply the custom chords. Once I had all the elements, I mostly focused on the progression of the sounds. I like music with a nice intro, so I spent a lot of time refining the initial build-up and making it consistently progress for listeners to really feel the build-up.