Strudelify

Lakeside Park

Rush

KeyD majorTempo165 bpm
0:00/0:00
// Lakeside Park — Rush
// 165 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(165/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 B A C A B A C A B A C A B A C A B A D E@2 F@2 G@2 H@2 E@2 I@2 G@2 J@2 K@2 L@2 K@2 M@5 A B A C A B A C A B A C A B
  A C A B A D E@2 F@2 G@2 H@2 E@2 I@2 G@2 J@2 K@2 L@2 K@2 M@5 N@2 O@2 P Q R S N@2 O@2 P Q R S N@2 O@2 P Q R S T@2 O@2 P
  Q R S P Q R S P Q R U ~
>`.pickRestart({
  A: "[a3,c#4,a4] g4 ~ [a3,d4,g4]@2 g4 [a3,d4,f#4] ~", B: "~ [g3,c4,d4,g4] [g3,b3,d4,g4] [a3,c#4,e4]",
  C: "~@2 [d4,g4,b4] ~ [d4,g4,c5] ~ [a3,c#4,e4]@2", D: "~@2 [d4,g4,b4] ~ [d4,g4,c5] ~@3",
  E: "[[c4,d4,f4,a4]@3 a4@3 [c4,d4,f4,a4]@10]/2", F: "[[b3,d4,g4]@2 g4 [b3,d4,g4]@2 g4 [d4,e4,g4,c5]@10]/2",
  G: "[[c4,d4,f4,a4]@3 a#4@3 [c4,d4,f4,a4]@8 f4@2]/2", // Dm7
  H: "[[b3,d4,g4]@2 a4 g4@2 e4 d4 c4@9, ~@3 [b3,d4]@3 [e3,g3]@10]/2", I: "[[b3,d4,g4]@3 g4@3 [d4,e4,g4,c5]@10]/2",
  J: "[[b3,d4,g4]@3 [b3,e4]@3 e4 d4 c4@8, ~@3 [e3,g3]@5]/2", K: "[[c3,f3,g3,a3,b3]@3 a3@3 c3@4 a3@3 [c3,f3,a3]@3]/2",
  L: "[[c3,g3,b3]@3 g3@3 c3@4 g3@3 [c3,e3,g3]@3]/2", M: "[[c3,g3,b3]@3 g3@3 [c#3,e3,a3,c#4]@34]/5",
  N: "[[d4,f#4,a4]@3 a4 a4@2 [d4,f#4,a4]@3 a4 a4@2 [d4,f#4,a4]@2 d4@2]/2", // D
  O: "[[g3,d4,g4]@3 g4 g4@2 [g3,c4,g4]@3 g4 g4@2 [g3,b3,g4]@2 g3@2]/2", P: "g3 c4 d4 g3", Q: "b3 d4 [f#3,a3] [e3,g3]",
  R: "d3 c3 e3 a2, [g3,c4,g4]", S: "[d3,a3,d4,f#4]",
  T: "[[d4,f#4,a4]@3 a4 a4@2 [d4,f#4,a4]@3 a4 a4@2 [d4,f#4,b4]@2 d4@2]/2", U: "[d2,d3,a3,d4,f#4]",
})).s("gm_distortion_guitar").gain(0.28).pan(0.7)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A B A C A B A C A B A C A B A C A B A C D@2 E@2 D@2 F@2 D@2 E@2 D@2 G@2 H@2 I@2 H@2 J@5 A B A C A B A C A B A C A B
  A C A B A C D@2 E@2 D@2 F@2 D@2 E@2 D@2 G@2 H@2 I@2 H@2 J@5 K@2 L@2 M@2 N O K@2 L@2 M@2 N O K@2 L@2 M@2 N O P@2 Q@2
  R@2 N O R@2 N O R@2 N S ~
>`.pickRestart({
  A: "[a2,e3] d3 ~ [g2,d3]@3 [g2,d3] ~", B: "~ [e2,e3] [d2,d3] [a1,a2]", C: "~@2 c3 ~ c3 ~ g2@2",
  D: "[a2@3 a2@3 a#2@4 a2@2 a#2@2 a2@2]/2", E: "[g2@3 g2@3 c2@6 b1@2 g2@2]/2",
  F: "[g2@3 g2@3 c2@6 c2@2 g2@2, ~@3 d3@5]/2", G: "[g2@3 g2@3 [c2,d3]@8 g1@2]/2", H: "[f1@13 f2@3]/2",
  I: "[e2@6 c2@7 g1@3]/2", J: "[e2@3 c2@3 a1@34]/5", K: "[[a2,d3]@7 a2]/2", L: "[e3@3 e3@3 e3 d3, g2]/2",
  M: "[c3@6 a2 g2]/2", N: "d3 c3 e3 a2", O: "d3", P: "[[a2,d3]@3 [a2,d3]@3 [a2,d3]!2]/2",
  Q: "[[g2,e3]@3 [e2,e3]@3 e3 d3, ~@3 e2]/2", R: "[c3@3 b2@3 a2 g2]/2", S: "[d2,d3]",
})).s("gm_electric_bass_finger").gain(0.5).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~ A@19 ~ B@16 ~@11 A@19 ~ B@16 ~@35 B@12 ~@5>".pickRestart({
  A: "~ x ~@3 x!2 ~", B: "~ x ~ x",
})).gain(0.8)

// drums · rim
const rim = s("rim").struct("<~@95 [~ x]!23 ~@18>").gain(0.8)

// drums · snare
const snare = s("sd").struct("<~ A@19 ~ A@16 ~@11 A@19 ~ A@16 ~@35 A@12 ~@5>".pickRestart({
  A: "~ x",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<A ~@19 B ~@26 C ~@19 B ~@26 C ~@23 D ~@12 E F ~@3>".pickRestart({
  A: "~@12 x!4", B: "~@10 x!4 ~ x", C: "~@5 x!2 ~", D: "~@15 x", E: "x ~@2 x", F: "~@2 x!2",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~ A@20 B@16 A@7 ~@4 A@20 B@16 A@7 ~@4 A@24 B@12 A@3 ~@2>".pickRestart({
  A: "x!4", B: "x!8",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@19 B ~@24 C@2 D ~@19 B ~@24 C@2 D ~@23 E ~@12 F G H ~@2>".pickRestart({
  A: "~@8 x!4 ~@4", B: "~@6 x!4 ~@6", C: "~@3 x ~@4", D: "~@2 x!3 ~@3", E: "~@6 x!2", F: "~ x!2 ~", G: "x!2 ~@2",
  H: "~@4 x!4 ~@4 x!4",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~ [~ x ~ x ~ x ~ x]!20 ~@27 [~ x ~ x ~ x ~ x]!20 ~@68>").gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<A ~@19 B ~@24 C@3 ~@19 B ~@24 C@3 ~@23 D ~@14 E ~@2>".pickRestart({
  A: "x ~ x ~ x ~ x!2 ~@8", B: "~ x ~@2 x ~@11", C: "x!2 ~@6", D: "~@4 x!2 ~@2", E: "x!4 ~@4 x!4 ~@4",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct("<~ A ~@19 A ~@21 B ~@4 A ~@19 A ~@21 B ~@43 A ~>".pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.8)

stack(distortion_guitar, bass, kick, rim, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash)

More by Rush