Strudelify

Kid Gloves

Rush

KeyD majorTempo190 bpm
0:00/0:00
// Kid Gloves — Rush
// 190 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (5/4 at bar 1, 4/4 at bar 15, 5/4 at bar 46, 4/4 at bar 61, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(190/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// chords · distortion guitar · "Guitar"
const distortion_guitar = note(`<
  ~@15 A B C D E F G H E I J@2 ~@3 K L M N O L M N P L M N O L M N ~@15 A B C D E F G H E I J@2 ~@3 K L M N O L M N P L
  M N O L M N P Q R S O Q R S P T U@3 V
>`.pickRestart({
  A: "[b3,d4,g4]", B: "[b3,d4,f#4]", C: "[a3,c#4,e4]", D: "[f#4,a4,d5]!2 ~@2 [e4,a4,c#5]!2 ~@2",
  E: "[b3,d4,g4]@3 [b3,d4,g4]@5", F: "[b3,d4,f#4]@3 [b3,d4,f#4]@5", G: "[c#4,e4,a4]@2 [c#4,e4,a4]!2 ~@2 [c#4,e4,a4]!2",
  H: "~@2 [b3,e4,a4]!2 ~@2 [b3,e4,a4]@2", I: "f#3 b3 d4 f#4@5", J: "[c#4,e4,a4]!2 ~@2 [c#4,e4,a4]!2 ~@2",
  K: "[c#4,e4,a4]!2", L: "~ [b3,e4]", M: "~ [a#3,b3,e4]", N: "~ [a3,b3,e4]", O: "[a3,d4] [c#4,f#4]",
  P: "[c#4,f#4] [a3,d4]", Q: "~@2 [b3,e4]!2 ~@2 [b3,e4]!2", R: "~@2 [a#3,b3,e4]!2 ~@2 [a#3,b3,e4]!2",
  S: "~@2 [a3,b3,e4]!2 ~@2 [a3,b3,e4]!2", T: "[e3,b3,e4]",
  U: "[[e3,b3,e4]!2 [e3,b3,e4]@3 [e3,b3,e4]!2 [e3,b3,e4]@3 [e3,b3,e4]@2]/3", V: "[e3,b3,e4] ~@3",
})).s("gm_distortion_guitar").gain(0.28).pan(0.3)

// bass · distortion guitar · "Guitar Bass"
const bass = note(`<
  A B C D E A B C D E A B C D E ~@12 F G H ~@16 A B C D E A B C D E A B C D E ~@12 F G H ~@30
>`.pickRestart({
  A: "g2 d3 f#3 d3", B: "e3 a2 d3 e3", C: "d3 b2 g2 d3", D: "f#3 d3 e3 a2", E: "d3 e3 d3 a3", F: "g2 d3 f#3 e3",
  G: "b2 d3 e3 f#3", H: "a2 d3 e3 a3",
})).s("gm_distortion_guitar").gain(0.4).pan(0.3)

// chords · pad poly · "Synth"
const pad_poly = note(`<
  ~@31 A B C D A B C E A B C D A B C ~@31 A B C D A B C E A B C D A B C E ~@8 F ~@4
>`.pickRestart({
  A: "~ [b3,e4]", B: "~ [a#3,b3,e4]", C: "~ [a3,b3]", D: "[a3,d4] [c#4,f#4]", E: "[c#4,f#4] [a3,d4]", F: "[e3,b3,e4]",
})).s("gm_pad_poly").gain(0.32).pan(1)

// bass · lead 8 bass lead · "Synth Bass"
const bass_2 = note(`<
  ~@31 A B C D A B C E A B C D A B C ~@31 A B C D A B C E A B C D A B C E F G H D F G H E A ~@4
>`.pickRestart({
  A: "[e1,e2]", B: "[f#1,f#2]", C: "[a1,a2]", D: "[d2,d3] [f#2,f#3]", E: "[f#2,f#3] [d2,d3]", F: "e2", G: "f#2",
  H: "a2",
})).s("gm_lead_8_bass_lead").gain(0.5).pan(1)

// bass · electric bass finger · "Bass"
const bass_3 = note(`<
  A B@4 A B@4 A B@4 C D E F C D G H C D I J K L M N O P Q R O P Q S O P Q R O P Q A B@4 A B@4 A B@4 C D E F C D G H C D
  I J K L M N O P Q R O P Q S O P Q R O P Q S O P Q R O P Q S O T@3 U
>`.pickRestart({
  A: "d2@3 d2@5", B: "[d2@2 e2@3 e2@5 e2@2 g1@3 g1@5 g1@2 a1@3 a1@5 a1@2]/4", C: "g1@3 g1@2 g1 g1@2",
  D: "b1@3 b1@2 b1 b1@2", E: "a1@3 a1@2 a1 a1@2", F: "a2!2 ~@2 a1!2 ~@2", G: "a1!2 a2 f#2@2 f#2 e2!2",
  H: "d2!2 e2 d2@2 d2 c#2 a1", I: "a1!2 e2 c#2@3 b1@2", J: "c#2@2 d2 c#2@3 b1 a1", K: "g1@3 g1@3 g1@2",
  L: "b1@3 b1@3 b1@2", M: "a1@3 a1@3 a1@2", N: "a2", O: "[e1,e2]", P: "[f#1,f#2]", Q: "[a1,a2]", R: "[d2,d3] [f#2,f#3]",
  S: "[f#2,f#3] [d2,d3]", T: "[[e1,e2]!2 [e1,e2]@3 [e1,e2]!2 [e1,e2]@3 [e1,e2]@2]/3", U: "[e1,e2] ~@3",
})).s("gm_electric_bass_finger").gain(0.8).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  A B ~ C D A B ~ C D A B ~ C D A@3 ~ A@19 ~ A@8 B ~ C D A B ~ C E A B ~ C D A@3 ~ A@19 ~ A@7 F A C A B G H ~@3 I J ~@2
>`.pickRestart({
  A: "~ x", B: "~@3 x", C: "x", D: "~ x ~@2", E: "~@2 x!5 ~@9", F: "~ x ~ x", G: "~@4 x!2 ~@2", H: "x!2 ~@6",
  I: "x!3 ~", J: "~ x!3",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  A B C D E A B C D F A B C D E A@3 G A@11 H A@7 ~ A@8 B C D E A B C D E A B C D E A@3 G A@11 H A@7 ~ A@6 I J K@3 B K@2
  L M ~@3 N O
>`.pickRestart({
  A: "~ x ~ x", B: "x!2", C: "x!2 ~ x", D: "~ x!2 ~", E: "x ~ x!2", F: "x ~ x!3 ~@3 x ~@3 x ~@3", G: "x!2 ~@2 x!2 ~@2",
  H: "~@4 x ~@9 x!2", I: "~ x ~@2", J: "~ x", K: "~@2 x!2 ~@2 x!2", L: "~@4 x!3 ~@5 x!3 ~", M: "x ~@7 x ~@2 x!5",
  N: "~@8 x ~@3 x!4", O: "x",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@5 A ~@8 B ~@11 B ~@3 C ~@7 D ~@12 A ~@8 B ~@11 B ~@3 C ~@7 D ~@6 E ~@14
>`.pickRestart({
  A: "~@9 x ~@6", B: "~@15 x", C: "~@13 x ~@2", D: "~@12 x!2 ~ x", E: "~@14 x!2",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  A@18 B A@11 C A@4 D A@2 ~ A@12 E A@12 B A@11 C ~@8 F ~@6 A@2 G H I J I J@2 ~ K L ~@2
>`.pickRestart({
  A: "x!8", B: "x!2 ~@2 x!2 ~@2", C: "x!5 ~@3", D: "~ x ~@2", E: "x!5 ~ x!2", F: "~@7 x", G: "x!5 ~ x ~",
  H: "x ~ x ~ x ~ x!2", I: "x ~ x!6", J: "x!4", K: "x!3 ~", L: "~ x!3",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@5 A ~@8 B ~@11 C ~@3 D ~@7 E ~@6 F ~@5 G ~@8 B ~@11 C ~@3 D ~@7 E ~@6 H ~@14
>`.pickRestart({
  A: "~@7 x!2 ~@7", B: "~@13 x!2 ~", C: "~@11 x ~ x ~@2", D: "~@11 x!2 ~@3", E: "~@3 x ~@4 x!2 ~ x ~@4", F: "~@15 x",
  G: "~@7 x ~@8", H: "~@13 x ~@2",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@39 A ~@45 A ~@8 B C D E D E@2 ~@5>".pickRestart({
  A: "~@15 x", B: "~@5 x ~ x", C: "~ x ~ x ~ x ~@2", D: "~ x ~@6", E: "~ x ~ x ~ x ~ x",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@5 A ~@8 B ~@11 C ~@3 D ~@7 E ~@6 F ~@5 G ~@8 B ~@11 C ~@3 D ~@7 E ~@6 H ~@14
>`.pickRestart({
  A: "~@5 x!2 ~@9", B: "~@9 x ~ x ~@4", C: "~@5 x!3", D: "~@9 x!2 ~@5", E: "x!3 ~ x!2 ~ x ~@8", F: "~@11 x ~ x ~@2",
  G: "~@5 x ~@10", H: "~@11 x!2 ~@3",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@5 A ~@3 B ~@5 C ~@2 D ~@11 E C@3 F C@2 ~@2 C@3 F C@2 G ~@5 A ~@7 D ~ C ~@2 D ~@11 E C@3 F C@2 ~@2 C@3 F C@3 ~@8 F C
  ~@4
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@5 x ~@10", C: "x", D: "~@7 x", E: "~@15 x", F: "x!2", G: "x ~@6 x",
})).gain(0.8)

// drums · ride
const ride = s("rd").struct("<~@35 A ~@41 B@4 C B@2 ~ B@6 D ~@14>".pickRestart({
  A: "x ~@2 x!2 ~ x ~@2 x!2 ~ x ~ x!2", B: "x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2", C: "x ~ x!3 ~ x ~ x!3 ~ x ~ x!2",
  D: "x ~ x!2 ~@2 x ~ x!2 ~@6",
})).gain(0.8)

stack(
  distortion_guitar, bass, pad_poly, bass_2, bass_3, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash,
  ride
)

More by Rush