Examples / Songs / Genres

Last Train

late-night 2-step garage · G minor · 130 BPM · 28-bar arrangement

Demos/Songs/genres/2-step-garage/last-train.strudel

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

// Last Train — late-night 2-step garage · G minor · 130 BPM · 28-bar arrangement
setbpm(130);

"<intro verse build drop breakdown drop outro>".slow(4).pickRestart({
  intro: stack(
    s("bd ~ ~ ~ ~ ~ ~ ~ ~ ~ bd ~ ~ ~ ~ ~").lpf(720).gain(0.54),
    s("~ hh ~ hh ~ hh ~ hh ~ hh ~ hh ~ hh ~ hh")
      .late(0.018).hpf(5200).gain(0.1).pan(0.62),
    note("<g1 d2 a#1 f1>").s("sine").release(0.7).gain(0.34),
    note("<[g3,a#3,d4,f4] [c4,d#4,g4,a#4] [d4,f4,a4,c5] [c4,d#4,g4,a#4]>")
      .struct("~ 1 ~ ~").s("gm_epiano1").release(0.24).room(0.38).gain(0.2).pan(0.4)
  ),
  verse: stack(
    s("bd ~ ~ ~ ~ ~ bd ~ ~ ~ bd ~ ~ ~ ~ ~, ~ ~ ~ ~ sd ~ ~ ~ ~ ~ ~ ~ sd ~ ~ ~")
      .gain(0.67),
    s("~ hh ~ hh ~ hh ~ hh ~ hh ~ hh ~ hh ~ hh")
      .late(0.018).hpf(5400).gain(0.15).pan(0.62),
    note("<[g1 ~ g1 d2] [d2 ~ a#1 d2] [a#1 ~ f1 a#1] [f1 ~ c2 d2]>")
      .s("sine").release(0.3).gain(0.4),
    note("<[g3,a#3,d4,f4] [c4,d#4,g4,a#4] [d4,f4,a4,c5] [c4,d#4,g4,a#4]>")
      .struct("~ 1 ~ 1").s("gm_epiano1").release(0.16).hpf(260).room(0.28).gain(0.24).pan(0.4)
  ),
  build: stack(
    s("bd ~ ~ ~ ~ ~ bd ~ ~ ~ bd ~ ~ ~ ~ ~, ~ ~ ~ ~ sd ~ ~ ~ ~ ~ ~ ~ sd ~ sd sd")
      .gain(0.69),
    s("hh*16").late(0.012).hpf(5800).gain("[0.13 0.07]*8").pan(0.62),
    note("<[g1 ~ g1 d2] [d2 ~ a#1 d2] [a#1 ~ f1 a#1] [f1 ~ c2 d2]>")
      .s("sine").release(0.28).gain(0.4),
    note("<[g3,a#3,d4,f4] [c4,d#4,g4,a#4] [d4,f4,a4,c5] [c4,d#4,g4,a#4]>")
      .struct("~ 1 ~ 1").s("gm_epiano1").release(0.14).hpf(280).room(0.25).gain(0.25).pan(0.4),
    note("<d5 ~ g5 ~ f5 ~ d5 ~>").s("wt_pluck").delay(0.22).delaytime(0.375).gain(0.13).pan(0.7)
  ),
  drop: stack(
    s("bd ~ ~ ~ ~ ~ bd ~ ~ ~ bd ~ ~ bd ~ ~, ~ ~ ~ ~ sd ~ ~ ~ ~ ~ ~ ~ sd ~ ~ ~")
      .gain(0.72),
    s("hh*16, ~ ~ ~ oh ~ ~ ~ oh").late(0.012).hpf(5400).gain(0.16).pan(0.6),
    note("<[g1 ~ g1 d2] [d2 ~ a#1 f2] [a#1 ~ f1 c2] [f1 ~ c2 d2]>")
      .s("sine").release(0.26).gain(0.42),
    note("<[g3,a#3,d4,f4] [c4,d#4,g4,a#4] [d4,f4,a4,c5] [c4,d#4,g4,a#4]>")
      .struct("~ 1 ~ 1").s("gm_epiano1").release(0.14).hpf(300).room(0.28).gain(0.25).pan(0.38),
    note("<[d5 ~ g5 ~] [f5 ~ d5 ~] [a#4 ~ d5 ~] [c5 ~ d5 ~]>")
      .s("wt_pluck").delay(0.2).delaytime(0.375).room(0.28).gain(0.15).pan(0.72)
  ),
  breakdown: stack(
    s("bd ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~").lpf(580).room(0.4).gain(0.45),
    note("<g1 d2 a#1 f1>").s("sine").attack(0.04).release(0.9).gain(0.34),
    note("<[g3,a#3,d4] [c4,d#4,g4] [d4,f4,a4] [c4,d#4,g4]>")
      .s("wt_pad").attack(0.7).release(1.4).lpf(1100).room(0.62).gain(0.19).pan(0.42)
  ),
  outro: stack(
    s("bd ~ ~ ~ ~ ~ bd ~ ~ ~ bd ~ ~ ~ ~ ~").lpf(isaw.range(500, 1000).slow(4)).gain(0.5),
    s("~ hh ~ hh ~ hh ~ hh ~ hh ~ hh ~ hh ~ hh")
      .late(0.018).hpf(5200).gain(0.09).pan(0.62),
    note("<g1 d2 a#1 f1>").s("sine").release(0.7).gain(0.3),
    note("<[g3,a#3,d4,f4] [c4,d#4,g4,a#4] [d4,f4,a4,c5] [c4,d#4,g4,a#4]>")
      .struct("~ 1 ~ ~").s("gm_epiano1").release(0.22).room(0.42).gain(0.17).pan(0.4)
  )
})