Strudelify

Whole Lotta Shakin' Goin' On

The Beatles

KeyC majorTempo164 bpm
0:00/0:00
// Whole Lotta Shakin' Goin' On — The Beatles
// 164 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 146 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(164/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.

// bass · acoustic bass · "BASS"
const bass = note(`<
  A@4 B@2 A@2 C@2 A@2 D A@2 D E@2 D A F C A D A@4 E B D A F C D@4 A@2 E@2 D A F@2 A D A@3 D E B D A C F A D@2 A D A B@2
  A D C F A@2 D A@3 B@2 A D F@2 D@2 A@4 E B D A F C D@2 A D A@2 E@2 D@2 F C D A D A D A B E D A F C D@4 A D B@2 A D F C
  A D A D@2 A B E D@2 C F D A G H
>`.pickRestart({
  A: "c2@2 ~ c2 e2@2 ~ e2 g2@2 ~ g2 a2@2 ~ g2", B: "f2@2 ~ f2 a2@2 ~ a2 c3@2 ~ c3 d3@2 ~ c3",
  C: "g2@2 ~ g2 b2@2 ~ b2 d3@2 ~ d3 e3@2 ~ d3", D: "c2@2 ~ c2 c2@2 ~ c2 c2@2 ~ c2 c2@2 ~ c2",
  E: "f2@2 ~ f2 f2@2 ~ f2 f2@2 ~ f2 f2@2 ~ f2", F: "g2@2 ~ g2 g2@2 ~ g2 g2@2 ~ g2 g2@2 ~ g2",
  G: "c2 ~@2 c2!2 ~@2 c2!2 ~@2 c2!2 ~@2 c2", H: "c2@5 ~@2 c2@7 ~@2",
})).s("gm_acoustic_bass").gain(0.52).pan(0.3)

// chords · piano
const piano = note(`<
  A B C D E F G H I J K@2 L M N H O P Q H R S M L@4 H O T L N S R N H U V Q W X F U Y Z@2 Y@2 Q N G N E T L H J I M@2
  N@2 M W T F G Q R J M N G M@2 L E AA G L J AB Q L@4 H O T L N S R N H U Y V N X F U@2 Z@2 V Q V@2 Y V AC AA V Y Z@2 V
  Y U V U Q AC@2 U Y Z@2 Y N U V Y U AC@2 Y@2 Z@2 U Q AD AE
>`.pickRestart({
  A: "[c3,g3]@2 ~ [c3,g3,e4,g4,c5] [c3,a3]@2 ~ [c3,a3] [c3,g3,e4,g4,c5] ~@2 [c3,g3] [c3,a3]@2 ~ [c3,a3,c5]", // C5 C F C C5 F
  B: "[c5,e5,g5]!2 ~ [c3,g3,c5,e5,g5] [c5,f5,a5]!2 ~ [c3,a3,c5,f5,a5] [c3,g3,c5,e5,g5] [c5,e5,g5] ~ [c3,g3,c5,e5,g5] [c5,f5,a5]!2 ~ [c3,a3,c5,f5,a5], [c3,g3] ~ [c3,a3] ~@3 [c3,a3] ~", // C F C F C5 F
  C: "~@3 [e4,c5]@2 ~@3 [e4,g4,c5] ~@7, ~@3 g4 ~@12", // C
  D: "[e4,g4,c5] ~@6 [e4,g4,c5] ~@3 c6@2 [g5,a5,b5] [c5,d5,e5,f5] [a4,b4]", // C G Dm7 Asus2
  E: "[f3,c4] ~@2 [f3,c4] [f3,c4,d4] ~@2 [f3,d4] [f3,c4] ~@2 [f3,c4] [f3,d4] ~@2 [f3,d4], [a4,c5,f5]", // F5 Dm7 Dm F5 Dm F
  F: "[f3,c4] ~@2 [f3,c4] f3@2 ~ [f3,d4] [f3,d#5,g#5]@2 ~ [f3,c4] [f3,d4]@2 ~ [f3,d4], ~@4 d4 ~@3 c4 ~@2 [c5,f5]@5", // F5 Dm Fm7 F5 Dm F5
  G: "[e4,g4,c5] ~@6 [e4,g4,c5]@3 ~@2 b5 [c5,d5,e5,f5,g5,a5] [a4,b4] ~, ~@11 c6@2 ~@3", // C Dm7 Asus2
  H: "[c3,g3]@2 ~ [c3,g3,e4,g4,c5] [c3,a3]@2 ~ [c3,a3] [e4,g4,c5] ~@2 [c3,g3] c3@2 ~ [c3,a3], ~@8 [c3,g3]@2 ~@2 a3 ~@3", // C5 C F C C5 F C5
  I: "[g2,d3] ~@2 [g2,d3] [g2,e3]@2 ~ [g2,e3] [g2,f4,a#4]@2 ~ [g2,d3] [g2,e3]@2 ~ [g2,e3], ~@8 d3 ~@2 [d4,g4]@5", // G5 C Gm7 G5 C G5
  J: "[g2,d3] ~@2 [g2,d3] g2@2 ~ [g2,e3] [g2,f4,a#4]@2 ~ [g2,d3] [g2,e3]@2 ~ [g2,e3], ~@4 e3 ~@3 d3 ~@2 [d4,g4]@5", // G5 C Gm7 G5 C G5
  K: "[[c3,g3] ~@2 [c3,g3] [c3,g3,a3] ~@2 [c3,a3] [c3,g3] ~@2 [c3,g3] [c3,a3] ~@2 [c3,a3] [c3,g3] ~@2 [c3,g3] [c3,a3] ~@2 [c3,a3] [c3,g3] ~@2 [c3,g3] [c3,a3] ~@2 [c3,a3], [e4,g4,c5]]/2", // C5 Am7 F C5 F C5 F C5 …
  L: "[c3,g3] ~@2 [c3,g3] [c3,a3] ~@2 [c3,a3] [c3,g3] ~@2 [c3,g3] [c3,a3] ~@2 [c3,a3]", // C5 F C5 F
  M: "[c3,g3] ~@2 [c3,g3] [c3,g3,a3] ~@2 [c3,a3] [c3,g3] ~@2 [c3,g3] [c3,a3] ~@2 [c3,a3], [e4,g4,c5]", // C5 Am7 F C5 F C
  N: "[c3,g3] ~@2 [c3,g3] c3@2 ~ [c3,a3] [c3,a#4,d#5]@2 ~ [c3,g3] [c3,a3]@2 ~ [c3,a3], ~@4 a3 ~@3 g3 ~@2 [g4,c5]@5", // C5 F Cm7 C5 F C5
  O: "[a4,c5,f5] ~@6 [a4,c5,f5]@3 ~@2 e6 [f5,g5,a5,a#5,c6,d6] [d5,e5] ~, ~@11 f6@2 ~@3", // F Dm7 Dsus2
  P: "[f3,c4]@2 ~ [f3,c4,a4,c5,f5] [f3,d4]@2 ~ [f3,d4] [a4,c5,f5] ~@2 [f3,c4] f3@2 ~ [f3,d4], ~@8 [f3,c4]@2 ~@2 d4 ~@3", // F5 F Dm F F5 Dm F5
  Q: "[c3,g3] ~@2 [c3,g3] [c3,a3]@2 ~ [c3,a3] [c3,a#4,d#5]@2 ~ [c3,g3] [c3,a3]@2 ~ [c3,a3], ~@8 g3 ~@2 [g4,c5]@5", // C5 F Cm7 C5 F C5
  R: "[g2,d3] ~@2 [g2,d3] [g2,e3] ~@2 [g2,e3] [g2,d3] ~@2 [g2,d3] [g2,e3] ~@2 [g2,e3]", // G5 C G5 C
  S: "[g2,d3] ~@2 [g2,d3] [g2,d3,e3] ~@2 [g2,e3] [g2,d3] ~@2 [g2,d3] [g2,e3] ~@2 [g2,e3], [b3,d4,g4]", // G5 Em7 C G5 C G
  T: "[f3,c4] ~@2 [f3,c4] [f3,d4] ~@2 [f3,d4] [f3,c4] ~@2 [f3,c4] [f3,d4] ~@2 [f3,d4]", // F5 Dm F5 Dm
  U: "[c3,g3]@2 ~ [c3,g3,c5,c6] [d#5,b5,c6] [e5,c6] ~ [c3,a3,f5,c6] [f#5,c6] [g5,c6] ~ [c3,g3,f#5,c6] [f5,c6,d6] [d#5,c6] ~ [c3,a3,e5,c6], ~@2 [c3,a3] ~ [c3,g3] ~ [c3,a3] ~", // C5 Cm C F F#dim C5 C Dm7 …
  V: "[c3,g3]@2 ~ [c3,g3] [c3,a3,g4,c5]@2 ~ [c3,a3,g4,c5] [c3,g3,a#4]@2 ~ [c3,g3,a#4,d#5] [c3,a3]@2 ~ [c3,a3,f4,a#4], ~@8 d#5 ~@3 [g4,c5] ~@3", // C5 Am7 C7 Cm7 F C5
  W: "[c5,e5]!2 ~ [c3,g3,c5,e5] [a#4,d5]!2 ~ [c3,a3,a#4,d5] [g3,a4,c5] [a4,c5] ~ [c3,g3,a4,c5] [g4,a#4]!2 ~ [c3,a3,g4,a#4], [c3,g3] ~ [c3,a3] ~ c3 ~ [c3,a3] ~", // C A# D7 Am7 Am Am7 Gm C7 …
  X: "[f3,c4]@2 ~ [f3,c4] [f3,d4,c5,f5]@2 ~ [f3,d4,c5,f5] [f3,c4,d#5]@2 ~ [f3,c4,d#5,g#5] [f3,d4]@2 ~ [f3,d4,a#4,d#5], ~@8 g#5 ~@3 [c5,f5] ~@3", // F5 Dm7 F7 Fm7 Dm A# F5
  Y: "[c3,g3]@2 ~ [c3,g3,e5,g5,c6] [c3,a3]@2 ~ [c3,a3] [e5,g5,c6] ~@2 [c3,g3] [c3,a3]@2 ~ [c3,a3], ~@4 [c3,g3] ~@3", // C5 C F C C5 F C5
  Z: "[g2,d3]@2 ~ [g2,d3,b4,d5,g5] [g2,e3]@2 ~ [g2,e3] [b4,d5,g5] ~@2 [g2,d3] [g2,e3]@2 ~ [g2,e3], ~@4 [g2,d3] ~@3", // G5 G C G G5 C G5
  AA: "[f3,c4] ~@2 [f3,c4] [f3,d4]@2 ~ [f3,d4] [f3,d#5,g#5]@2 ~ [f3,c4] [f3,d4]@2 ~ [f3,d4], ~@8 c4 ~@2 [c5,f5]@5", // F5 Dm Fm7 F5 Dm F5
  AB: "[g4,b4]!2 ~ [g2,d3,g4,b4] [f4,a4]!2 ~ [g2,e3,f4,a4] [d3,e4,g4] [e4,g4] ~ [g2,d3,e4,g4] [d4,f4]!2 ~ [g2,e3,d4,f4], [g2,d3] ~ [g2,e3] ~ g2 ~ [g2,e3] ~", // G F Fmaj7 Em7 Em Em7 Dm G7 …
  AC: "[f3,c4]@2 ~ [f3,c4,f5,f6] [g#5,e6,f6] [a5,f6] ~ [f3,d4,a#5,f6] [b5,f6] [c6,f6] ~ [f3,c4,b5,f6] [a#5,f6,g6] [g#5,f6] ~ [f3,d4,a5,f6], ~@2 [f3,d4] ~ [f3,c4] ~ [f3,d4] ~", // F5 C# Dm A# Bdim F5 F Gm7 …
  AD: "[e4,g4,c5] ~@2 [e4,g4,c5] [f4,a4,c5] ~@2 [f4,a4,c5] [e4,g4,c5] ~@2 [e4,g4,c5] [f4,a4,c5] ~@2 [f4,a4,c5]", // C F C F
  AE: "[e4,g4,c5]@4 ~@3 [e5,g5,c6]@8 ~", // C
})).s("gm_piano").gain(0.64)

// other · piano
const piano_2 = note(`<
  A@4 B@2 A@2 C@2 A@2 D@3 ~ E@3 F@2 G@3 H@2 I@3 J K L@2 M@2 ~ N@2 O@2 P ~ Q@3 R@2 ~ S T U V W@2 X Y Z AA AB ~ AC AD AE
  AF AG AH AI AJ AK AL AM AN AO@2 AP@2 AQ AR AS@2 AT AU AV ~ H@2 AW AX@2 J K L@2 M@2 ~ AY@2 AZ@2 BA@2 BB@3 BC@2 ~ BD@2
  BE@2 BF@2 BG@3 BH@2 ~ BI ~ BJ@2 BK BL BM@3 BN@2 ~ BI ~ BJ@2 BK BL BM@3 BN@2 ~@3
>`.pickRestart({
  A: "c2@2 ~ c2 e2@2 ~ e2 g2@2 ~ g2 a2@2 ~ g2", B: "f2@2 ~ f2 a2@2 ~ a2 c3@2 ~ c3 d3@2 ~ c3",
  C: "g2@2 ~ g2 b2@2 ~ b2 d3@2 ~ d3 e3@2 ~ d3",
  D: "[d#4@2 ~ d4 ~@3 c4 d#4 ~@2 c4@2 ~@2 d#4@3 ~ d#4 d4 ~ c4 ~ d#4@2 d4 ~ c4 ~@2 a3@3 c4@9 ~@5]/3",
  E: "[d#4 ~ d#4 ~ d4 ~ c4 ~ d#4@2 ~ d4@2 ~@2 d#4@2 ~@2 d#4 d4 ~ c4 ~ d#4@2 ~@2 c4 ~@2 c4@15 ~@2]/3",
  F: "[~@11 d#4!2 ~@2 d#4@3 d4@10 ~@3 b3]/2", G: "[d#4 ~@3 d4 ~@2 c4 d#4 ~ d4 ~ c4 ~@2 a3@2 ~@2 c4@23 ~@6]/3",
  H: "[d#4 ~ d#4 ~ d4 ~ c4 ~ d#4@2 ~ c4@3 ~ d#4@3 ~ d#4 d4 ~ c4 ~ d#4@2 ~@2 c4@2 ~ a3]/2",
  I: "[c4@25 ~@6 d#4@3 ~ d4 ~@3 c4 d#4 ~@2 c4@3 ~ d#4]/3", J: "d#4@2 ~ d#4 d4@2 ~ c4 d#4@3 ~ d4@2 ~ c4", K: "c4@5 ~@3",
  L: "[~@11 d#4!2 ~@2 d#4@3 ~ d4@9 ~@3 c4]/2", M: "[d#4@2 ~@2 d4 ~@2 c4 d#4 ~@2 c4 ~@3 c4@13 ~@4]/2",
  N: "[c4@2 ~@6 c4@3 ~ a3 ~@2 c4@2 ~@15]/2", O: "[c4@6 ~@2 c4@3 ~ a3 ~@2 c4@2 ~@15]/2",
  P: "f4@6 ~@2 f4@2 ~@2 d#4 ~ f4@2", Q: "[c4@7 ~ c4@3 ~ a3 ~ c4@10 ~@3 d#4!2 ~@2 d#4@4 d4@10 ~@2 c4]/3",
  R: "[d#4@2 ~@2 d4 ~ c4 ~ d#4 ~ d4 ~ c4 ~@2 a3@2 ~ c4@11 ~@3]/2", S: "~@3 g5 g5@2 ~ f5 g5@3 ~@4 e5",
  T: "g5@2 ~ a5@3 ~@10", U: "~@2 c5@5 ~ c5@6 ~ a4", V: "c5@8 ~ c5 ~ c5!4 ~",
  W: "[f5@6 ~@2 f5@3 ~ d#5@2 ~ f5@2 d#5 f5 d#5 f5 [d#5,f5] d#5 [d#5,f5]!2 [d#5,e5,f5] f5 ~ g5@2 ~@2]/2", // D#sus2
  X: "~@2 c5 ~ d#5@5 ~ a4 ~ c5@2 ~ c5", Y: "a4@5 ~@2 g4@4 ~ c5!3 ~", Z: "c5 e5 ~ d#5 ~ d5@9 ~ c5",
  AA: "~@2 d#5 ~ d5@2 c5 ~ d#5@2 d5 ~ c5 ~ a4 ~", AB: "c5!3 ~ c5!3 ~ c5!3 ~ c5!3 ~", AC: "~@3 g4 a4@2 ~ g4 c5 ~@7",
  AD: "~@3 g4 a4 ~@6 c5!3 ~ c5", AE: "~@2 g4 ~ a4@2 ~ g4 c5@5 ~ c5@2", AF: "~@3 d5@3 d#5 ~ d#5!8", AG: "d5 c5@3",
  AH: "~@3 d#5 d5@2 c5 ~ d#5@2 d5 ~ c5 ~ a4 ~", AI: "g4 [g4,a4] g4 ~ g4!3 ~ g4!3 ~ g4!3 ~",
  AJ: "g4!2 ~ g4!3 ~ g4!3 ~ g4!2 c5 [b4,c5] ~", AK: "d5 ~@2 d5 ~@10 d5 ~", AL: "d#5 ~ d5 ~ c5@4 d#5 d5 c5 ~@4 a4",
  AM: "~ c5@6 ~", AN: "~@2 g4!4 ~ g4!3 ~ g4!4 ~", AO: "[g5@5 ~@2 e5@3 ~ c5 a4@2 ~ c5@4 c5@6 ~@7]/2",
  AP: "[~@3 g5 ~@2 e5@3 ~@2 c5@3 ~ a4@3 c5 ~ c5!3 ~ c5!2 ~ c5!3 ~@2]/2",
  AQ: "~@2 f5 ~ f5@2 ~ d#5 f5@2 ~ d#5 f5@2 ~ d#5", AR: "f5 ~@2 g5@3 ~@10",
  AS: "[g5 g5@2 ~ e5@5 ~@2 c5 a4@2 ~ c5@3 a4 ~ d5 ~@2 c5@3 ~ d#5 ~@3 d#5]/2", AT: "d#5 d5@6 ~",
  AU: "~@3 c5 d#5 d5 c5 ~ [d5,d#5] c5 d#5 d5 c5 d#5 d5 c5", AV: "a4 ~@2 c5@11 ~@2", AW: "c4!4",
  AX: "[c4@4 c4@4 c4@4 ~@3 d#4@3 ~ d4 ~@3 c4 d#4 ~@2 c4@3 ~ d#4]/2",
  AY: "[[c4,g4]@2 ~@2 d#4@4 c4@2 ~@2 a3@2 ~ c4@7 ~@10]/2", AZ: "[g4@2 ~@2 d#4@3 ~ c4@2 ~@2 a3@2 ~ c4@9 ~@8]/2",
  BA: "[f4@6 ~@2 f4@3 ~ d#4 ~ f4@4 ~ g4 ~@12]/2",
  BB: "[g4@2 ~@2 d#4@4 c4@2 ~@2 a3@2 ~ c4@6 ~@5 d#4 ~ d#4 ~@2 d#4@4 d4@11 ~ c4]/3",
  BC: "[d#4@3 ~ d4@2 ~ c4 d#4 ~@2 d4 c4 ~@2 a3@3 ~ c4@11 ~@2]/2", BD: "[c4 ~@7 c4 ~@3 a3 ~@2 c4@3 ~@14]/2",
  BE: "[c4@2 ~@6 c4@3 ~ a3@2 ~ c4@2 ~@15]/2", BF: "[f4@7 ~ f4@3 ~ d#4 ~@2 f4@3 g4 ~@13]/2",
  BG: "[~@4 c4@3 ~ c4@3 ~ a3@2 ~ c4@2 ~@10 d#4 d#4@2 ~ d#4@4 d4@10 ~@2 c4]/3",
  BH: "[d#4@2 ~@2 d4@2 ~ c4 d#4 ~ d4 ~ c4 ~@2 a3@2 ~@2 c4@13]/2", BI: "g4@2 ~@2 d#4@3 ~ c4@2 ~@2 a3@2 c4@2",
  BJ: "[g4@2 ~@2 d#4@3 ~ c4@2 ~@2 a3@2 ~ c4@4 ~@13]/2", BK: "f4@2 ~@6 f4@3 ~@4 d#4", BL: "f4 ~@2 g4 ~@12",
  BM: "[g4@2 ~@2 d#4@4 ~@2 c4 ~ a3@2 ~ c4@4 ~@8 d#4 d#4@2 ~ d#4@3 ~ d4@11 ~ c4]/3",
  BN: "[d4@2 ~ d#4 d4 ~@2 c4 d#4 ~ d4 ~ c4 ~@2 a3@3 c4@9 ~@5]/2",
})).s("gm_piano").gain(0.74).pan(0.1)

// other · electric guitar clean · "GUITAR"
const electric_guitar_clean = note(`<
  ~@48 A B C D E@2 F G H I J ~ K L M N O P Q R S T U V W@2 X@2 Y Z AA@2 AB AC AD ~@63
>`.pickRestart({
  A: "~@3 c5 c5@2 ~ a4 c5@3 ~@4 g4", B: "c5@2 ~ c5@3 ~@10", C: "~@2 e4@5 ~ e4@6 ~ d4", D: "e4@8 ~ e4 ~ e4!4 ~",
  E: "[a4@6 ~@2 a4@3 ~ a4@2 ~ a4@2 a4!8 [a4,c5] a4 ~ a4@2 ~@2]/2", F: "~@2 e4 ~ g4@5 ~ d4 ~ e4@2 ~ e4",
  G: "c4@5 ~@2 c4@4 ~ e4!3 ~", H: "e4 g4 ~ f4 ~ f4@9 ~ d4", I: "~@2 f4 ~ f4@2 e4 ~ f4@2 f4 ~ e4 ~ c4 ~",
  J: "e4!3 ~ e4!3 ~ e4!3 ~ e4!3 ~", K: "~@3 c4 d4@2 ~ c4 e4 ~@7", L: "~@3 c4!2 ~@6 e4!3 ~ e4",
  M: "~@2 c4 ~ d4@2 ~ c4 e4@5 ~ e4@2", N: "~@3 f4@3 g4 ~ g4!7 [f#4,g4]", O: "f4 f4@3",
  P: "~@3 a4 g4@2 f4 ~ a4@2 g4 ~ f4 ~ c4 ~", Q: "c4 [c4,d4] c4 ~ c4!3 ~ c4!3 ~ c4!3 ~",
  R: "c4!2 ~ c4!3 ~ c4!3 ~ c4!2 e4 [d4,g4] ~", S: "f4 ~@2 f4 ~@10 f4 ~", T: "f4 ~ f4 ~ d4@4 f4!2 d4 ~@4 c4",
  U: "~ e4@6 ~", V: "~@2 c4!4 ~ c4!3 ~ c4!4 ~", W: "[c5@5 ~@2 g4@3 ~ e4 d4@2 ~ e4@4 e4@6 ~@7]/2",
  X: "[~@3 c5 ~@2 g4@3 ~@2 e4@3 ~ c4@3 e4 ~ e4!3 ~ e4!2 ~ e4!3 ~@2]/2", Y: "~@2 a4 ~ a4@2 ~ a4 a4@2 ~ a4 a4@2 ~ a4",
  Z: "a4 ~@2 a4@3 ~@10", AA: "[c5 c5@2 ~ g4@5 ~@2 e4 d4@2 ~ e4@3 d4 ~ f4 ~@2 e4@3 ~ g4 ~@3 g4]/2", AB: "f4 f4@6 ~",
  AC: "~@3 e4 f4!2 e4 ~ f4 e4 f4!2 e4 f4!2 e4", AD: "d4 ~@2 e4@11 ~@2",
})).s("gm_electric_guitar_clean").gain(0.8).pan(0.1)

// other · acoustic guitar steel · "GUITAR"
const acoustic_guitar_steel = note(`<
  ~@48 A B C D E@2 F G H I J ~ K L M N O P Q R S T U V W@2 X@2 Y Z AA@2 AB AC AD ~@63
>`.pickRestart({
  A: "~@3 g4 g4@2 ~ f4 g4@3 ~@4 e4", B: "g4@2 ~ a4@3 ~@10", C: "~@2 c4@5 ~ c4@6 ~ a3", D: "c4@8 ~ c4 ~ c4!4 ~",
  E: "[f4@6 ~@2 f4@3 ~ d#4@2 ~ f4@2 d#4 f4 d#4 f4 [d#4,f4] d#4 [d#4,f4]!2 [d#4,e4,f4] f4 ~ g4@2 ~@2]/2", // D#sus2
  F: "~@2 c4 ~ d#4@5 ~ a3 ~ c4@2 ~ c4", G: "a3@5 ~@2 g3@4 ~ c4!3 ~", H: "c4 e4 ~ d#4 ~ d4@9 ~ c4",
  I: "~@2 d#4 ~ d4@2 c4 ~ d#4@2 d4 ~ c4 ~ a3 ~", J: "c4!3 ~ c4!3 ~ c4!3 ~ c4!3 ~", K: "~@3 g3 a3@2 ~ g3 c4 ~@7",
  L: "~@3 g3 a3 ~@6 c4!3 ~ c4", M: "~@2 g3 ~ a3@2 ~ g3 c4@5 ~ c4@2", N: "~@3 d4@3 d#4 ~ d#4!8", O: "d4 c4@3",
  P: "~@3 d#4 d4@2 c4 ~ d#4@2 d4 ~ c4 ~ a3 ~", Q: "g3 [g3,a3] g3 ~ g3!3 ~ g3!3 ~ g3!3 ~",
  R: "g3!2 ~ g3!3 ~ g3!3 ~ g3!2 c4 [b3,c4] ~", S: "d4 ~@2 d4 ~@10 d4 ~", T: "d#4 ~ d4 ~ c4@4 d#4 d4 c4 ~@4 a3",
  U: "~ c4@6 ~", V: "~@2 g3!4 ~ g3!3 ~ g3!4 ~", W: "[g4@5 ~@2 e4@3 ~ c4 a3@2 ~ c4@4 c4@6 ~@7]/2",
  X: "[~@3 g4 ~@2 e4@3 ~@2 c4@3 ~ a3@3 c4 ~ c4!3 ~ c4!2 ~ c4!3 ~@2]/2", Y: "~@2 f4 ~ f4@2 ~ d#4 f4@2 ~ d#4 f4@2 ~ d#4",
  Z: "f4 ~@2 g4@3 ~@10", AA: "[g4 g4@2 ~ e4@5 ~@2 c4 a3@2 ~ c4@3 a3 ~ d4 ~@2 c4@3 ~ d#4 ~@3 d#4]/2", AB: "d#4 d4@6 ~",
  AC: "~@3 c4 d#4 d4 c4 ~ [d4,d#4] c4 d#4 d4 c4 d#4 d4 c4", AD: "a3 ~@2 c4@11 ~@2",
})).s("gm_acoustic_guitar_steel").gain(0.8).pan(0.9)

// drums · kick
const kick = s("bd").struct(`<
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x]!6
  [x ~@2 x!2 ~@2 x!2 ~@7]
  ~@4
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x]!134
  [x ~@3 x ~@2 x ~@8]
>`).gain(0.64).pan(0.6)

// drums · snare
const snare = s("sd").struct(`<
  A@6 B ~@4 C A@3 C A@3 C A@23 C A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C A@7 C A@19 C A@3 C A@7 C A@3 C A@3 C A@3 C
  A@3 C A@7 C A@6 C A@2 D
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@4 x ~@4 x ~ x!3 ~ x", D: "x ~@2 x ~@12",
})).gain(0.72).pan(0.6)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@23 A ~@3 A ~@3 A ~@3 A ~@3 A ~@35 A ~@7 A ~@3 A ~@3 A ~@3 A ~@11 A ~@23 A ~@7 A ~@3 A ~@2
>`.pickRestart({
  A: "~@13 x ~ x",
})).gain(0.48).pan(0.6)

// drums · clap
const clap = s("cp").struct(`<
  ~@11 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A@13 ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A@50 B
>`.pickRestart({
  A: "~ x ~ x", B: "x",
})).gain(0.64).pan(0.6)

// drums · low tom
const low_tom = s("lt").struct("<~@145 [~@7 x ~@8]>").gain(0.72).pan(0.6)

// drums · hihat
const hihat = s("hh").struct(`<
  A@6 B ~@4 C A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C@13 A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C
  A@3 C@50 ~
>`.pickRestart({
  A: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", B: "x ~@2 x!2 ~@2 x!2 ~@7", C: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x",
})).gain(0.56).pan(0.6)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@23 A ~@3 A ~@3 A ~@3 A ~@3 A ~@35 A ~@7 A ~@3 A ~@3 A ~@3 A ~@11 A ~@23 A ~@7 A ~@3 A ~ B
>`.pickRestart({
  A: "~@11 x!3 ~ x", B: "~@4 x!2 ~@10",
})).gain(0.56).pan(0.6)

// drums · high tom
const high_tom = s("ht").struct("<~@145 [~ x ~ x ~@12]>").gain(0.64).pan(0.6)

// drums · ride
const ride = s("rd").struct(`<
  A ~@11 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@4 B
>`.pickRestart({
  A: "x", B: "x ~@6 x ~@8",
})).gain(0.56).pan(0.6)

stack(
  bass, piano, piano_2, electric_guitar_clean, acoustic_guitar_steel, kick, snare, snare_soft, clap, low_tom, hihat,
  mid_tom, high_tom, ride
// … 1 more lines

More by The Beatles