<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.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>