<How it started>
There was no end goal at first. I was trying combinations of different sound, thinking about how they would sound like if they worked as my intro etc. Playing around, I came up with two combinations that I liked. They gave a vibe of somebody maybe being chased, or maybe being high. Then a game I watched a video of years ago popped up in my head, so I decided to maybe try making a visual similar to this. (It’s an educational game and this project too, is far from promoting drug abuse.)
<Performance>
For the performance, I realized that it would be chaotic to go back and forth between the music and the visuals. At the same time, I wanted some aspect of live coding to be there. To get around this, I made the music as a complete piece, allowing myself to focus on the visuals and evaluating the codes according to the preset music.
I could not do any type of screen recording because whenever I tried, the hydra code lagged so much, completely stopping the video in the background and freezing the screen. Because of that, some sounds of the music sounds a little bit different in the video above.
<Tidal Cycles Code>
intro = stack [slow 2 $ s "[ ~ cp]*4", slow 2 $ s "mash*4"]
baseOne = stack [s "bd bd ht lt cp cp sd:2 sd:2", struct "<t(4,8) t(3,8,1)>" $ s "ifdrums" # note "c'maj f'min" # room 0.4]
baseTwo = stack[slow 2 $ s "cosmicg:3 silence silence silence" # gain 0.7, slow 2 $ s "gab" <| n (run 10)]
baseThree = stack[s "haw" <| n (run 4), s "blip" <| n (run 13) # gain (range 0.9 1.2 rand)]
buildHigh = palindrome $ s "arpy*8" # note ((scale "augmented" "7 3 1 6 5") + 6) # room 0.4
buildMidOne = sound "bd bd ht lt cp cp sd:2 sd:2"
buildMidTwo = stack[s "<feel(5,8,1)>" # room 0.95 # gain 1.3 # up "1", s "feel" # room 0.95 # gain 1.3 # up "-2"]
buildLow = s "f" # stretch 2 # gain 0.75
explosion = slow 2 $ s "sundance:1" # gain 1.2
mainHigh = s "hh*2!4"
mainMid = stack[fast 1.5 $ s "bd hh [cp ~] [~ mt]", fast 1.5 $ s "<mash(3,8) mash(5,8,1)>" # speed "2 1" # squiz 1.1, s "circus:1 ~ ~ ~ "]
endBeep = s "cosmicg:3 silence silence silence" # gain 0.7
-- midi
midiIntro = ccv "2 4 -2 1" # ccn 0 # s "midi"
midiEnd = ccv "2" # ccn 0 # s "midi"
midiBase = ccv "127 0 0 64 127 0" # ccn 1 # s "midi"
midiBuild = ccv "40 10" # ccn 2 # s "midi"
midiMain = ccv "2" # ccn 2 # s "midi"
midiSlow = ccv "20 16 12 8 4" # ccn 3 # s "midi"
playMusic = do {
d2 $ qtrigger $ filterWhen (>=0) $ seqP [
(0, 6, intro),
(0, 42, fast 4 midiIntro),
(6, 12, intro # gain 0.8)
];
d3 $ qtrigger $ filterWhen (>=0) $ seqP [
(6, 50, midiBase),
(6, 42, baseOne),
(12, 42, baseTwo),
(18, 22, baseThree),
(22, 26, baseThree # up 4),
(26, 30, baseThree),
(30, 34, baseThree # up 4),
(34, 42, degradeBy(0.5) baseThree # gain 0.8),
(42, 46, degradeBy(0.5) baseThree # gain 0.65),
(46, 50, degradeBy(0.5) baseThree # gain 0.45)
];
d4 $ qtrigger $ filterWhen (>=0) $ seqP [
(42, 58, buildHigh),
(46, 58, buildMidOne # gain 1.1),
(50, 58, buildMidTwo),
(50, 60, fast 6 midiBuild),
(50, 58, buildLow),
(58, 59, explosion)
];
d5 $ qtrigger $ filterWhen (>=0) $ seqP [
(60, 62, mainHigh),
(60, 86, midiEnd),
(60, 86, midiMain),
(60, 86, midiSlow),
(62, 84, mainMid)
];
d6 $ qtrigger $ filterWhen (>=0) $ seqP [
(68, 76, baseOne # gain 0.5),
(68, 80, baseTwo # gain 0.5),
(68, 68, baseThree # gain 0.5),
(76, 86, midiEnd),
(76, 78, slow 2 endBeep),
(78, 82, degradeBy(0.7) $ slow 2 endBeep # gain 0.6),
(82, 86, degradeBy(0.5) $ slow 3 endBeep # gain 0.5)
]
}
playMusic
hush
<Hydra Code>
s0.initVideo("/Users/mayalee/Desktop/Spring\ 2024/Live\ Coding/classPerformance/composition/runningVideo.mp4")
src(s0)
.out(o0)
render(o0)
src(s0)
.add(
osc(200,1,0.9)
.saturate(()=>cc[0])
.modulate(noise(()=>Math.sin(cc[1] / 100 * time) * 2 + 1))
.add(shape(30).scale(()=>cc[2]*20).rotate(2))
)
.out(o0)
render(o0)
osc(200,1,0.9)
.rotate(1, 0.1)
.saturate (()=>cc[0]*5)
.modulate(noise(()=>Math.sin(0.01 * time) * 2 + 1))
.add(shape(30).scale(2.5).rotate(2))
.out(o0)
osc(0.001, 900, 0.8)
.diff(o0)
.scale(()=>cc[1] /3000 - 100)
.modulate(o1, 0.1)
.out(o2)
render(o2)
osc()
.shift(0.1,0.9,0.3)
.out(o2)
render(o2)
osc(200,1,0.9)
.rotate(1, 0.1)
.saturate (1)
.modulate(noise(()=>Math.sin(0.001 * time) * 2 + 1))
.add(shape(30).scale(2.5).rotate(2))
.out(o2)
osc(0.001, 900, 0.8)
.diff(o2)
.rotate(()=>Math.sin(0.1 * time) * 2 + 1, ()=>cc[3] / 10)
.scale(0.3)
.modulate(o1, 0.1)
.out(o1)
render(o1)
hush()
<Future Improvements>
When I started working on the visuals, I actually thought it would be a good idea to have the beat of the visuals a bit off from the music to create that psycho mood. Looking at the end result, I’m not sure if it was implemented in the way I intended. I think the idea was okay, but making something off in a harmonized way was not such an easy job. I also think there could’ve been more filler visuals. I think there’s a part or two where the visuals are repetitive for a while- making more visuals for these parts, I think, would have made it more intense to watch.