For my composition project, ‘BeachMind’, I wanted to recreate Abu Dhabi spring, beaches, sun and all in a bouncy sonic experience. I wanted to keep the track minimal, bringing in and dropping out elements based on the progression of the song. The visuals are surpposed to evoke a 90s SEGA-esque ocean with flittering lights. The song itself builds on sunny house music chords. I added some embellishments in the form of a sharp laser beam sample and hoot that adds to the atmospheric track.

The structure I followed is a twist on a very basic (ABACAB) formula of A -> B -> B’ -> AB -> AB’-> C: here I tried to bring in elements from other sections and join them together in ways to make it feel like the track was always active and alive. There was even a moment in my performance where I felt like re-editing the outro to drop out some of the percussion was something that the track needed. I think this was the most enjoyable part of the experience for me; to fully dissolve into the world of this track and listen to what it feels like and respond to it live rather than having a set structure in mind.

Tidal code:

setcps (130/60/4)

d1 $ s "bd*4"

let intro = do
      xfadeIn 1 4 $ stack [
        s "bd*4",
        s "~ cp ~ cp",
        s "[~ ho]*4"
        ]
      xfadeIn 2 8 $ jux (rev . (|+ n 12))
        $ every 4 (struct "t(5,8)")
        $ struct "~ t ~ t t ~ ~ t"
        $ n "<c'maj7 g'maj7 c'maj7 c'maj7>"
        # s "superpiano"
        # velocity (range 0.4 0.6 $ slow 2 sine)
        # sustain 2
        # lpf (range 800 4000 $ slow 4 sine)
        # room 0.85 # sz 0.85
        # delay 0.4 # delayt (3/16) # delayfb 0.5
        # orbit 1
      d3 $ s "<~ [~ [rave:7 rave:7]]>"
        # speed 1.2
        # gain (range 0.2 0.6 $ slow 8 sine)
        # orbit 2
      xfadeIn 4 4 $ struct "t ~ ~ t ~ t ~ ~"
        $ n "<c2 g1 f1 c2>"
        # s "superfm"
        # sustain 0.6
        # lpf (range 200 600 $ slow 4 sine)
        # lpq 0.1
        # shape 0.15
        # orbit 2
      d6 $ stack [
        ccv "<10 20 30 40>",
        ccv "<10 15 20 25>" # ccn 2
        ] # s "midi"

let rise = do
      d2 $ stack [
        every 3 (fast 2) $ struct "~ t ~ t t ~ ~ t"
          $ n "<c'maj7 g'maj7 c'maj7 <a'maj7 a'maj7 a'maj7 c'maj7>>"
          # s "superpiano"
          # velocity (range 0.4 0.6 $ slow 2 sine)
          # sustain 2
          # lpf (range 800 4000 $ slow 4 sine)
          # room 0.85 # sz 0.85
          # delay 0.4 # delayt (3/16) # delayfb 0.5,
        n "<c'maj7 g'maj7 c'maj7 <a'maj7 a'maj7 a'maj7 c'maj7>>"
          # s "superfm"
          # sustain 0.25
          # lpf (range 1500 8000 $ slow 4 sine)
          # lpq 0.2
          # gain 0.5
          # room 0.7 # sz 0.8
        ] # orbit 1
      d5 $ s "<[~ ~ hit:2 hit:2]>"
        # speed 1
        # gain 0.5
        # room 0.4 # sz 0.5
        # orbit 3
      d6 $ stack [
        ccv "<40 60 80 100 110 120 125 127>",
        ccv "<30 50 70 90 100 110 115 120>" # ccn 2
        ] # s "midi"

let drop = do
      d1 $ s "<bd*4 [bd*4, sn*4] [sn*8] [sn*16] [bd:3, crash] ~ ~ ~>"
        # orbit 2
      d2 $ jux (rev . (|+ n 12))
        $ struct "<[~ t ~ t t ~ ~ t] [~ ~ t ~ t t ~ t] [t ~ ~ t ~ t ~ t] [~ t t ~ ~ [t t] ~ ~]>"
        $ n "<c'maj7 a'min7 f'maj7 g'dom7>"
        # s "superpiano"
        # velocity (range 0.5 0.9 $ slow 4 saw)
        # sustain 0.4
        # lpf (range 300 8000 $ slow 4 saw)
        # room 0.5 # sz 0.6
        # delay 0.3 # delayt (3/16) # delayfb 0.4
        # orbit 1
      d3 $ s "<~ ~ hit*8 hit*16 ~ ~ ~ ~>"
        # n 2
        # speed (range 1 4 $ slow 4 saw)
        # gain (range 0 0.8 $ slow 4 saw)
        # pan (fast 2 $ range 0 1 saw)
        # orbit 1
      d4 silence
      d5 silence
      d6 $ stack [
        ccv "<40 70 100 127 0 0 0 0>",
        ccv "<40 70 100 127 0 0 0 0>" # ccn 2,
        ccv "<0 0 0 0 127 0 0 0>" # ccn 3
        ] # s "midi"

let backintro = do
      d1 $ stack [
        s "bd*4",
        s "~ cp ~ cp",
        s "[~ ho]*4"
        ]
      d2 $ jux (rev . (|+ n 12))
        $ struct "<[~ t ~ t t ~ ~ t] [~ ~ t ~ t t ~ t] [t ~ ~ t ~ t ~ t] [~ t t ~ ~ [t t] ~ ~]>"
        $ n "<c'maj7 a'min7 f'maj7 g'dom7>"
        # s "superpiano"
        # velocity (range 0.5 0.9 $ slow 4 saw)
        # sustain 0.4
        # lpf (range 300 8000 $ slow 4 saw)
        # room 0.5 # sz 0.6
        # delay 0.3 # delayt (3/16) # delayfb 0.4
        # orbit 1
      d3 $ s "<~ [~ [rave:7 rave:7]]>"
        # speed 1.2
        # gain (range 0.2 0.6 $ slow 8 sine)
        # orbit 2
      d4 $ struct "t ~ ~ t ~ t ~ ~"
        $ n "<c2 g1 f1 c2>"
        # s "superfm"
        # sustain 0.6
        # lpf (range 200 600 $ slow 4 sine)
        # lpq 0.1
        # shape 0.15
        # orbit 2
      d6 $ stack [
        ccv "80 40 100 60" # ccn 2
        ] # s "midi"

let outro = do
      d1 $ s "bd*4"
        # orbit 1
      d3 silence
      d4 silence
      d6 $ stack [
        ccv "<40 30 20 10>",
        ccv "<30 20 10 0>" # ccn 2
        ] # s "midi"


d1 silence

d3 silence

intro

rise

drop

backintro

outro

hush

Hydra code:

voronoi(6, 0.04)
  .modulate(noise(3, 0.1), () => 0.2 + (cc[1] * 0.6))
  .color(0.05, 0.2, 0.7)
  .add(voronoi(12, 0.06).modulate(noise(4, 0.12), 0.2).color(0, 0.7, 1), 0.4)
  .add(osc(40, 0.01, 1).color(0.1, 0.8, 1).mult(noise(4, 0.1)), 0.5)
  .modulateScrollX(osc(2, 0.01), 0.1)
  .add(
    shape(72, 0.02, 0.8)
      .color(1, 0.8, 0.2)
      .repeat(5, 3)
      .modulate(noise(2, 0.05), 0.2)
      .scrollY(() => Math.sin(time * 0.5) * 0.05)
      .scrollX(0, () => -0.03 - (cc[2] * 0.1)),
    0.8
  )
  .add(
    osc(10, 0.1, 2).modulate(noise(2)).scrollY(-0.25).color(1, 0.2, 0.6)
      .thresh(() => 0.8 - (cc[2] * 0.4)),
    () => cc[2] * 0.8
  )
  .add(
    osc(15, 0.05, 2)
      .modulate(noise(4, 0.1), () => 0.2 + (cc[1] * 3))
      .thresh(() => 0.8 - (cc[1] * 0.3), 0.1)
      .color(1, 1, 1)
      .scrollX(() => time * -0.05 - (cc[2] * 0.2)),
    () => 0.1 + (cc[1] * 1.5)
  )
  .add(solid(1, 1, 1), () => cc[3])
  .pixelate(256, 224)
  .out(o0)

  hush()