Strudelify

Real Love

The Beatles

KeyE majorTempo88 bpm
0:00/0:00
// Real Love — The Beatles
// 88 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 82 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(88/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.

// other · distortion guitar · "Lead Guitars"
const distortion_guitar = note(`<
  ~@13 A ~ B ~@5 C D E F ~@8 G@2 H ~@5 I ~ J ~@4 K L@2 M N ~ O@2 P ~@5 Q@2 R@2 ~@3 S T U V W X Y X Z@2 AA AB ~
>`.pickRestart({
  A: "~@3 [a4,b4,c#5,d#5]@2 ~@2 c#5 a4 [g#4,b4] [a4,c#5] [b4,d#5]@12 ~, ~@3 [b4,c#5,d#5] ~@8", // B7 G#m A B
  B: "~@3 [a4,b4,c#5,d#5] ~ c#5 ~@2 g4 ~ [g4,b4]@12 ~@2, ~@3 [b4,d#5] ~@8, ~@7 [a4,c#5]@2 ~@15", // B7 G B A
  C: "~@3 [d4,e4]@2 ~ e4@3 d4@2 ~ d4@3 c4@2 ~ c4@3 b3@2 ~, ~@6 d4 ~@17", D: "b3@11 ~",
  E: "~@3 [b3,c4]@2 ~ c4@3 b3@2 ~ b3@3 a3 ~@2 a3@3 g#3@2 ~", F: "g#3@7 ~@5", G: "[~ g#3 [a3,b3] c#4 g#3@5 ~@7]/2",
  H: "~ g3 [a3,b3] c#4 g3@4", I: "~@6 [d5,e5]@2 d5 c5 d5@2 c5@6 d5@6, ~@18 c#5 ~@5",
  J: "~@5 b5@3 a5@2 ~ a5@7 a#5 b5@5, ~@5 a5 ~@4 g5@2 ~@12",
  K: "~ f#4@4 a4@3 c5 c#5@2 e5@2 c#5@3 ~ b4@2 a4@2 b4@2 ~, f4@5 ~@19",
  L: "[~ b4@2 c#5@2 ~ d5@3 d5@3 c#5@7 c#5@2 ~ c#5 ~ e5@5 f#5@4 b5@5 a5@2 ~ e5@3 f#5@2 ~@2, g#4@2 ~@4 c#5 ~@2 c#5 ~@11 f#5@2 d#5@2 ~@8 a#5 ~@6 f#5@2 ~@6]/2",
  M: "e5@2 b4@2 e5@3 c#6@3 c#6@2 b5@11 ~, ~@7 c6 ~@2 b5 ~@13",
  N: "d#5@2 b4@2 d#5@2 [b5,c6] ~@2 c#6@3 b5@11 ~, ~@6 c#6@3 b5 ~@14", // Cmaj7
  O: "[~@3 g#3@3 b3@3 c#4@3 g#3@16 ~@20, ~@3 g3 ~@44]/2", P: "~@2 f#3 g3@3 b3@3 c#4@3 g3@12",
  Q: "[~@2 g#3@2 ~ b3@2 ~@2 g#3@2 ~ [d3,e3]@2 ~ c3@2 ~ d3@2 ~ e3@20 ~@7, ~@14 d3@2 ~@5 d#3 ~@26]/2", // Dsus2
  R: "[~@2 a3 c4 ~ d#4 e4@2 a4@2 ~@2 d4 ~ c4@3 a4@4 ~ g#4@16 ~@10, ~@11 e4@2 ~@4 g#4 ~@30]/2",
  S: "~@11 c#5, ~@21 b4@2 ~", T: "b4@8 ~@3 c#5, ~@21 b4@2 ~", U: "b4@3 g#4@6 ~@2 c#5, ~@21 b4@2 ~", V: "b4@9 ~ b4 c#5",
  W: "b4@6 e5@13 ~@3 c#5@2, ~@6 d#5 ~@14 b4@2 ~", X: "b4@19 ~@3 c#5@2, ~@21 b4@2 ~",
  Y: "b4@6 g#4@11 ~@5 c#5@2, ~@21 b4@2 ~",
  Z: "[b4@6 e5@12 ~@3 b4@2 ~ b4@19 ~@3 c#5@2, ~@6 d#5 ~@16 c#5@2 ~@20 b4@2 ~]/2",
  AA: "b4@6 g#4@13 ~@3 c#5@2, ~@21 b4@2 ~", AB: "b4@3 g#4@8 ~",
})).s("gm_distortion_guitar").gain(0.41)

// chords · piano · "Bright Acoustic Piano"
const piano = note(`<
  ~@4 A B C D E F G H I B C D E F G H I J I K L M N M ~@4 I B C D E F G H I J I O P M Q M R S R T U V B C D E F G H I J
  I W P M X M Y M X M Z M N M P M N AA AB
>`.pickRestart({
  A: "[e3,g#3,b3]@18 ~ [g#3,b3] e3 ~@3", B: "[g#3,b3,d#4]", C: "[e3,g#3,c#4]@18 ~@2 [e3,g#3,c#4] ~@3",
  D: "[d#3,g3,b3]@23 ~", E: "[e3,a3,c#4]@18 ~@2 [e3,a3,c#4] ~@3", F: "[a3,c#4] [d#3,b3], ~@12 f#3 ~@11",
  G: "~@3 [g#3,b3,e4] ~@4 [b3,d4,f#4] ~@3 [a3,c#4,e4] ~@4 [a3,c#4,e4]@7, [e1,e2] [b1,b2] [a1,a2]@2", // E Bm A E B A
  H: "~@3 [g#3,b3,e4] ~@4 [b3,d4,f#4] ~@3 [a1,a2,a3,c#4,e4]@12, [e1,e2] [b1,b2] ~@2", // E Bm A E B
  I: "[e3,g#3,b3]@18 ~@2 [e3,g#3,b3] ~@3", J: "[e3,a3,c4]",
  K: "[a1,a3,c4,e4]@3 ~@2 [a3,c4] ~@3 [a1,a3,c4,e4]@15, ~@2 [a1,e4] ~@9", // Am A5
  L: "~@3 [g#3,b3,e4] ~@4 [g#3,b3,e4] ~@3 [g#3,c#4] ~@4 [g#3,c#4,e4]@7, [e1,e2] [c#1,c#2], ~@6 e4 ~@5", // E C#5 C#m E C#
  M: "~@3 [a3,c#4,e4] ~@4 [a3,c#4,e4] ~@3 [b1,b2,b3,d#4,f#4]@12, [a1,a2] ~", // A B A
  N: "~@3 [g#3,b3,e4] ~@4 [g#3,b3,e4] ~@3 [g#3,c#4,e4] ~@4 [g#3,c#4,e4]@3 ~ [g#3,c#4,e4] ~@2, [e1,e2] [c#1,c#2]", // E C#m E C#
  O: "[a1,a3,c4,e4]@3 ~@2 [a1,a3,c4,e4]@2 ~@2 [a1,a3,c4,e4]@15", // Am
  P: "~@3 [g#3,b3,e4] ~@4 [g#3,b3,e4] ~@3 [g#3,c#4,e4] ~@4 [g#3,c#4,e4]@7, [e1,e2] [c#1,c#2]", // E C#m E C#
  Q: "~@3 [g#3,b3,e4] ~@4 [g#3,b3,e4] ~@3 [g#3,e4] ~@4 [g#3,c#4,e4]@3 ~ [g#3,c#4,e4] ~@2, [e1,e2] [c#1,c#2], ~@6 c#4 ~@5", // E C#m E C#
  R: "[f#1,a3,c#4,f#4] [g#1,a3,c#4,f#4] [a1,a3,c#4,f#4] [b1,a3,c#4,f#4]", S: "~ [c#1,g#3,c#4,f4]@23",
  T: "[b1,b3,e4,f#4]", U: "[b1,d#4,f#4]", V: "[e3,g#3,b3]@18 ~@2 [e3,g#3,b3] ~@3, [e1,e4] ~@23",
  W: "[a1,a3,c4,e4]@3 ~@2 [a1,a3,c4,e4] ~@3 [a1,a3,c4,e4]@15", // Am
  X: "e4 ~@2 [g#3,b3,e4] ~@4 [g#3,b3,e4] ~@3 [g#3,c#4,e4] ~@4 [g#3,c#4,e4]@3 ~ [g#3,c#4,e4] ~@2, [e1,e2] [c#1,c#2]", // E C#m E C#
  Y: "g#3 ~@2 [g#3,b3,e4] ~@4 [g#3,b3,e4] ~@3 [g#3,c#4,e4] ~@4 [g#3,c#4,e4]@7, ~ [e1,e2]@11 [c#1,c#2]@12", // E C#m E C#
  Z: "[e1,e2] ~@2 [g#3,b3,e4] ~@4 [g#3,b3,e4] ~@3 [g#3,c#4,e4] ~@4 [g#3,c#4,e4]@7, ~ [e1,e2]@11 [c#1,c#2]@12", // E C#m E C#
  AA: "[a1,a3,c#4,e4]@12 ~@11 [b1,b3,d#4,f#4]", AB: "[e1,g#3,b3,e4] ~",
})).s("gm_piano").gain(0.31)

// chords · electric guitar clean · "Clean Guitar"
const electric_guitar_clean = note(`<
  A B C B D E F G H I J K D L F M N I J K D O D P Q R S T A B A B D U F V N W X Y Z O D P AA AB AC AD AE AF AE AG AH D
  AI F V N I J AJ AK AL D P Q R Q T Q R S AM Q R Q T Q R AN AO AP
>`.pickRestart({
  A: "~@3 [g3,b3,e4] ~ [g3,b3,e4] ~@3 [g3,b3,e4]@2 [g3,b3,e4]@4 [g3,b3,e4]@2 [g3,b3,e4] ~@6", // Em
  B: "~@3 [f#3,b3,d#4]@2 [f#3,b3,d#4] ~@3 [f#3,b3,d#4]@2 [f#3,b3,d#4]@4 [f#3,b3,d#4]@2 [f#3,b3,d#4] ~@6", // B
  C: "~@3 [g3,b3,e4]@2 [g3,b3,e4] ~@3 [g3,b3,e4]@2 [g3,b3,e4]@4 [g3,b3,e4]@2 [g3,b3,e4] ~@6", // Em
  D: "~@3 [g#3,b3,e4]@2 [g#3,b3,e4] ~@3 [g#3,b3,e4]@2 [g#3,b3,e4] ~@3 [g#3,b3,e4]@2 [g#3,b3,e4] ~@3 [g#3,b3,e4]@2 [g#3,b3,e4]", // E
  E: "~@3 [g#3,b3,d#4]@2 [g#3,b3,d#4] ~@3 [g#3,b3,d#4]@2 [g#3,b3,d#4] [g#3,b3,d#4]@3 [g#3,b3,d#4]@2 [g#3,b3,d#4] ~@3 [g#3,b3,d#4]@2 [g#3,b3,d#4]", // G#m
  F: "~@3 [g#3,c#4,e4]@2 [g#3,c#4,e4] ~@3 [g#3,c#4,e4]@2 [g#3,c#4,e4] ~@3 [g#3,c#4,e4]@2 [g#3,c#4,e4] ~@3 [g#3,c#4,e4]@2 [g#3,c#4,e4]", // C#m
  G: "~@3 [g3,b3,d#4]@2 [g3,b3,d#4] ~@3 [g3,b3,d#4]@2 [g3,b3,d#4] d#4@3 [g3,b3,d#4] ~ [g3,b3,d#4] ~@3 [g3,b3,d#4]@2 [g3,b3,d#4]", // Gaug
  H: "~@3 [a3,c#4,e4]@2 [a3,c#4,e4] ~@3 [a3,c#4,e4]@2 [a3,c#4,e4] ~@3 [a3,c#4,e4]@2 [a3,c#4,e4] ~@3 [a3,c#4,e4]!2 ~", // A
  I: "~@3 [a3,c#4,f#4]@2 [a3,c#4,f#4] ~@3 [a3,c#4,f#4]@2 [a3,c#4,f#4] [f#3,d#4]@3 [f#3,b3,d#4]@2 [f#3,b3,d#4] ~@3 [f#3,b3,d#4]@2 [f#3,b3,d#4]", // F#m D#m B
  J: "~@3 [g#3,b3,e4] ~@2 [f#3,b3,d4] ~@2 [f#3,b3,d4]@2 [f#3,b3,d4] [a3,c#4,e4]@12", // E Bm A
  K: "[g#3,b3,e4]@3 [g#3,b3,e4] ~@2 [f#3,b3,d4] ~@2 [f#3,b3,d4] ~ [f#3,b3,d4] ~@3 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4]@2 [a3,c#4,e4]", // E Bm A
  L: "~@3 [g#3,b3,d#4]@2 [g#3,b3,d#4] ~@3 [g#3,b3,d#4]@2 [g#3,b3] [g#3,b3]@3 [g#3,b3,d#4]@2 [g#3,b3,d#4] ~@3 [g#3,b3,d#4]@2 [g#3,b3,d#4], ~@12 d#4 ~@11", // G#m
  M: "~@3 [g3,b3,d#4]@2 [g3,b3,d#4] ~@3 [g3,b3,d#4]@2 [g3,b3,d#4] [g3,d#4]@3 [g3,b3,d#4]@2 [g3,b3,d#4] ~@3 [g3,b3,d#4]@2 [g3,b3,d#4]", // Gaug Cm Gaug
  N: "~@3 [a3,c#4,e4]@2 [a3,c#4,e4] ~@3 [a3,c#4,e4]@2 [a3,c#4,e4] ~@3 [a3,c#4,e4]@2 [a3,c#4,e4] ~@3 [a3,c#4,e4]@2 [a3,c#4,e4]", // A
  O: "~@3 [a3,c4,e4]@2 [a3,c4,e4] ~@3 [a3,c4,e4]@2 [a3,c4,e4] [a3,c4,e4]@3 ~@2 [a3,c4,e4] ~@3 [a3,c4,e4]@2 [a3,c4,e4]", // Am
  P: "~@3 [a3,c4,e4]@5 [a3,c4,e4] ~@3 [a3,c4,e4] ~@4 [a3,c4,e4]@6 [a3,c4,e4]", // Am
  Q: "~@3 [g#3,b3,e4] ~@2 [g#3,b3,e4] ~@2 [g#3,b3,e4]@2 [g#3,b3] g#3@12, ~@12 e4 ~@11", // E G#m
  R: "[a3,e4]@3 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4]@2 [a3,c#4,e4] ~@3 [f#3,b3,d#4] ~@2 [f#3,b3,d#4] ~@2 [f#3,b3,d#4]@2 [f#3,b3,d#4], c#4 ~@23", // A5 A B
  S: "~@3 [g#3,b3,e4] ~@2 [g#3,b3,e4] ~@2 [g#3,b3,e4]@2 ~ g#3@12, ~@11 [g#3,b3]@2 ~@11, ~@12 e4 ~@11", // E G#m
  T: "[a3,e4]@3 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [f#3,b3,d#4] ~@2 [f#3,b3,d#4] ~@2 [f#3,b3,d#4] ~@2 [f#3,b3,d#4]@2 [f#3,b3,d#4], c#4 ~@23", // A5 A B
  U: "~@3 [g#3,b3,d#4]@2 [g#3,b3,d#4] ~@3 [g#3,b3,d#4]@2 [g#3,b3,d#4] [g#3,b3,d#4]@3 ~@2 [g#3,b3,d#4] ~@3 [g#3,b3,d#4]@2 [g#3,b3,d#4]", // G#m
  V: "~@3 [g3,b3,d#4]@2 [g3,b3,d#4] ~@3 [g3,b3,d#4]@2 [g3,b3,d#4] [g3,b3,d#4]@3 ~@2 [g3,b3,d#4] ~@3 [g3,b3,d#4] ~ [g3,b3,d#4]", // Gaug
  W: "~@3 [a3,c#4,f#4]@2 [a3,c#4,f#4] ~@3 [a3,c#4,f#4]@2 [a3,c#4,f#4] ~@3 [f#3,b3,d#4] ~ [f#3,b3,d#4] ~@3 [f#3,b3,d#4]@2 [f#3,b3,d#4]", // F#m B
  X: "~@3 [g#3,b3,e4] ~@2 [f#3,b3,d4] ~@2 [f#3,b3,d4] ~ [f#3,b3,d4] [a3,c#4,e4]@12", // E Bm A
  Y: "[g#3,b3,e4]@2 ~ [g#3,b3,e4] ~@2 [f#3,b3,d4] ~@2 [f#3,b3,d4]@2 [f#3,b3,d4] ~@3 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4]@2 [a3,c#4,e4]", // E Bm A
  Z: "~@3 [g#3,b3,e4] ~ [g#3,b3,e4] ~@3 [g#3,b3,e4]@2 [g#3,b3,e4] ~@3 [g#3,b3,e4]@2 [g#3,b3,e4] ~@3 [g#3,b3,e4]@2 [g#3,b3,e4]", // E
  AA: "~@3 [g#3,b3,e4]@5 [g#3,b3,e4] ~@3 [g#3,c#4,e4] ~@4 [g#3,c#4,e4]@6 [g#3,c#4,e4]", // E C#m
  AB: "~@3 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4]@2 [a3,c#4,e4] [f#3,d#4]@12", // A D#m
  AC: "[g#3,e4]@3 [g#3,b3,e4] ~@2 [g#3,b3,e4] ~@2 [g#3,b3,e4]@2 [g#3,b3,e4] ~@3 [g#3,c#4,e4] ~@2 [g#3,c#4,e4] ~@2 [g#3,c#4,e4]@2 [g#3,c#4,e4], b3 ~@23", // C#m E C#m
  AD: "~@3 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4]@2 [a3,c#4,e4] [f#3,b3,d#4]@12", // A B
  AE: "~@2 [a3,c#4,f#4] ~@2 [a3,c#4,f#4]!2 ~@2 [a3,c#4,f#4]@2 [a3,c#4,f#4] ~@2 [a3,c#4,f#4]!2 ~@4 [a3,c#4,f#4] ~@3", // F#m
  AF: "~@2 [g#3,c#4,f4] ~@2 [g#3,c#4,f4]!2 ~@2 [g#3,c#4,f4]@2 [g#3,c#4,f4] ~@2 [g#3,c#4,f4]!2 ~@2 [g#3,c#4,f4]@2 [g#3,c#4,f4] ~@3", // C#
  AG: "~@2 [f#3,b3,e4] ~@2 [f#3,b3,e4]!2 ~@2 [f#3,b3,e4]@2 [f#3,b3,e4] ~@2 [f#3,b3,e4]!2 ~@2 [f#3,b3,e4]@2 [f#3,b3,e4] ~@3", // Esus2
  AH: "~@2 [f#3,b3,d#4] ~@2 [f#3,b3,d#4]!2 ~@2 [f#3,b3,d#4]@2 [f#3,b3,d#4] ~@2 [f#3,b3,d#4]!2 ~@2 [f#3,b3,d#4]@2 [f#3,b3,d#4] ~@3", // B
  AI: "~@3 [g#3,b3,d#4]@2 [g#3,b3,d#4] ~@3 [g#3,b3,d#4]@2 [g#3,b3,d#4] [g#3,b3,d#4]@3 g#3@2 [g#3,b3,d#4] ~@3 [g#3,b3,d#4]@2 [g#3,b3,d#4]", // G#m
  AJ: "[g#3,b3,e4]@3 [g#3,b3,e4] ~@2 [f#3,b3,d4] ~@2 [f#3,b3,d4]@2 [f#3,b3,d4] ~@3 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4]@2 [a3,c#4,e4]", // E Bm A
  AK: "~@3 [g#3,b3,e4]@2 [g#3,b3,e4] ~@3 [g#3,b3,e4]@2 [g#3,b3,e4] ~@2 [g#3,b3,e4]@2 ~ [g#3,b3,e4] ~@3 [g#3,b3,e4]@2 [g#3,b3,e4]", // E
  AL: "~@3 [a3,c4,e4]@2 [a3,c4,e4] ~@3 [a3,c4,e4]@2 [a3,c4,e4] ~@3 [a3,c4,e4] ~ [a3,c4,e4] ~@3 [a3,c4,e4]@2 [a3,c4,e4]", // Am
  AM: "[a3,c#4,e4]@2 ~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [f#3,b3,d#4] ~@2 [f#3,b3,d#4] ~@2 [f#3,b3,d#4] ~@2 [f#3,b3,d#4]@2 [f#3,b3,d#4]", // A B
  AN: "~@3 [g#3,b3,e4] ~@2 [g#3,b3,e4] ~@2 [g#3,b3,e4]@2 ~ [g#3,c#4]@12, ~@11 [g#3,b3]@2 ~@11, ~@12 e4 ~@11", // E C#5 G#m
  AO: "~@3 [a3,c#4,e4] ~ [a3,c#4,e4] ~@3 [a3,c#4,e4]@2 [a3,c#4,e4] ~@3 [f#3,b3,d#4]@2 [f#3,b3,d#4] ~@3 [f#3,b3,d#4]@2 [f#3,b3,d#4]", // A B
  AP: "[g#3,b3,e4] ~", // E
})).s("gm_electric_guitar_clean").gain(0.31)

// bass · electric bass finger · "Finger Bass"
const bass = note(`<
  ~@4 A B C D E F G H A I J K L M N H O P A Q R S T U ~@4 A V C D P W N H A P A X Y Z AA U AB AC AD AE AF A B C D AG F N
  H D AH D X Y AI AA AJ AK AL AA AJ Y AL AM AJ Y AL AA AN AO
>`.pickRestart({
  A: "e1@2 ~ e1@2 ~ e1@2 ~ e1@2 ~ e1@2 ~ e1@2 ~ e1@2 ~ e1@2 ~",
  B: "d#2@2 ~ d#2@2 ~ d#2 ~@2 d#2@2 ~ d#2@2 ~ d#2@2 ~ d#2@2 ~ d#2@2 ~",
  C: "c#2@2 ~ c#2@2 ~ c#2@2 ~ c#2@2 ~ c#2@2 ~ c#2@2 ~ c#2@2 ~ c#2@2 ~",
  D: "b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~",
  E: "a1@2 ~ a1@2 ~ a1 ~@2 a1@2 ~ a1@2 ~ a1 ~@2 a1 ~@2 a1@2 ~",
  F: "f#1@2 ~ f#1@2 ~ f#1 ~@2 f#1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~",
  G: "e1@2 g#3 c#2 ~ e1 f#1@2 ~ d2@2 f#3 a1@2 c#3 f#1 ~ a1 e1@2 a1 f#1@2 a1",
  H: "e1@3 c#3 ~ e1 f#1@3 d2@2 b1 a1@2 [a3,c#4] f#1 ~ a1 e1@2 a1 f#1@2 c#3", // A
  I: "d#2@2 ~ d#2@2 ~ d#2@2 ~ d#2@2 ~ d#2@2 ~ d#2 ~@2 d#2@2 ~ d#2@2 ~",
  J: "c#2@2 ~ c#2@2 ~ c#2@2 ~ c#2@2 ~ c#2@2 ~ c#2@2 ~ c#2@2 ~ c#2 ~@2",
  K: "b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1 ~@2 b1@2 ~",
  L: "a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1 ~@2 a1@2 ~ a1@2 ~",
  M: "f#1@2 ~ f#1@2 ~ f#1@2 ~ f#1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~",
  N: "e1@2 g#3 c#2 ~ e1 f#1@3 d2@2 f#3 a1@2 c#3 f#1 ~ a1 e1@2 a1 f#1@2 a1",
  O: "e1@2 ~ e1@2 ~ e1@2 ~ e1@2 ~ e1@2 ~ e1 ~@2 e1@2 ~ e1@2 ~",
  P: "a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~", Q: "a1@5 a1 ~@3 a1@5 ~ c2@2 e1 [a2,c3]@2 c2@3 e1",
  R: "e1@2 g#3 c#2 ~ e1 b1@3 c#2@2 b3 c#2@2 e3 e1 c#2 ~ g#1@2 c#2 e1@2 c#2",
  S: "a1@3 f#2 ~ a1 e1@3 f#1@2 a1 b1@2 [b3,d#4] g#1 ~ b1 f#1 ~ b1 g#1@2 d#3", // B
  T: "e1@2 e3 c#2 ~ e1 b1@3 c#2 g#2 b1 c#2@2 e1@3 ~ g#1@2 c#2 e1@2 g#3",
  U: "a1@2 a2 f#1 ~ a1 e1@3 f#1@2 c#2 ~@2 b1 g#1 ~ b1 f#1@2 b1 g#1@2 [d#3,b3]", // G#m
  V: "d#2@2 ~ d#2@2 ~ d#2@2 ~ d#2@2 ~ d#2@2 ~ d#2@2 ~ d#2@2 ~ d#2@2 ~",
  W: "f#1 ~@2 f#1@2 ~ f#1@2 ~ f#1 ~@2 b1@2 ~ b1@2 ~ b1@2 ~ b1 ~@2", X: "a1@5 a1 ~@3 a1@6 c2@2 e1 [a2,c3]@2 c2@3 e1",
  Y: "e1@2 g#3 c#2 ~ e1 b1@3 c#2@2 b3 c#2@2 e3 e1 ~ c#2 g#1@2 c#2 e1@2 c#2",
  Z: "a1@2 ~ f#2 ~ a1 e1@3 f#1@2 a1 b1@2 [b3,d#4] g#1 ~ b1 f#1@2 b1 g#1@2 d#3", // B
  AA: "e1@2 e3 c#2 ~ e1 b1@3 c#2 g#2 b1 c#2@2 e1@4 g#1@2 c#2 e1@2 g#3",
  AB: "f#1@2 [f#4,a4] a1 ~ f#1 g#2@2 g#1 g#2@2 g#3 a2 a1@2 a1@2 ~ b1@2 ~ b1@2 ~", // F#m
  AC: "c#2@2 [c#4,f4] a#1 ~ c#2 g#1@2 c#2 a#1@2 f3 c#2@2 ~ c#2@2 ~ c#2@2 ~ c#2@2 ~", // C#
  AD: "f#1@2 [f#4,a4] a1 ~ f#1 g#2@2 g#1 g#2@2 g#3 a1@2 ~ a1@2 ~ b1@2 ~ b1@2 ~", // F#m
  AE: "b1@2 [b3,e4] f#1 ~ b1 f#1@2 b1 f#1 ~ e3 b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~", // E5
  AF: "b1@2 [b3,d#4] g#1 ~ b1 f#1@2 b1 g#1@2 d#3 b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~", // B
  AG: "a1 ~@2 a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~",
  AH: "c2@2 ~ c2@2 ~ c2@2 ~ c2@2 ~ c2@2 ~ c2@2 ~ c2@2 ~ c2@2 ~",
  AI: "a1@3 f#2 ~ a1 e1@3 f#1 ~ a1 b1@2 [b3,d#4] g#1 ~ b1 f#1@2 b1 g#1@2 d#3", // B
  AJ: "a1@2 a2 f#1 ~ a1 e1@3 f#1@2 c#2 b1@2 b1 g#1 ~ b1 f#1@2 b1 g#1@2 [d#3,b3]", // G#m
  AK: "e1@2 g#3 c#2 ~ e1 b1@2 ~ c#2@2 b3 c#2@2 e3 e1 ~ c#2 g#1@2 c#2 e1@2 c#2",
  AL: "a1@3 f#2 ~ a1 e1@3 f#1@2 a1 b1@2 [b3,d#4] g#1 ~ b1 f#1@2 b1 g#1@2 d#3", // B
  AM: "e1@2 e3 c#2 ~ e1 b1@3 c#2 g#2 b1 c#2 ~ e1@4 g#1@2 c#2 e1@2 g#3, ~@13 c#2@2 ~@9",
  AN: "a1@2 f#2 f#1@2 a1 e1@2 c#3 f#1@2 a1 b1@2 [b3,d#4] g#1 ~ b1 f#1@2 b1 g#1@2 b1", AO: "e1@13 ~@11",
})).s("gm_electric_bass_finger").gain(0.41)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  A@5 B@3 A B C D A B@3 A B C D A B@3 C D E D A@5 B@3 A B C D A B@3 C D E D@6 A B@3 A B C D A B@3 C D E D C D E D C D E
  D F D E G ~
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~@2 x ~ x!2 ~ x ~@3 x ~@2 x ~@2", B: "x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@3 x ~@2 x ~@2",
  C: "x ~@4 x!2 ~@2 x ~@2 x ~ x ~@3 x ~@2 x ~@2", D: "~@3 x ~@2 x ~@2 x ~@2 x ~ x ~@3 x ~@2 x ~@2",
  E: "~@3 x ~ x!2 ~@2 x ~@2 x ~ x ~@3 x ~@2 x ~@2", F: "x ~@4 x!2 ~@2 x ~@3 x!2 ~@3 x ~@2 x ~@2",
  G: "~@3 x ~@2 x ~@2 x ~@2 x ~ x ~@3 x ~@4 x",
})).gain(0.36)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@6 B A@4 C A@2 B A@4 C A@2 B D A C E C A@6 B A@4 C A@2 B D A C E C F@5 A@2 B A@4 C A@2 B G A C E C A C E C A C E C A
  C E H ~
>`.pickRestart({
  A: "~@2 x ~@5 x ~@6 x ~@8", B: "~@2 x ~@5 x ~@2 x ~@3 x ~@8", C: "x ~@7 x ~@6 x ~@8", D: "~@2 x ~@5 x ~@6 x ~@7 x",
  E: "x ~ x ~@5 x ~@6 x ~@8", F: "x ~@7 x ~@6 x ~@4 x ~@3", G: "~@2 x ~@5 x ~@6 x ~@6 x ~",
  H: "x ~@7 x ~@6 x ~@4 x!2 ~@2",
})).gain(0.36)

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

// … 54 more lines

More by The Beatles