Strudelify

The Analog Kid

Rush

KeyA majorTempo190 bpm
0:00/0:00
// The Analog Kid — Rush
// 190 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 185 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 · "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.

// chords · distortion guitar · "Guitar"
const distortion_guitar = note(`<
  A ~ A ~ A ~ A ~@23 A ~ A ~@13 A ~ A ~@33 A ~ A ~@11 A ~ A ~@13 A ~ A ~@33 B@2 C D B@2 C D E@2 D@2 E@2 F@2 G@2 H I G@2
  H J G@2 H I A ~ A ~@6
>`.pickRestart({
  A: "[e4,a4]@3 [e4,a4]@5", B: "[a3,c4,e4]@3 [a3,c4,e4]@5", C: "[c4,d4,g4]@3 [c4,d4,g4]@5",
  D: "[b3,d4,g4]@3 [b3,d4,g4]@5", E: "[a3,c4,f4,g4]@3 [a3,c4,f4,g4]@5",
  F: "[[b3,d4,g4]@3 [b3,d4,g4]@3 [b3,d4,g4]@3 [b3,d4,g4]@3 [b3,d4,g4]@2 [b3,d4,g4]@2]/2", G: "[c4,e4,a4]/2",
  H: "[d4,g4,c5]", I: "[d4,g4,b4] g4", J: "[d4,g4,b4]",
})).s("gm_distortion_guitar").gain(0.28).pan(0.3)

// chords · distortion guitar · "Guitar Bass"
const distortion_guitar_2 = note(`<
  A B A B A B A B C@6 D@6 E@6 F@4 A B A B G@8 E@4 A B A B ~@32 A B A B E@6 F@4 A B A B G@8 E@4 A B A B ~@60 A B A B H@4
  ~
>`.pickRestart({
  A: "[e2,a2]@3 [e2,a2]@5", B: "d3 e3 ~ f#3 a3 g3 ~ e3 b3 a3 ~ g3 f#3 e3 ~ d3",
  C: "[[f#3,b3]@3 [f#3,b3]@3 [f#3,b3]@4 [b3,e4]@2 [b3,e4]@2 [b3,e4]@2]/2", // B5 E5
  D: "[[c#3,f#3]@3 [c#3,f#3]@3 [c#3,f#3]@4 [f#3,b3]@2 [f#3,b3]@2 [f#3,b3]@2]/2", // F#5 B5
  E: "[[d3,g3]@3 [d3,g3]@3 [d3,g3]@4 [g3,c4]@2 [g3,c4]@2 [g3,c4]@2]/2", // G5 C5
  F: "[[b2,e3]@3 [b2,e3]@3 [b2,e3]@4 [e3,a3]@2 [e3,a3]@2 [e3,a3]@2]/2", // E5 A5
  G: "[[e3,a3]@3 [e3,a3]@3 [e3,a3]@4 [a3,d4]@2 [a3,d4]@2 [a3,d4]@2]/2", H: "[a1,e2,a2]/4",
})).s("gm_distortion_guitar").gain(0.4).pan(0.3)

// chords · pad poly · "Synth"
const pad_poly = note(`<
  ~@50 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@34 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2
  B@2 A@2 B@2 A@2 B@2 ~@16 C@2 D E C@2 D F C@2 D E ~@7 G@2
>`.pickRestart({
  A: "[c4,d4,g4,a4,c5]/2", B: "[d4,g4,b4,c5]/2", C: "[c4,e4,a4]/2", D: "[d4,g4,c5]", E: "[d4,g4,b4] g4",
  F: "[d4,g4,b4]", G: "[~@7 a2@9]/2",
})).s("gm_pad_poly").gain(0.32).pan(1)

// bass · lead 8 bass lead · "Synth Bass"
const bass = note(`<
  A ~ A ~ A ~ A ~@23 A ~ A ~@13 A ~ A ~ B C D E B C D E B C D E B C D E B C D E B C D E F@8 A ~ A ~@11 A ~ A ~@13 A ~ A
  ~ B C D E B C D E B C D E B C D E B C D E B C D E F@6 G@2 ~@28 A ~ A ~ H@4 ~
>`.pickRestart({
  A: "[e2,a2]@3 [e2,a2]@5", B: "f1", C: "[f2,f3]", D: "g1", E: "[g2,g3]", F: "f1@3 f1 f1@2 f1@2",
  G: "[f1@3 f1 f1@2 f1@3 f1@3 f1@2 f1@2]/2", H: "[a2 a2 a2 a2, [a1,e2]]/4",
})).s("gm_lead_8_bass_lead").gain(0.5).pan(1)

// bass · electric bass finger · "Bass"
const bass_2 = note(`<
  A B A B A B A B C D E F G H I J K L M N O P O Q R S T U T V A B A B W@2 X Y Z AA AB AC O P AD@2 A B A B AE AF AG AH AE
  AF AG AH AE AF AG AH AE AF AG AH AE AF AG AH AE AF AG AH AI@6 AJ@2 A B A B O P O Q R S T U T V A B A B W@2 X Y Z AA AB
  AC O P AD@2 A B A B AE AF AG AH AE AF AG AH AE AF AG AH AE AF AG AH AE AF AG AH AE AF AG AH AI@8 AK AL AM AN AK AL AM
  AN AO@2 AP@2 AO@2 AQ@2 AK AL AM AN AK AL AM AR AK AL AM AN A B A B AS@4 ~
>`.pickRestart({
  A: "a1@3 a1@5", B: "d2 e2 ~ f#2 a2 g2 ~ e2 b2 a2 ~ g2 f#2 e2 ~ d2", C: "b1@2 b1 b2@2 b2 g#2@2",
  D: "g#2 f#2@2 d#2 f#2!2 g#2 d#2", E: "b1@2 b1 b2@2 b2 c#3@2", F: "c#3 b2@2 b2!2 c#3 b2 g#2",
  G: "b1@2 b1 b2@2 b2 d#2@2", H: "d#2 e2@2 e2 f#2!2 e2 c#2", I: "f#1@2 f#1 f#2@2 f#2 d#2@2",
  J: "d#2 c#2@2 c#2 a#2@2 g#2 f#2", K: "f#1@2 f#1 f#2@2 f#2 g#2!2", L: "a#2 a2 g#2!2 f#2!2 d#2 c#2",
  M: "f#1@2 f#1 f#2@2 f#2 a#1@2", N: "a#1 b1@2 b1 c#2@2 f#1@2", O: "g1@2 g1 g2@2 g2 g1@2", P: "g1 g2@2 g2 e2@2 d2@2",
  Q: "g1 g2@2 g2 a2@2 g2@2", R: "g1@2 g1 g2@2 g2 b1@2", S: "b1 c2@2 c2 d2@2 c2@2", T: "e1@2 e1 e2@2 e2 c#2@2",
  U: "c#2 b1@2 b1 g#2@2 f#2@2", V: "c#2 b1@2 b1 b1@2 c#2@2", W: "[a1@3 a1@3 a1@3 a1@2 a1 a1@2 g1@2]/2",
  X: "a1@3 a1@2 a1 a1@2", Y: "a1 a1@2 a1 a2!3 b2", Z: "a1@2 a1 a2@2 a2 a1@2", AA: "a1 a2@2 a2 f#2@2 e2@2",
  AB: "a1@2 a1 a2@2 a2 g2!2", AC: "f#2!2 e2!2 c#2 d2 e2@2", AD: "[g1@2 g1 g2@2 g2 a2@3 g2@3 g2@2 e2@2]/2", AE: "f1",
  AF: "[f2,f3]", AG: "g1", AH: "[g2,g3]", AI: "f1@3 f1 f1@2 f1@2", AJ: "[f1@3 f1 f1@2 f1@3 f1@3 f1@2 f1@2]/2",
  AK: "a1@3 a1@2 a1 g1 g#1", AL: "a1@3 a1@2 a1 g1 a1", AM: "c2@3 c2@2 c2 g1 c2", AN: "b1 b1@2 b1 g1 g1@2 g1",
  AO: "f1 f1@2 f1@3 f1@2", AP: "g1 g1@2 g1@3 g1@2", AQ: "[g1@3 g2@3 g1@3 g2@3 g1@2 g1@2]/2", AR: "e2!6 g2 a2",
  AS: "[a1,e2,a2]/4", // A5
})).s("gm_electric_bass_finger").gain(0.8).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  A@50 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ C@8 ~@4 A@11 ~ A ~ A@16 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B
  ~ B ~ C@8 A@29 ~ A ~@6
>`.pickRestart({
  A: "~ x", B: "x", C: "x ~@2 x!2 ~@3",
})).gain(0.8)

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

// drums · low tom
const low_tom = s("lt").struct("<~@7 A ~@21 B ~@15 A ~@51 C ~ D ~@55 A ~@23 E ~@5>".pickRestart({
  A: "~@15 x", B: "~@13 x!2 ~", C: "~@13 x ~ x", D: "x!2 ~ x!3 ~ x ~@8", E: "x!2 ~@5 x ~@4 x!2 ~@2",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<A@7 B A@21 B A@20 C@32 ~@4 A@11 ~ A ~ A@16 C@32 A@29 ~ A ~@6>".pickRestart({
  A: "x!8", B: "x!5 ~@3", C: "x!4",
})).gain(0.8)

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

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

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

stack(
  distortion_guitar, distortion_guitar_2, pad_poly, bass, bass_2, kick, snare, low_tom, hihat, mid_tom, high_tom, crash
)

More by Rush