Examples / Songs / Genres

Tidal Memory

deep dub techno · C minor · 120 BPM · 28-bar arrangement

Demos/Songs/genres/dub-techno/tidal-memory.strudel

Play in Cycletron Opens it in the app in your browser, with the visualizers. Desktop browsers only.

// Tidal Memory — deep dub techno · C minor · 120 BPM · 28-bar arrangement
setbpm(120);

"<intro groove lift drop breakdown drop outro>".slow(4).pickRestart({
  intro: stack(
    s("bd*4").bank("RolandTR909").lpf(700).gain(0.6),
    note("<c1 g1 g#1 f1>").s("sine").attack(0.08).release(1.1).gain(0.34),
    note("<[c3,d#3,g3,a#3] [g2,a#2,d3,f3] [g#2,c3,d#3,g3] [f2,g#2,c3,d#3]>")
      .struct("~ 1 ~ ~").s("sawtooth").attack(0.03).release(0.5)
      .lpf(620).delay(0.38).delayfeedback(0.5).room(0.7).gain(0.2).pan(0.62)
  ),
  groove: stack(
    stack(
      s("bd*4").gain(0.72),
      s("[~ hh]*4").hpf(5600).gain(0.14),
      s("~ ~ ~ cp").room(0.25).gain(0.22)
    ).bank("RolandTR909"),
    note("<[c1 ~ c1 g1] [g1 ~ d2 g1] [g#1 ~ d#2 g#1] [f1 ~ c2 g1]>")
      .s("sine").release(0.6).gain(0.38),
    note("<[c3,d#3,g3,a#3] [g2,a#2,d3,f3] [g#2,c3,d#3,g3] [f2,g#2,c3,d#3]>")
      .struct("~ 1 ~ ~").s("sawtooth").release(0.46).lpf(760)
      .delay(0.42).delaytime(0.375).delayfeedback(0.48).room(0.68).gain(0.22).pan(0.62)
  ),
  lift: stack(
    stack(
      s("bd*4").gain(0.74),
      s("hh*8").hpf(5900).gain("[0.14 0.08]*4"),
      s("~ ~ cp ~").room(0.3).gain(0.24)
    ).bank("RolandTR909"),
    s("~ ~ ~ RolandTR909_rd").hpf(4200).gain(0.12),
    note("<[c1 ~ c1 g1] [g1 ~ d2 g1] [g#1 ~ d#2 g#1] [f1 ~ c2 g1]>")
      .s("sine").release(0.6).gain(0.38),
    note("<[c3,d#3,g3,a#3] [g2,a#2,d3,f3] [g#2,c3,d#3,g3] [f2,g#2,c3,d#3]>")
      .struct("~ 1 ~ 1").s("sawtooth").release(0.42)
      .lpf(saw.range(700, 1250).slow(4)).delay(0.42).delayfeedback(0.48).room(0.7).gain(0.22).pan(0.62)
  ),
  drop: stack(
    stack(
      s("bd*4").gain(0.78),
      s("hh*8").hpf(6100).gain("[0.16 0.09]*4"),
      s("~ cp ~ cp").room(0.28).gain(0.25),
      s("~ oh ~ oh").gain(0.18)
    ).bank("RolandTR909"),
    note("<[c1 ~ c1 g1] [g1 ~ d2 g1] [g#1 ~ d#2 c2] [f1 ~ c2 g1]>")
      .s("sine").release(0.55).gain(0.4),
    note("<[c3,d#3,g3,a#3] [g2,a#2,d3,f3] [g#2,c3,d#3,g3] [f2,g#2,c3,d#3]>")
      .struct("~ 1 ~ 1").s("supersaw").release(0.38).lpf(1050)
      .delay(0.38).delaytime(0.375).delayfeedback(0.46).room(0.66).gain(0.2).pan(0.64),
    note("<g4 ~ d#5 ~ f4 ~ c5 ~>").s("wt_bell").delay(0.3).room(0.58).gain(0.11).pan(0.3)
  ),
  breakdown: stack(
    s("bd ~ ~ ~").bank("RolandTR909").lpf(520).room(0.45).gain(0.48),
    note("<c1 g1 g#1 f1>").s("sine").attack(0.1).release(1.4).gain(0.34),
    note("<[c3,d#3,g3] [g2,a#2,d3] [g#2,c3,d#3] [f2,g#2,c3]>")
      .s("wt_pad").attack(0.8).release(1.7).lpf(680).room(0.78).gain(0.18).pan(0.58)
  ),
  outro: stack(
    stack(
      s("bd*4").lpf(isaw.range(450, 1100).slow(4)).gain(0.58),
      s("[~ hh]*4").hpf(5400).gain(0.1)
    ).bank("RolandTR909"),
    note("<c1 g1 g#1 f1>").s("sine").release(0.9).gain(0.32),
    note("<[c3,d#3,g3,a#3] [g2,a#2,d3,f3] [g#2,c3,d#3,g3] [f2,g#2,c3,d#3]>")
      .struct("~ 1 ~ ~").s("sawtooth").release(0.55)
      .lpf(isaw.range(480, 850).slow(4)).delay(0.35).room(0.72).gain(0.18).pan(0.62)
  )
})