Strudelify

Let Me Roll It

McCartney

KeyE majorTempo87 bpm
0:00/0:00
// Let Me Roll It — McCartney
// 87 bpm, 6/8, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 141 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(87/3)

// 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 · drawbar organ · "ORGAN 1"
const drawbar_organ = note(`<
  A B@2 C D E D F D F D F D ~@15 A B@2 C D E D F D F D F D ~@15 A B@2 C D E D F D F D F D ~@15 A B@2 C D E D F D F D F D
  ~@15 G@6 H@8 ~@15
>`.pickRestart({
  A: "[a5,c#6,e6]", B: "[[a5,f#6] [a5,e6], c#6@47 ~]/2", C: "[a5,c#6,f#6]", D: "[g#5,b5,e6]",
  E: "d6 c#6@2, [a5,e6]@23 ~", F: "d6 c#6@2, [a5,e6]",
  G: "[~ [a5,c#6,e6]@6 [a5,f#6]@6 [a5,e6]@6 [a5,c#6,f#6]@6 [g#5,b5,e6]@6 d6@2 c#6@3, ~@28 c#6@47 ~@49 [a5,e6]@20]/6", // A D A5 F#m E A5
  H: "[~@2 [g#5,b5,e6]@12 d6@4 c#6@8 [g#5,b5,e6]@12 d6@4 c#6@8 [g#5,b5,e6]@12 d6@4 c#6@8 [g#5,b5,e6]@13 ~@9, ~@7 [a5,e6]@6 ~@6 [a5,e6]@6 ~@6 [a5,e6]@6 ~@11]/8", // E A5
})).s("gm_drawbar_organ").gain(0.27).pan(0.7)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  A B A C D E D E F G H I J K L@2 M N O P Q M R O S M T U V W X Y Z AA AB AC F AD AE AF AG K AH@2 AI@2 AJ AK AL Q AJ AM
  AN@2 AJ AO AP AQ AR AS AT AU AV AW AX AY AZ AD BA K BB@2 AL AI AJ BC AL@2 BC AK AL AI AJ T BD BE BF BG BH BI BJ BK BL
  BM BN BO BP@2 ~@2 BQ BR BS BT BU BV BW BX BU BY BS BZ CA CB CC CD CE CF CG CH CI CJ CK CL@2 CM CN CO CP CQ BS BW BR@2
  BS@2 BR@2 CR ~@2
>`.pickRestart({
  A: "a1@12 ~@4 c#2@3 ~ e2@2 ~ e2, ~@16 c2 ~@7", B: "f#2 ~", C: "f#2@6 ~@2 g#2@4 f#2@7 e2@2 ~@3, ~@8 f#2 ~@15",
  D: "e1@13 ~@7 g#1@3 ~, ~@20 g1 ~@3", E: "a1@12 ~@3 c2 c#2@4 e2@2 ~@2", F: "e1@12 ~@8 g#1@3 ~, ~@20 g1 ~@3",
  G: "a1@12 ~@4 c#2@3 ~ e2 ~@3, ~@16 c2 ~@7", H: "e1@13 ~@6 g1 g#1@2 ~@2", I: "a1@12 ~@3 c2 c#2@4 e2 ~@3",
  J: "e1@2 ~@2 e1@2 ~@2 e1@3 ~ e1@3 ~ e1@2 ~@2 e1@2 ~@2", K: "e1 ~@11", L: "[e1 ~ f#1@42 ~@4]/2", M: "e1@7 ~",
  N: "e1@5 ~", O: "f#1@5 ~", P: "f#1@7 ~", Q: "e1@2 ~", R: "f#1@17 ~@7", S: "e1@19 ~@5", T: "f#1@3 ~", U: "f#1 g#1",
  V: "a1@2 ~@2 a1@2 ~@2 a1@2 ~@2 a1@5 ~@3 e2@2 ~@2", W: "f#2@3 ~ f#2@3 ~ f#2@2 ~@2 f#2@6 ~@6",
  X: "a1@2 ~@2 a1@2 ~@2 a1@2 ~@2 a1@7 ~ e2@2 ~@2", Y: "f#2@2 ~@2 f#2 ~@2 f#2 g#2@2 ~@2 f#2@7 ~ f#2 ~@3",
  Z: "e1@11 ~ g#1@7 ~ b1@3 ~", AA: "a1@9 ~@2 c2 c#2@4 e2@3 f#2 ~@4", AB: "e1@12 ~@7 g#1@3 ~@2, ~@19 g1 ~@4",
  AC: "a1@7 ~ a1@4 c#2@6 ~ e2@2 ~@3, ~@12 c2 ~@11", AD: "a1@8 ~@4 c#2@7 e2@2 ~@3, ~@12 c2 ~@11",
  AE: "e1@6 ~@4 g#1 ~, ~@20 g1 ~@3", AF: "a1@5 ~@2 a1@5 c#2@7 ~ e2 ~@3, ~@12 c2 ~@11",
  AG: "e1@2 ~@2 e1@2 ~ e1@3 ~ e1@3 ~@2 e1@2 ~ e1@2 ~@3", AH: "[e1 f#1@42 ~@5]/2", AI: "e1@3 ~", AJ: "f#1@13 ~@11",
  AK: "f#1@5 ~@3", AL: "e1@13 ~@11", AM: "f#1@2 ~", AN: "[e1@14 ~@9 e1@13 ~@12]/2", AO: "f#1@13 ~@3 f#1@4 g#1@3 ~",
  AP: "a1@5 ~@3 a1 ~@3 a1@7 d#2 e2@4", AQ: "f#2@3 ~@5 f#2@3 ~ f#2@8 ~@4", AR: "a1@4 a1@7 ~ a1@8 e2@3 ~",
  AS: "f#2@3 ~ f#2@3 g2 g#2@3 f#2@8 ~ e2@2 ~@2", AT: "e1@11 ~ g#1@7 ~ b1@3 ~, ~@12 g1 ~@11",
  AU: "a1@9 ~@3 c#2@8 e2@2 ~@2", AV: "e1@12 ~@7 g1 g#1@3 ~", AW: "a1@8 ~@3 c2 c#2@7 e2@3 ~@2", AX: "e1@11 ~@8 g1 g#1@4",
  AY: "a1@8 ~@4 c#2@8 e2 ~@3", AZ: "e1@12 ~@7 g1 g#1@2 ~@2", BA: "e1@2 ~@2 e1@2 ~@2 e1@3 ~ e1@2 ~@2 e1@2 ~@2 e1@2 ~@2",
  BB: "[e1 f#1@17 ~@6]/2", BC: "f#1@7 ~@5", BD: "a1@8 ~@8 a1@4 c#2 ~@3", BE: "e2 f#2@11 f#2@6 ~@2 e2@2 ~@2",
  BF: "a1@2 ~@2 a1@3 ~ a1@2 ~@2 a1@3 ~@5 c#2@2 ~@2, ~@20 c2 ~@3", BG: "f#2@2 ~@2 f#2@2 ~ f#2 g#2@3 f#2@8 ~ e2@2 ~@2",
  BH: "e1@2 ~@2 e1@3 ~ e1@2 ~@2 e1@7 g#1@2 ~@3", BI: "a1@7 ~@5 c#2@3 ~@5 f#2@3 ~", BJ: "e1@11 ~ e1@6 ~ g1 g#1@3 ~",
  BK: "a1@3 ~ a1@2 c#2@4 e2 ~, ~@12 c2 ~@11", BL: "e1@11 ~ e1@7 g1 g#1@3 ~",
  BM: "a1@6 ~ a1@4 ~ c#2@7 ~ e2 ~@3, ~@12 c2 ~@11", BN: "e1@15 ~ g#1@3 ~ b1@3 ~", BO: "a1@6 ~ a1@4 ~ c#2@8 e2@3 ~",
  BP: "[e1@3 ~ e1@3 ~ e1@3 ~ e1@3 ~ e1@2 ~ e1@2 ~@2 e1@3 ~@22]/2", BQ: "~ e1@4 ~", BR: "~@4 e1@13 ~@7",
  BS: "~@4 f#1@13 ~@7", BT: "~@4 f#1@15 ~@5", BU: "~@2 e1@7 ~@3", BV: "~@4 e1@15 ~@5", BW: "~@2 f#1@7 ~@3",
  BX: "~ f#1@4 ~", BY: "~@4 e1@17 ~@3", BZ: "~@4 f#1@9 ~@11", CA: "f#1@4 a1@7 ~@4 a1@4 ~ c#2@4, ~@20 c2 ~@3",
  CB: "e2@3 ~ f#2@6 ~@6 f#2@5 ~@3", CC: "g#1 ~ a1@5 ~ a1 ~@3", CD: "e2@3 ~ f#2@7 ~@2 g#2 ~@2 f#2@7 ~",
  CE: "e2 ~@3 e1@10 ~@2 e1@3 ~@5", CF: "g#1@4 a1@6 ~@2 a1@3 c2 c#2@7 ~", CG: "f#2@2 ~@2 e1@11 ~ e1@2 ~@5 g1",
  CH: "g#1@3 ~ a1@6 ~@2 a1@4 c#2@8, ~@16 c2 ~@7", CI: "e2@2 ~@2 e1@10 ~@2 e1@3 ~@5",
  CJ: "g#1@3 ~ a1@6 ~ a1@4 c2 c#2@8, g1 ~@23", CK: "e2@2 ~@2 e1@10 ~@2 e1@3 ~@4 g1",
  CL: "[g#1@3 ~ a1@6 ~@2 a1@2 ~@2 c#2@4 e2@3 f#2@2 ~@3 e1@3 ~ e1@2 ~@2 e1@2 ~@2 e1@2 ~@2 e1@2 ~@2]/2",
  CM: "e1 ~ e1 ~@9", CN: "~@4 e1 ~ f#1@3 ~ e1 ~ f#1@12", CO: "~@10 e1 f#1", CP: "~ g#1@2 ~ e1@11 ~ e1@8, g1 ~@11",
  CQ: "~ e1@3 ~@2", CR: "~ f#1@3 ~@2",
})).s("gm_fretless_bass").gain(0.44)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A B C D E F G H I J K L M N O@2 P Q R@2 S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN O@2 P Q R@2 S T U V
  W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN O@2 P Q R@2 S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM
  AN AO AP AQ AR AS AT AU AV AS AW AX AY AZ BA@2 BB BC BD BE BF BG BH BI@2 BJ@2 BK@2 BL@2 AQ AR AS AT AU AV AS AW AX AY
  AZ ~@2
>`.pickRestart({
  A: "[c#4,e4,a4]@12 [c#4,e4,a4]@8 [a3,c#4] ~@3, [e3,a3]@5 ~", // A A5
  B: "[a3,c#4,f#4]@11 ~ [a3,c#4,f#4]@4 [f#3,a3,c#4]@4 [c#4,f#4] ~@3, ~@16 f#4@3 ~@5", // F#m F#5
  C: "[e3,c#4,e4]@12 [e3,a3,c#4,e4,a4]@8 [e3,a3,c#4] ~@3", // C#m A
  D: "[a3,c#4]@8 c#4@4 [a3,c#4,f#4]@4 [c#3,f#3,a3,c#4,f#4]@4 [a3,c#4,f#4] ~@3, [c#3,f#3] ~", // A F#m F#5
  E: "[g#3,b3,e4]@12 [g#3,b3,e4]@7 ~ [g#3,b3,e4] ~@3, e3@5 ~", // E
  F: "[a3,d4,e4]@8 [a3,c#4,e4]@7 ~ [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4] ~@3, e3 ~", // Asus4 A
  G: "[g#3,b3]@12 [g#3,b3,e4]@7 ~ [g#3,b3,e4] ~@3, [b2,e3]@11 ~", // G#m E E5
  H: "[e3,a3,d4,e4]@8 ~@4 [c#4,e4]@4 [c#4,e4]@4 [e3,a3,c#4,e4] ~@3, ~@3 [e3,a3]@2 ~", // Dsus2 C#m A A5
  I: "[g#3,b3,e4]@6 [g#3,b3,e4]@4 [b3,e4] ~, [b2,e3]@11 ~", // E E5
  J: "[d4,e4]@8 e4@4 e4@3 ~ [c#4,e4]@4 [a3,c#4,e4] ~@3, a3@11 ~ [e3,a3]@10 ~@2", // Dsus2 C#m A A5
  K: "[e3,g#3,b3,e4]@6 [e3,g#3,b3]@4 [g#3,b3,e4] ~, ~@12 e4@7 ~@5", // E
  L: "[d4,e4]@8 [a3,c#4]@3 ~ [a3,c#4,e4]@4 [a3,c#4,e4]@4 [a3,c#4,e4] ~@3, a3 ~@3", // Dsus2 A
  M: "[b2,e3,g#3] b2 [b2,e3] [e2,b2,e3] [b2,e3,g#3]!2, ~@2 e2", N: "[b2,e3,g#3] ~@11",
  O: "[[e2,b2]@2 [f#2,c#3]@10 [a3,c#4,f#4] ~@11 f#2@12 [f#3,a3,c#4,f#4]@2 ~@10, ~@11 c#3@8 ~@5]/2", // E5 F#5 F#m
  P: "~@12 [g#3,b3,e4] ~@11, [e2,b2]@2 ~", Q: "~@6 [g#3,b3,e4] ~@5, [e2,b2]@5 ~@3",
  R: "[[f#2,c#3]@12 [a3,c#4,f#4] ~@9 c#3@14 [a3,c#4,f#4]@2 ~@10]/2", S: "[e2,b2]@6 [g#3,b3,e4] ~@5",
  T: "~@12 [g#3,b3,e4] ~@11, [e2,b2]@5 ~@3", U: "[f#2,c#3]@12 [a3,c#4,f#4] ~@11",
  V: "~@12 [a3,c#4,f#4] ~@11, [f#2,c#3]@5 ~@3", W: "[e2,b2]@12 [g#3,b3,e4] ~@11", X: "e2@12 [b3,e4] ~@11",
  Y: "[f#2,c#3]@6 [a3,c#4,f#4] ~@5", Z: "[f#2,c#3]@12 [b3,e4]@11 ~", AA: "[a2,e3,c#4,e4]@6 [e3,a3,c#4,e4]@5 ~",
  AB: "c#3@3 [c#3,f#3,a3,c#4,f#4]@2 ~, f#2@5 ~", AC: "[e3,a3,c#4]@6 [a3,c#4,e4,a4]@5 ~",
  AD: "[f#3,a3,c#4]@3 [f#3,a3,c#4,f#4]@2 ~, c#3@7 ~", AE: "[e3,g#3,b3,e4]@6 [e3,g#3,b3]@5 ~, b2@11 ~, ~@12 e4@7 ~@5",
  AF: "[e3,a3,d4,e4]@7 ~ [a3,c#4,e4]@8 [e3,a3,c#4,e4]@4 e4 ~@3", // Dsus2 A
  AG: "g#3@8 g#3@4 [e3,g#3,b3,e4]@8 e4 ~@3, [e3,b3,e4] ~", // E E5
  AH: "[d4,e4]@7 ~ [c#4,e4]@8 [a3,c#4,e4]@4 [e3,a3,c#4] ~@3, [e3,a3]@2 ~", // Dsus2 C#m A A5
  AI: "[e3,g#3,b3] [b3,e4], b2@11 ~, ~@3 [e3,g#3]@2 ~", AJ: "[a3,d4,e4]@7 ~ [a3,c#4,e4]@8 [a3,c#4,e4]@4 ~@4, e3@5 ~",
  AK: "[e3,g#3,b3] [e3,b3,e4], ~@3 g#3@2 ~", AL: "[e3,a3,d4,e4]@8 [a3,c#4,e4]@8 [e3,a3,c#4,e4]@4 e3 ~@3",
  AM: "e3 ~ e2@2 b2@2 [b2,e3,g#3]@2 [b2,e3,g#3]@2 [b2,e3,g#3]@2, b2 ~ e2, ~@20 b3 ~@3", AN: "[b2,e3,g#3] ~@23",
  AO: "~@4 [e2,b2]@2 [f#2,c#3]@10 [a3,c#4,f#4] ~@7", AP: "~@2 f#2@6 [f#3,a3,c#4,f#4] ~@3, ~ c#3@8 ~@3",
  AQ: "~@16 [g#3,b3,e4] ~@7, ~ [e2,b2]@4 ~", AR: "~@8 [g#3,b3,e4] ~@3, ~@4 [e2,b2]@15 ~@5",
  AS: "~@4 [f#2,c#3]@12 [a3,c#4,f#4] ~@7", AT: "~ c#3@7 [a3,c#4,f#4] ~@3", AU: "~@2 [e2,b2]@6 [g#3,b3,e4] ~@3",
  AV: "~@16 [g#3,b3,e4] ~@7, ~@4 [e2,b2]@15 ~@5", AW: "~@16 [a3,c#4,f#4] ~@7, ~@4 [f#2,c#3]@15 ~@5",
  AX: "~@4 [e2,b2]@12 [g#3,b3,e4] ~@7", AY: "~@4 e2@12 [b3,e4] ~@7", AZ: "~@2 [f#2,c#3]@6 [a3,c#4,f#4] ~@3",
  BA: "[~@4 [f#2,c#3]@12 [b3,e4]@11 ~ [a2,e3,c#4,e4]@12 [e3,a3,c#4,e4]@8]/2", // F#5 E5 A
  BB: "~ c#3@3 [c#3,f#3,a3,c#4,f#4]@2, ~ f#2@5", BC: "~ [e3,a3,c#4]@3 [a3,c#4,e4,a4]@2",
  BD: "~ [f#3,a3,c#4]@3 [f#3,a3,c#4,f#4]@2, ~ c#3@5", BE: "~ [e3,g#3,b3,e4]@3 [e3,g#3,b3,e4]@2, ~ b2@5",
  BF: "~@4 [e3,a3,d4,e4]@7 ~ [a3,c#4,e4]@8 [e3,a3,c#4,e4]@4", // Dsus2 A
  BG: "e4 ~@3 g#3@8 g#3@4 [e3,g#3,b3,e4]@8, ~ [e3,b3,e4]@3 ~@2", // E E5
  BH: "e4 ~@3 [d4,e4]@7 ~ [c#4,e4]@8 [a3,c#4,e4]@4, ~ [e3,a3]@4 ~", // Dsus2 C#m A A5
  BI: "[[e3,a3,c#4] ~@3 [e3,g#3,b3]@12 [b3,e4]@12 [a3,d4,e4]@7 ~ [a3,c#4,e4]@8 [a3,c#4,e4]@4, ~@2 b2@11 ~@11, ~@4 [e3,g#3]@2 ~ e3@5]/2", // A E E5 Asus4 A E
  BJ: "[~ [e3,g#3,b3]@3 [e3,b3,e4]@3 [e3,a3,d4,e4]@2 [a3,c#4,e4]@2 [e3,a3,c#4,e4], ~@2 g#3 ~@3]/2", // E E5 Dsus2 A
  BK: "[e3 ~@3 e3@2 ~@2 e2@4 b2@4 [b2,e3,g#3]@4 [b2,e3,g#3]@4 [b2,e3,g#3]@4 [b2,e3,g#3] ~@19, ~@2 b2@4 ~@4 e2@5 ~@9, ~@24 b3 ~@23]/2", // E
  BL: "[~@4 [e2,b2]@2 [f#2,c#3]@4 [e2,b2]@2 c#3@3 ~@2 f#4@23 ~@4 [a3,c#4,f#4]@4, ~@3 f#2@2 ~@7, ~@2 c#4@3 ~]/2", // E5 F#5 E5 F#m
})).s("gm_electric_guitar_clean").gain(0.33).pan(0.1)

// chords · electric guitar clean · "CLEAN GTR" · soft notes
const electric_guitar_clean_2 = note(`<
  A B C D E F ~@3 G H I J ~@4 K L M ~@2 L ~@2 N ~ O P Q R S T U V W X Y Z AA AB ~@4 K L M ~@2 L ~@2 N ~ O P Q R S T U V
  W X Y Z AA AB ~@4 K L M ~@2 L ~@2 N ~ O P Q R S T U V W X Y Z AA AB ~@4 AC AD AE ~@2 AD ~@2 AF ~ AG@2 AH AI AJ ~ AK AL
  AM AN AO AP AQ AR ~ AS@3 AC AD AE ~@2 AD ~@2 AF ~@3
>`.pickRestart({
  A: "a2@5 ~", B: "[f#2,c#3]@7 ~, f#3@2 ~", C: "a2@7 ~, a3 ~", D: "~@2 a3 [c#3,f#3] ~@2", E: "b2@5 ~", F: "a2 ~",
  G: "~@2 c#4!2 ~@2, e3@11 ~@13", H: "b2 ~", I: "e3@11 ~@13", J: "~ e3 e2 ~@3", K: "e3@6 e3 ~@5", L: "f#3@7 ~@5",
  M: "~@6 f#3 ~@5, f#2@5 ~@3", N: "b2@12 g#3 ~@11", O: "~@12 g#3@11 ~", P: "a3@3 [a2,a4]@2 ~", Q: "[f#3,a3] ~",
  R: "~@6 e3@5 ~, a2@5 ~", S: "f#2@5 ~", T: "~@10 e4 ~", U: "~ e3 ~, a2@5 ~", V: "~@6 b2@5 ~", W: "~@16 e3@4 e4 ~@3",
  X: "~@10 e3 ~", Y: "a2@19 ~@5", Z: "[b2,e4]@3 b2@2 ~", AA: "~@8 e3@8 ~@4 a3 ~@3, a2@17 ~@7",
  AB: "e2 ~ e2@2 ~@2, ~@2 e3 ~@3", AC: "~@2 e3@6 e3 ~@3", AD: "~@2 f#3@7 ~@3", AE: "~@8 f#3 ~@3, ~@4 f#2@15 ~@5",
  AF: "~@4 b2@12 g#3 ~@7", AG: "[~@16 g#3@11 ~ a3@12 [a2,a4]@8]/2", AH: "~ [f#3,a3]@3 ~@2", AI: "~@2 e3, ~ a2@5",
  AJ: "~ f#2@5", AK: "e4 ~@5 e3@4 ~@2, ~ a2@5", AL: "~@2 b2", AM: "~@5 e3", AN: "e4 ~@23", AO: "e3@2 ~@2 a2@19 ~",
  AP: "~ [b2,e4]@3 b2@2", AQ: "~@3 e3@2 ~, ~@4 a2@17 ~@3", AR: "a3 ~@3 e2@4 ~@4 e2@8 ~@4, ~@3 e3 ~@2",
  AS: "[~@4 [f#3,a3]@6 [a3,c#4] ~@7, ~@15 c#3@34 ~@23, ~@20 f#3@5 ~@11]/3", // F#m A
})).s("gm_electric_guitar_clean").gain(0.16).pan(0.1)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@13 A ~ B ~ C ~ A ~ D ~ E ~ A ~ D ~@13 A ~ B ~ C ~ A ~ D ~ E ~ A ~ D ~@13 A ~ B ~ C ~ A ~ F ~ G ~ A ~ F ~@13 A ~ H I
  J K L I M I N O L I M I ~@12 L I H I J K L I P I N I L I ~@2
>`.pickRestart({
  A: "~@4 f#4 g4 f#4 e4 [c#4,f#4]@4 [b3,e4]@4 [a3,c#4]@4 [g3,b3]@2 ~@2, ~@4 c#4@3 ~@17", // F#5 E5 A G
  B: "~@4 f#4 g4 f#4 b3 [c#4,f#4]@3 ~ [b3,e4]@4 [a3,c#4]@4 [g3,b3]@2 ~@2, ~@4 c#4@3 ~@17", // F#5 E5 A G
  C: "~@4 f#4 g4 f#4 e4 [c#4,f#4]@3 ~ e4@4 [a3,c#4]@3 ~ [g3,b3]@3 ~, ~@4 c#4@3 ~@5 b3@3 ~@9", // F#5 A G
  D: "~@4 f#4 g4 [e4,f#4] ~ [c#4,f#4]@4 [b3,e4]@4 [a3,c#4]@4 [g3,b3]@2 ~@2, ~@4 c#4@3 ~@17", // Esus2 F#5 E5 A G
  E: "~@5 g4 f#4 e4 [c#4,f#4]@4 [b3,e4]@4 [a3,c#4]@4 g3@2 ~@2, ~@2 [c#4,f#4] ~@9", // F#5 E5 A F#5
  F: "~@4 f#4 g4 [b3,e4,f#4] ~ [c#4,f#4]@4 [b3,e4]@4 [a3,c#4]@4 [g3,b3]@2 ~@2, ~@4 c#4@3 ~@17", // Bsus4 F#5 E5 A G
  G: "~@5 g4 f#4 e4 [c#4,f#4]@4 [b3,e4]@4 [a3,c#4]@4 [g3,b3]@2 ~@2, ~@2 [c#4,f#4] ~@9", // F#5 E5 A G F#5
  H: "~@8 f#4 g4 f#4 b3 [c#4,f#4]@3 ~ [b3,e4]@4 [a3,c#4]@4, ~@8 c#4@3 ~@13", I: "[g3,b3] ~@11",
  J: "~@8 f#4 g4 f#4 e4 [c#4,f#4]@3 ~ e4@4 [a3,c#4]@3 ~, ~@8 c#4@3 ~@5 b3@3 ~@5", K: "[g3,b3] ~@7",
  L: "~@8 f#4 g4 f#4 e4 [c#4,f#4]@4 [b3,e4]@4 [a3,c#4]@4, ~@8 c#4@3 ~@13", // F#5 E5 A
  M: "~@8 f#4 g4 [e4,f#4] ~ [c#4,f#4]@4 [b3,e4]@4 [a3,c#4]@4, ~@8 c#4@3 ~@13", // Esus2 F#5 E5 A
  N: "~@9 g4 f#4 e4 [c#4,f#4]@4 [b3,e4]@4 [a3,c#4]@4, ~@4 [c#4,f#4] ~@7", O: "g3 ~@11",
  P: "~@8 f#4 g4 [b3,e4,f#4] ~ [c#4,f#4]@4 [b3,e4]@4 [a3,c#4]@4, ~@8 c#4@3 ~@13", // Bsus4 F#5 E5 A
})).s("gm_overdriven_guitar").gain(0.49).pan(0.6)

// chords · overdriven guitar · "OVERDRIVE" · soft notes
const overdriven_guitar_soft = note(`<
  ~@13 A ~ B ~ A ~ A ~ C ~ D ~ A ~ C ~@13 A ~ B ~ A ~ A ~ C ~ D ~ A ~ C ~@13 A ~ B ~ A ~ A ~@3 A ~ A ~@15 A ~ E ~ F ~ F
  ~ G ~ F H F ~ G ~@13 F ~ E ~ F ~ F ~@3 F ~ F ~@3
>`.pickRestart({
  A: "~@7 b3 ~@16", B: "~@7 e4 ~@16", C: "~@6 b3 ~@17", D: "~@7 b3 ~@12 b3@2 ~@2", E: "~@11 e4 ~@12", F: "~@11 b3 ~@12",
  G: "~@10 b3 ~@13", H: "b3 ~@11",
})).s("gm_overdriven_guitar").gain(0.27).pan(0.6)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@12 A ~@27 B ~@27 B ~@27 B ~@27 C ~@16>".pickRestart({
  A: "~ x ~@4", B: "~ x!2 ~@3", C: "~@2 x!2 ~@2",
})).gain(0.22)

// drums · hihat
const hihat = s("hh").struct(`<
  A@12 B ~ C A@9 D A@15 B ~ C A@9 D A@3 C A@3 C A@7 E ~ C A@17 C A C A@5 B ~ F A@9 G C A@14 E ~ H I C A@7 G C A B ~
>`.pickRestart({
  A: "x!6", B: "x", C: "~ x!5", D: "x ~ x ~ x ~@2 x ~@4", E: "x!2 ~@4", F: "~@2 x!4", G: "x ~ x ~ x ~ x ~@2 x ~@2",
  H: "~@4 x!2", I: "x!3 ~@3",
})).gain(0.27)

// drums · open hat
const open_hat = s("oh").struct("<~@24 A ~@27 A ~@55 B C ~@26 B C ~@3>".pickRestart({
  A: "~@6 x ~@4 x", B: "~@2 x", C: "~ x ~@10",
})).gain(0.49)

// drums · crash
const crash = s("cr").struct("<~@14 A ~@27 A ~@13 B ~@3 B ~@3 B ~@5 A ~@17 B ~ B ~@7 C ~@27 D ~@14>".pickRestart({
  A: "x!2 ~@10", B: "x", C: "~@2 x!2 ~@8", D: "~@2 x!2 ~ x!2 ~@5",
})).gain(0.49)

// … 4 more lines

More by McCartney