Strudelify

Rule the World

Duke Robillard

KeyD majorTempo57 bpm
0:00/0:00
// Rule the World — Duke Robillard
// 57 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 66 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(57/4)

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

// bass · acoustic bass · "ACOU BASS"
const bass = note("<A@10 B C D A@6 B C D E@3 B C D F@7 A@4 B C D A@4 B C D B C D G H B C D A@7 I ~>".pickRestart({
  A: "d2 ~ d2!2 ~ d2!2 ~ d2!2 ~ d2!2 ~ d2!2 ~ d2!2 ~ d2!2 ~ d2",
  B: "e2 ~ e2!2 ~ e2!2 ~ e2!2 ~ e2 f#2 ~ f#2!2 ~ f#2!2 ~ f#2!2 ~ f#2",
  C: "g2 ~ g2!2 ~ g2!2 ~ g2!2 ~ g2 f#2 ~ f#2!2 ~ f#2!2 ~ f#2!2 ~ f#2",
  D: "e2 ~ e2!2 ~ e2 f#2 ~ f#2!2 ~ f#2 g2 ~ g2!2 ~ g2 a2 ~ a2!2 ~ a2",
  E: "g1 ~ g1!2 ~ g1!2 ~ g1!2 ~ g1 d2 ~ d2!2 ~ d2 a1 ~ a1!2 ~ a1",
  F: "[g1@10 ~ d2@5 ~ a1@5 ~ g1@12 d2@5 ~ a1@5 ~ g1@12 d2@5 ~ a1@5 ~ g1@11 ~ d2@5 ~ a1@5 ~ b1@11 ~ c2@11 ~ b1@10 ~@2 c2@11 ~ g1@11 ~ a1@12 ~]/7",
  G: "g1@11 ~@2 d2 ~ d2@3 ~ a1 ~ a1 ~@2", H: "g1@11 ~@2 d2 ~ d2@3 ~ a1 ~ a1@2 ~", I: "d2 ~ d2!2 ~ d2@19",
})).s("gm_acoustic_bass").gain(0.48)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A@2 B@8 C D E F@2 B@4 C D E G@2 H C D E I@7 B@4 C D E B@4 C D E C D E J@2 C D E K B F@5 L ~
>`.pickRestart({
  A: "d4 ~ d4!2 ~ d4!2 ~ d4!2 ~ d4!2 ~ d4!2 ~ d4!2 ~ d4!2 ~ d4", B: "[d4,a4,c#5]@3 ~@2 [d4,g4,b4]@18 ~",
  C: "[e4,g4,b4]@10 ~@2 [f#4,a4,c#5]@11 ~", D: "[g4,b4,d5]@11 ~ [f#4,a4,c#5]@11 ~",
  E: "[e4,g4,b4]@5 ~ [f#4,a4,c#5]@5 ~ [g4,b4,d5]@5 ~ [a4,c#5,e5]@5 ~", F: "[d4,a4,c#5]@4 ~ [d4,g4,b4]@18 ~",
  G: "[g4,b4,d5]@12 ~ [d4,f#4,a4] ~ [d4,f#4,a4]@3 ~ [a3,c#4,e4] ~ [c#4,e4]@2 ~, ~@21 a3 ~@2", // G D A C#m
  H: "[g4,b4,d5]@12 ~ [d4,f#4,a4] ~ [d4,f#4,a4]@2 ~@2 [a3,c#4,e4] ~ [a3,c#4,e4]@2 ~", // G D A
  I: "[g2@10 ~ d3@6 a2@6 g2@12 d3@6 a2@6 g2@12 d3@6 a2@6 g2@11 ~ d3@5 ~ a2@5 ~ b2@12 c3@12 b2@11 ~ c3@12 g2@11 ~ a2@12 ~, a5@13 ~@11]/7",
  J: "[g2@11 ~@2 d3 ~ d3@3 ~ a2 ~ a2@2 ~@2 g2@11 ~ d3 ~ d3@3 ~ a2 ~ a2@2 ~, a5@15 ~]/2",
  K: "~ a4@3 ~ [d4,g4,b4]@17 ~@2, [d4,c#5] ~@5", L: "[d4,a4,c#5]@4 ~ [d4,g4,b4]@19",
})).s("gm_epiano2").gain(0.5)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  A@2 B C@3 B C@3 D E F C@2 B C@3 D E F G@3 D E F ~@3 H@4 B C@3 D E F B C@3 D E F D E F A@2 D E F C@8 ~
>`.pickRestart({
  A: "f#4 a4 f#4 b4 f#4 a4 f#4 a4 f#4 b4 f#4 a4 f#4 a4 f#4 b4 f#4 a4 f#4 a4 f#4 b4 f#4 a4",
  B: "[a3,c#4]@5 [d3,g3,b3]@19", C: "[d3,a3,c#4]@5 [d3,g3,b3]@19", D: "[b2,e3,g3] [c#3,f#3,a3]",
  E: "[d3,g3,b3] [c#3,f#3,a3]", F: "[b2,e3,g3] [c#3,f#3,a3] [d3,g3,b3] [e3,a3,c#4]",
  G: "[g3,b3,d4]@13 [a3,d4,f#4]@2 [a3,d4,f#4]@4 [a3,c#4,e4]@2 [a3,c#4,e4]@3", // G D A
  H: "[~@21 a4@2 d5@4 c#5@2 b4@4 a4@2 f#4@3 g4 a4@2 d4@4 a4@2 d5@4 c#5@2 b4@4 a4@2 f#4@3 g4 a4@2 d4@4 a4@2 d5@4 c#5@2 b4@4 a4@2 f#4@3 g4 a4@2 d4@7]/4",
})).s("gm_acoustic_guitar_nylon").gain(0.6)

// drums · kick
const kick = s("bd").struct(`<
  [x ~ x!2 ~ x!2 ~ x!5 ~ x!2 ~ x!2 ~ x!4]!2
  [x ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x]!62
  [x ~ x ~@2 x ~@18]
  ~
>`).gain(0.57)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B@7 C B@2 D B@5 C B@2 D B@5 C B@6 D B@6 D B@2 D B@7 C B@2 D B@2 D B E B@2 D F ~
>`.pickRestart({
  A: "~@20 x!4", B: "~ x ~ x ~ x ~ x", C: "~@3 x ~@5 x ~@5 x ~@2 x ~@2 x!3", D: "~@3 x ~@5 x ~@5 x ~@5 x!3",
  E: "~@3 x ~@5 x ~@2 x!2 ~@4 x!2 ~ x!3", F: "~@3 x ~ x ~@18",
})).gain(0.57)

// drums · hihat
const hihat = s("hh").struct("<[~ x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~ x!3]!2 [x!24]!62 [x!6 ~@18] ~>").gain(0.17)

// drums · crash
const crash = s("cr").struct(`<
  ~@10 A ~ A ~@6 A ~ A@2 ~ A ~@9 A@2 ~@3 A ~ A@2 ~ A@2 ~@7 A ~ A@2 ~ A@2 ~ A ~ A B ~
>`.pickRestart({
  A: "x", B: "x ~@4 x ~@18",
})).gain(0.57)

stack(bass, epiano2, acoustic_guitar_nylon, kick, snare, hihat, crash)