Strudelify

Love to You

The Beatles

KeyC majorTempo130 bpm
0:00/0:00
// Love to You — The Beatles
// 130 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 3/4 at bar 27, 4/4 at bar 28, 3/4 at bar 32, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 2 "Guitar" named as a guitar, played on electric guitar clean (its pad poly patch is not one)
// note: Full arrangement: all 92 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/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 · electric guitar clean · "Guitar"
const electric_guitar_clean = note("<~@28 A@5 ~@11 B@4 ~@10 C@4 ~@11 D@5 ~@14>".pickRestart({
  A: "[~@3 [a#2,f3]@3 ~ [a#2,f3]@3 ~ [a#2,f3]@3 ~ [a#2,f3]@3 ~@2]/5", B: "~ [a#2,f3]@3", C: "[b2,f3]@3 ~",
  D: "[~@2 [a#2,f3]@3 ~ [a#2,f3]@3 ~ [a#2,f3]@3 ~ [a#2,f3]@3 ~@3]/5", // A#5
})).s("gm_electric_guitar_clean").gain(0.48).pan(0.3)

// other · sitar · "Sitar 1"
const sitar = note(`<
  A@3 B@8 C D@2 E F@2 G@2 ~ H ~ I J@4 K L M N M O P Q R S T U V@5 W X W X Y H Z AA AB AC@2 AD@2 AE AF AG AH AI AJ@2 AK@2
  AL AM@5 AN AO AP AQ AP AR AS AT@3 AU@2 AV AW AX@2 AY AZ BA@2
>`.pickRestart({
  A: "[~@23 g3@18 ~@13 g3@18, ~@10 c5@6 e4 d4@2 c4 b3 a3@19 ~@5 g4@2 e4@2 d4 c4 b3@2 a3@19, ~@11 b4@30 c5@31, ~@12 a4@3 f4@26 ~@2 a4@3 f4@26, ~@14 g4@27 ~ b4@30]/3",
  B: "[~@16 g4@15 c4@16 f#4@8 g4@7 c4@8 f#4@23 ~ c4@15 d4 d#4@3 d#4@2 d4@10 c4@15 a#3 c4@15 ~@8 g4@8 c4@2 a#3@5 c4@4 d4@4 d#4@2 d4@3, c4@31 ~@125 c4@16 ~@20, ~@4 g2@27 ~@127 g2@14 ~@20, ~@8 g3@23 ~@129 g3@17 ~@15]/8",
  C: "~@3 c4@4 d4@4 d#4@2 f4@6 d#4@4 d4",
  D: "[d#4 d4 c4@4 a#3@4 c4@8 ~@8 g4@8 c4@2 a#3@5 c4@4 d4@3, ~@9 c4@8 ~@7, ~@10 g2@7 ~@7, ~@22 g3@17 ~@9]/2",
  E: "~ d#4@4 f4@4 c4@12 f4@3", F: "[~ c4@11 d#4@4 c4@14 f4@3 g4 a4 ~ a#4@3 a4@6 f4@3]/2", G: "g4@2 g4@2 g4!4",
  H: "d#4@8 ~ d#4 d4 ~ c4@3 a#3@3 c4@6, d4 ~@23", I: "d#4@3 ~ d4@3 ~ d#4@4 f4@3 ~ d#4@4 d4@4, d4 ~@3 d#4 ~@7 d#4 ~@11",
  J: "[c4@4 ~ c4@6 c4@4 c4@17]/4", K: "f4@3 g4 a4 ~ a#4@3 a4@6 f4@3 g4@6", L: "g4@2 g4!4 a#4@2",
  M: "a#4@4 a4 ~ a#4 e4@4 ~ g4@6 f4@3 g4 a4 ~, ~@7 a4 ~@16", N: "a#4!2 ~ f4 g4!2 a#4@2", O: "a#4!2 ~ f4 g4!4",
  P: "f4 g4 ~ f4 ~@2 d#4@6 d#4@4 d4 d#4 d4@3 a#3@3, ~@12 d4 ~@11", Q: "c4 d4 c4@2 ~@4",
  R: "~@12 d#4@8 ~ d#4 d4 ~, ~@12 d4 ~@11", S: "c4 a#3 c4@2 ~@4", T: "~@12 d#4@3 ~ d4@3 ~ d#4@4, ~@12 d4 ~@3 d#4 ~@7",
  U: "f4@3 ~ d#4@4 d4@4 c4@12, d#4 ~@23",
  V: "[~@3 c4@18 c4@12 c4@51 f4@3 g4 a4 ~ a#4@3 a4@6 f4@3 g4@6 g4@6 g4@3 g4@3]/5",
  W: "g4@3 g4@3 a#4@6 a#4@4 a4 ~ a#4 e4@4 ~, ~@19 a4 ~@4", X: "g4@6 f4@3 g4 a4 ~ a#4@3 a#4@3 ~@3 f4@3",
  Y: "g4@3 g4@3 g4@3 g4@3 f4 g4 ~ f4 ~@2 d#4@6", Z: "a#3 c4 a#3 c4@3 d4@6 c4@3 d4@3 d#4@3 d4@3",
  AA: "d#4 f4 d#4 f4 g4 f4 g4 a4", AB: "g4 a4 a#4 c5 c5@2 c5@2",
  AC: "[c5@4 a#4 c5 a#4@3 a4@3 a#4@3 c5@3 d#5@4 d5@4 ~ c5@3 a#4@3 c5 d5@3 c5@3 a#4@3 a4@4 ~]/2",
  AD: "[a#4 c5 ~ a#4@6 a4@3 g4@4 f4@6 g4 g4@5 g4@4 ~ f4@3 d#4@3 d4@3 d#4@3 f4@3]/2", AE: "g4 f4@2 d#4 d4 d#4 f4 g4",
  AF: "f4@3 g4@3 c5@6 a4 a#4 a4 e4@3 g4@6", AG: "f4@3 g4 a4 ~ a#4@3 a#4@3 a#4@3 f4@3 f4@6",
  AH: "a#4@6 a#4@4 a4 ~ a#4 e4@4 ~ g4@6, ~@13 a4 ~@10", AI: "f4@3 g4 a4 ~ a#4@3 a#4@3 a#4@3 f4@3 g4@3 g4@3",
  AJ: "[g4@3 g4@3 f4 g4 ~ f4 ~@2 d#4@6 d#4@8 ~ d#4 d4 ~ c4@3 a#3@3 c4@6 ~@6, ~@18 d4 ~@29]/2",
  AK: "[~@18 d#4@8 ~ d#4 d4 ~ c4@3 a#3@3 c4@6 ~@6, ~@18 d4 ~@29]/2", AL: "~@18 d#4@3 ~ d4@2, ~@18 d4 ~@3 d#4 ~",
  AM: "[~@2 d#4@4 f4@3 ~ d#4@4 d4@4 c4@12 ~@3 c4@18 c4@12 c4@51 f4@3 g4 a4 ~, ~@6 d#4 ~@113]/5",
  AN: "a#4 a4@2 f4 g4@2 g4@2", AO: "g4@3 g4@3 g4@3 g4@3 a#4@6 a#4@4 a4 ~",
  AP: "a#4 e4@4 ~ g4@6 f4@3 g4 a4 ~ a#4@3 a#4@3, ~ a4 ~@22", AQ: "~@3 f4@3 g4@3 g4@3 a#4@6 a#4@4 a4 ~",
  AR: "~@3 f4@3 g4@3 g4@3 g4@3 g4@3 f4 g4 ~ f4 ~@2", AS: "d#4@6 d#4@8 ~ d#4 d4 ~ c4@3 a#3@3, ~@6 d4 ~@17",
  AT: "[~@3 c4@6 c4@6 c4@6 c4@6 c4@3 c4@3 c4@5 c4@6 c4@6 c4@2 c4@6 a#3@3 c4@2 d4@5 ~ c4@3]/3",
  AU: "[d4@2 d#4@5 ~ d4@2 d#4@3 f4@5 d#4@3 f4@2 g4@5 ~ f4@2 g4@3 a4@5 g4@2 a4@2 ~ a#4@4]/2",
  AV: "~ a#4@5 a4 [a4,a#4] g4@2 ~ f4@5 g4@4 f4 g4 f4 ~", AW: "~ d#4@5 d4@5 d#4@2 f4@2 d#4@2 ~ d4@2 c4@2 ~@2",
  AX: "[~ a#3@4 c4@5 [a#3,c4] a#3 ~@2 d4@4 ~ c4@4 a#3@4 ~ a3@4 g3@4 g3@4 ~ g3 a3 g3 a3 a#3@3]/2", // A#sus2
  AY: "~ a3 a#3 a3 a#3 c4@4 ~ a#3@2 d4@4 c4@2 d#4@4 d4@2", AZ: "f4 d#4 g4 f4 a4 g4", BA: "[a4@2 a#4@31 ~@15]/2",
})).s("gm_sitar").gain(0.54).pan(0.7)

// chords · sitar · "Sitar 2"
const sitar_2 = note("<~@17 A@7 B@4 C D@4 E@7 F@3 G D@4 A@10 D@6 C@5 H@4 E D@6 I@4 J K L@2 M@4>".pickRestart({
  A: "[c3,c4,g4]@2 [c3,c4,g4]@2 [c3,c4,g4]!2 [c3,c4,g4]@2", // C5
  B: "[[c3,c4,g4]@2 [c3,c4,g4]@2 [c3,c4,g4]!3 [c3,c4,g4]@21 ~@2 [c3,c4,g4]@2]/4", // C5
  C: "[c3,c4,g4]@2 [c3,c4,g4]!2 [c3,c4,g4]@2 [c3,c4,g4]@2", D: "[c3,c4,g4]!4",
  E: "[c3,c4,g4]!2 [c3,c4,g4]@2 [c3,c4,g4]@2 [c3,c4,g4]@2", F: "[[c3,c4,g4]!3 [c3,c4,g4]@21]/3",
  G: "~@2 [c3,c4,g4]@2 [c3,c4,g4]@2 [c3,c4,g4]!2", // C5
  H: "[[c3,c4,g4]@2 [c3,c4,g4]!3 [c3,c4,g4]@21 ~@2 [c3,c4,g4]@2 [c3,c4,g4]@2]/4", // C5
  I: "[[c3,c4,g4]@6 [c3,c4,g4]@5 [c3,c4,g4]@6 [c3,c4,g4]@6 [c3,c4,g4]@5 [c3,c4,g4]@6 [c3,c4,g4]@5 [c3,c4,g4]@5 ~ [c3,c4,g4]@5 [c3,c4,g4]@5 ~ [c3,c4,g4]@5 [c3,c4,g4]@5 [c3,c4,g4]@5 [c3,c4,g4]@5 ~ [c3,c4,g4]@5 [c3,c4,g4]@5 [c3,c4,g4]@5 [c3,c4,g4]@4]/4", // C5
  J: "~ [c3,c4,g4]@5 [c3,c4,g4]@5 [c3,c4,g4]@5 [c3,c4,g4]@4 [c3,c4,g4]@4", // C5
  K: "~ [c3,c4,g4]@5 [c3,c4,g4]@5 [c3,c4,g4]@4 [c3,c4,g4]@5 [c3,c4,g4]@4", // C5
  L: "[~ [c3,c4,g4]@4 [c3,c4,g4]@5 [c3,c4,g4]@4 [c3,c4,g4]@4 ~ [c3,c4,g4]@4 [c3,c4,g4]@4 ~ [c3,c4,g4]@4 [c3,c4,g4]@4 [c3,c4,g4]@4 ~ [c3,c4,g4]@4 [c3,c4,g4]@3]/2", // C5
  M: "[~ [c3,c4,g4]@4 [c3,c4,g4]@4 ~ [c3,c4,g4]@4 [c3,c4,g4]@4 [c3,c4,g4]@4 [c3,c4,g4]@4 [c3,c4,g4]@4 [c3,c4,g4]@4 [c3,c4,g4]@4 [c3,c4,g4]@4 [c3,c4,g4]@4 [c3,c4,g4]@4 [c3,c4,g4]@15 ~ [c3,c4,g4]@15 ~@15]/4", // C5
})).s("gm_sitar").gain(0.54).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@17 A B ~ C D C E C ~@2 F G H I J K H ~ I L M N I H ~@2 O P ~ Q R C@10 S@2 T U V N ~ N W V ~ N ~@2 X Y E Z AA P ~ AB
  AC AD AE AF AG AH AI AJ AK AL AM ~
>`.pickRestart({
  A: "x ~ x ~@2 x ~ x", B: "~ x!2 ~ x ~ x ~", C: "~ x!3", D: "~@2 x ~@2 x ~@2", E: "x", F: "~@7 x",
  G: "x ~ x ~@2 x ~@2", H: "x!2 ~@2", I: "~@3 x", J: "x!2", K: "x ~@2 x ~ x!2 ~", L: "x!2 ~ x", M: "~ x ~@4 x ~",
  N: "x!3 ~", O: "~@3 x!2 ~ x ~", P: "~ x ~@2 x ~ x ~", Q: "~ x!2 ~", R: "x ~@3 x ~@2 x", S: "~@2 x ~ x!3 ~",
  T: "x ~ x!2 ~@4", U: "~@2 x ~@2 x ~ x", V: "x!4", W: "x ~@2 x ~@4", X: "~@5 x!2 ~", Y: "x ~@2 x ~@2 x ~",
  Z: "~@2 x!2", AA: "~ x ~ x", AB: "~@3 x ~ x ~ x", AC: "x ~@8 x ~@4 x ~@5 x ~@2 x", AD: "~@7 x ~@5 x ~@4 x ~@2 x ~@2",
  AE: "~@5 x ~@4 x ~@5 x ~ x ~@5", AF: "~@2 x ~@4 x ~@4 x ~@2 x ~@6 x ~", AG: "~@3 x ~@4 x ~@2 x ~@6 x ~@4 x",
  AH: "~@4 x ~ x ~@6 x ~@4 x ~@3 x ~", AI: "~ x ~@5 x ~@4 x ~@3 x ~@2 x ~@4", AJ: "~ x ~@4 x ~@3 x ~ x ~@6 x ~@3 x",
  AK: "~@3 x ~ x ~@6 x ~@3 x ~@3 x ~ x ~", AL: "~@2 x ~ x ~ x!2 ~@2 x ~", AM: "x ~@4 x ~@3 x ~@2",
})).gain(0.72)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@17 A B ~@2 C B ~@4 D E ~@3 F ~@3 E G ~@5 H B ~@2 D B@10 ~@3 A ~@3 D I ~@5 E H ~@3 B ~ A J K L M N O P Q R S T ~
>`.pickRestart({
  A: "~@2 x!2", B: "x", C: "x ~ x!2", D: "~@3 x", E: "~ x", F: "~ x!2 ~", G: "x!3 ~", H: "~ x ~@2", I: "~ x!3",
  J: "~@11 x ~@5 x ~@6", K: "~@10 x ~@4 x ~@8", L: "~@8 x ~@4 x ~@10", M: "~@5 x ~@4 x ~@13", N: "~ x ~@4 x ~@13 x ~@3",
  O: "~ x ~@13 x ~@4 x ~@3", P: "~@5 x ~ x ~@4", Q: "~@4 x ~@3 x ~@12 x ~@2", R: "~ x ~@12 x ~@3 x ~@5",
  S: "~@3 x ~ x ~@5 x", T: "~ x ~@10",
})).gain(0.72)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@17 A@8 ~@2 B C D E F G H I J@5 K ~@2 L M N O P A@10 Q@2 R S T@2 C@5 U ~@2 V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK
  AL AM AN AO
>`.pickRestart({
  A: "x ~@5 x ~@2 x!4 ~@2 x ~@2 x ~@5", B: "~@5 x!2 ~", C: "x ~@2 x!4 ~@2 x ~@2 x ~@5 x ~@5", D: "~@12 x ~@5 x ~@2 x!3",
  E: "x ~@2 x!4 ~@2 x ~@2 x ~@5 x ~@2 x!3", F: "x ~@2 x!5 ~ x!2 ~@7 x ~@2 x!3", G: "x ~@2 x!3 ~@6 x ~@5 x ~@5",
  H: "x ~ x ~ x ~ x!2", I: "x ~@5 x ~@5 x ~@5 x ~@2 x!3", J: "x ~@2 x ~@2 x ~@5 x ~@5 x ~@2 x!3", K: "x!3 ~@5",
  L: "~@3 x ~@2 x ~@5 x ~@2 x!4 ~@2 x ~@2", M: "x!2 ~@2", N: "x ~@5 x ~@2 x!4 ~@2 x!4 ~@2 x ~@2",
  O: "x ~@5 x ~@2 x!4 ~@2 x!5 ~ x!2 ~", P: "~@6 x ~@2 x!4 ~@2 x!3 ~@6", Q: "x ~@2 x!4 ~@2 x!4 ~@2 x ~@2 x ~@5",
  R: "x ~@2 x!4 ~@2 x!3 ~@3 x ~@2 x ~@5", S: "x ~@2 x!4 ~@2 x!3 ~@6 x ~@5", T: "x!4", U: "x ~@2 x!4 ~@2 x ~@2 x ~@11",
  V: "~@9 x ~@2 x ~@5 x ~@2 x!3", W: "x!3 ~ x ~@3", X: "~@6 x ~@5 x ~@2 x!4 ~@2 x!3",
  Y: "x ~@2 x ~@2 x ~@5 x ~@2 x!4 ~@2 x!3", Z: "x!2 ~ x!2 ~@7 x ~@2 x!4 ~@2 x!3", AA: "~ x!3", AB: "x ~ x!2 ~@2 x ~",
  AC: "x ~ x!6", AD: "x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~@2 x ~@2 x",
  AE: "~@2 x ~ x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~@2", AF: "x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x",
  AG: "~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~ x ~@2 x ~ x ~", AH: "~ x ~ x ~@2 x ~ x ~@2 x ~ x ~@2 x ~ x ~ x ~@2 x",
  AI: "~ x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~", AJ: "~ x ~ x ~ x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~ x ~ x",
  AK: "~ x ~@2 x ~ x ~ x ~ x ~ x ~ x ~@2 x ~ x ~ x ~ x", AL: "~ x ~ x ~ x ~ x ~@2 x ~ x ~ x ~ x ~ x ~ x ~ x ~",
  AM: "x!12", AN: "x!2 ~@3 x ~@3 x ~@2", AO: "~ x ~@22",
})).gain(0.72)

// drums · splash
const splash = s("cr").struct(`<
  ~@17 A@8 ~@3 B C@3 D E A@6 F ~@2 G H@4 A@10 I@2 J K L M B@6 ~@2 N A O@3 P B@2 Q R S T U V W X Y Z N ~
>`.pickRestart({
  A: "~ x ~ x", B: "x!2", C: "x ~@2 x!2 ~@3", D: "x ~@2 x!2 ~ x ~", E: "x!2 ~ x", F: "~ x ~@2", G: "~ x",
  H: "x ~@3 x ~@2 x", I: "~ x!2 ~ x!3 ~", J: "~ x!2 ~@2 x!2 ~", K: "~@2 x ~@2 x!2 ~", L: "x!4", M: "x!3 ~", N: "~@3 x",
  O: "~ x!2 ~@3 x ~", P: "~ x!2 ~ x ~ x ~", Q: "x ~@10 x ~@11 x", R: "~@10 x ~@10 x ~@2", S: "~@4 x ~@4 x ~@2",
  T: "~@5 x ~@9 x ~@8", U: "~ x ~@9 x ~@8 x ~@3", V: "~@2 x ~@2 x ~@2", W: "~ x ~@8 x ~@8 x ~@4",
  X: "~@4 x ~@7 x ~@8 x ~@2", Y: "~@5 x ~@8 x ~@7 x ~", Z: "~@3 x ~@3 x ~@3 x",
})).gain(0.64)

stack(electric_guitar_clean, sitar, sitar_2, kick, low_tom, high_tom, splash)

More by The Beatles