Strudelify

Hub Drum track song

Jofo1231

KeyG minorTempo170 bpm
0:00/0:00
// Hub Drum track song — Jofo1231
// 170 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5900014; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(170/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · epiano1 · "Electric Piano"
const epiano1 = note(`<
  ~@3 A B ~@2 C D ~@2 E F ~@2 G B H F I J K L M B ~@2 C D ~@2 E F ~@2 G B H F I J K L M B ~@2 C D ~@2 E F ~@2 G B H F I
  J K L M B ~@2 C D ~@2 E F ~@2 G B H F I J K L N O ~
>`.pickRestart({
  A: "~@13 c5 ~ db5", B: "d5", C: "~@13 d5 ~ db5", D: "c5", E: "~@13 c5 ~ bb4", F: "g4", G: "~@13 e5 ~ eb5",
  H: "~@5 bb4 ~ b4 c5@3 bb4 g4@3 f4", I: "~@5 f4 ~ gb4 g4@3 f4 d4@3 c4", J: "d4", K: "~@5 c4 ~ db4 d4@3 f4 g4@3 f4",
  L: "[d4,gb4]", M: "[a4,c5]@8 [gb4,a4]@5 c5 ~ db5", N: "[a4,c5]@8 [gb4,a4]@5 ~@3", O: "[g4,d5] ~@3",
})).s("gm_epiano1").gain(0.3)

// chords · piano
const piano = note(`<
  ~@24 A@4 B@4 A@4 C@2 B@2 A@2 D E A@4 B@4 A@4 C@2 B@2 A@2 D E A@4 B@4 A@4 C@2 B@2 A@2 D F G ~
>`.pickRestart({
  A: "[g4,bb4,d5,f5]!2", B: "[c5,eb5,g5,bb5]!2", C: "[d5,gb5,a5,c6]!2",
  D: "g5 f5 ~ d5 g5 f5 ~ d5 g5 f5 ~ d5 g5 f5 ~ d5", E: "gb5 d5 ~ a4 gb5 d5 ~ a4 gb5 d5 ~ a4 gb5 c5 ~ db5",
  F: "gb5 d5 ~ a4 gb5 d5 ~ a4 gb5 d5 ~ a4 gb5 ~@3", G: "[g4,bb4,d5,f5] ~@3",
})).s("gm_piano").gain(0.3)

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  ~@4 A B A B C D C D A B A E F G C H A B I J A B A B C D C D A B A E F G C H A B I J A B A B C D C D A B A E F G C H A
  B I J A B A B C D C D A B A E F G C H A B I J A K
>`.pickRestart({
  A: "g2@4 ~@3 g2 g3@4 f3@4", B: "d3@4 db3@4 c3@3 bb2 g2@3 f2", C: "c3@4 ~@3 c3 c4@4 bb3@4",
  D: "g3@4 gb3@4 f3@3 eb3 c3@3 bb2", E: "d3@4 db3@4 c3@3 bb2 g2 c3 ~ db3", F: "d3@4 ~@3 d3 d4@4 c4@4",
  G: "a3@4 ab3@4 g3 gb3 ~ f3 eb3 c3 ~ bb2", H: "g3@4 gb3@3 f3 d3 db3 ~ c3 bb2 g2 ~ f2", I: "d2 gb2 a2 c3",
  J: "d3 c3 a2 gb2", K: "g3 d3 g2 ~",
})).s("gm_electric_bass_finger").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A C A B
>`.pickRestart({
  A: "x ~@4 x ~ x ~@4 x ~@3", B: "~ x ~@2", C: "x",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<[~ x]!83 [x!2 ~ x!3 ~ x ~@8] [~ x]!2>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<[x!4]!83 ~ [x!4] [x!3 ~]>").gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@83 [~@13 x ~ x] ~@2>").gain(0.5)

// drums · high tom
const high_tom = s("ht").struct("<~@83 [~@8 x!2 ~ x!2 ~@3] ~@2>").gain(0.5)

// drums · crash
const crash = s("cr").struct("<~@64 [x!2]!19 x!2 [~ x]>").gain(0.5)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<x ~@3 x ~@19 x ~@19 x ~@41>").gain(0.3)

stack(epiano1, piano, bass, kick, snare, hihat, mid_tom, high_tom, crash, crash_soft)