Strudelify

Link Track Save the Last Dance for Me

The Beatles

KeyC majorTempo110 bpm
0:00/0:00
// Link Track   Save the Last Dance for Me — The Beatles
// 110 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// 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(110/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 · electric bass finger · "BASS"
const bass = note(`<
  A@2 B@4 C D E A@3 B@2 F@2 B@2 A@2 B@2 G H I J G H K L B@2 M D A N A@2 B@2 F@2 B@2 A@2 B@2 O P Q R G H Q R B@2 S T A@3
  U B@2 F@2 V M A@2 B@2 A@2 B@2 W D X Y
>`.pickRestart({
  A: "g2@8 ~ g2 ~@2 g2@8 ~ g2 ~@2", B: "c2@8 ~ c2 ~@2 c2@8 ~ c2 ~@2", C: "c2@8 ~ c2 ~@2 c2@2 ~ c2@5 ~ c2@2 ~",
  D: "g2@8 ~ g2 ~@2 g2@9 g2@2 ~", E: "g2@8 ~ g2@2 ~ g2@2 ~ g2@4 ~@2 g2 ~@2", F: "f2@8 ~ f2 ~@2 f2@8 ~ f2 ~@2",
  G: "g2@8 ~ g2@2 ~ d2@12", H: "g2@8 ~ g2@2 ~ d2@6 g2@2 ~ g2 ~@2", I: "c2@8 ~ c2@2 ~ g2@8 ~ g2@2 ~",
  J: "c2@8 ~ c2@2 ~ g2@8 ~ c2@2 ~", K: "c2@8 ~ c2@2 ~ g2@12", L: "c2@8 ~ c2@2 ~ g2@6 c2@2 ~ c2 ~@2",
  M: "c2@8 ~ c2 ~@2 c2@8 ~ c2@2 ~", N: "g2@8 ~ g2 ~@2 g2@8 ~ f#2 ~@2", O: "g2@8 ~ g2@2 ~ d3@7 ~@2 d3 ~@2",
  P: "g2@7 ~@2 g2@3 d2@6 g2 ~@2 g2@2 ~", Q: "c2@8 ~ c2@3 g1@8 ~ g1@3", R: "c2@8 ~ c2@3 a2@3 g2@3 e2@3 c2@2 ~",
  S: "c2@8 ~ c2@2 ~ c2@8 ~ c2@2 ~", T: "g2@8 ~ g2 ~@2 g2@2 ~ g2@5 ~ g2@2 ~", U: "g2@8 ~ g2 ~@2 g2@8 ~ d2 ~@2",
  V: "c2@8 ~ c2 ~@2 c2 ~@2 c2@4 ~@2 c2 ~@2", W: "g2@8 ~ g2@2 ~ g2@8 ~ g2@2 ~",
  X: "c2@7 ~@2 c2 ~@2 c2 ~@2 c2@3 ~@3 c2 ~@2", Y: "c2 ~@2 g1 ~@2 a1@2 ~@4 c2@4 ~@8",
})).s("gm_electric_bass_finger").gain(0.47)

// chords · piano
const piano = note(`<
  A B C D C D E F G@4 C D H I J@2 G@2 C D K L M D N B O P M D Q R A B A B S T U V O P G@2 C D W@2 M D X B C D M D Y R Z
  AA G@2 O P AB AC O P A B C D AD AE S T AF@2 AG AH
>`.pickRestart({
  A: "[g3,b3,d4]@15 g2@3 [g3,b3,d4]@4 ~@2", B: "[g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~@4 [g3,b3,d4]@12 ~@3",
  C: "c4@4 ~@2 g4 c5, g3@7 ~, e4@5 e4@2 ~, ~@4 c4@3 ~", D: "[g3,c4,e4]@2 ~ [g3,c4,e4]@2 ~@4 [g3,c4,e4]@12 ~@3",
  E: "[g3,c4,e4]@2 ~ [g3,c4,e4]@2 ~@4 [g3,c4,e4]@9 ~@6", F: "[g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~@4 [g3,b3,d4]@9 ~@6",
  G: "[[g3,b3,d4]@38 ~@4 b3@3 d4@3, ~@13 g3@3]/2", H: "[a3,c4,f4]@13 ~@2 [a3,c4,f4]@7 ~@2",
  I: "[a3,c4,f4]@8 ~ [a3,c4,f4] ~@2", // F
  J: "[~@24 [c4,g4]@2 ~ [c4,e4,g4]@2 ~@4 [c4,e4,g4]@2 ~@4 c3@3 [c4,e4,g4]@3 ~@3, [c4,e4,g4]@23 ~ e4 ~@23, ~@21 c3@13 ~@14]/2", // C5 C
  K: "[g3,b3,d4]@5 g2 [g3,b3,d4] ~", L: "g3@5 g3 b3 ~, [b3,d4]@17 ~@7", M: "~@3 [g3,c4,e4]@7 ~@2 [g3,c4,e4]@10 ~@2",
  N: "~@3 [g3,b3,d4]@7 ~@2 [g3,b3,d4]@10 ~@2", O: "[g3,c4,e4]@5 c3 [g3,c4,e4] ~", P: "c4@5 c4 e4 ~, [g3,e4]@17 ~@7",
  Q: "c4@12 c4@3 e4@3 g4@3 c5 ~@2, [g3,e4]@5 ~@3", R: "g3@12 g3@3 b3@3 d4@3 g4 ~@2, [b3,d4]@5 ~@3",
  S: "[g3,c4,e4]@13 ~@2 [g3,c4,e4]@7 ~@2", T: "[g3,c4,e4]@8 ~ [g3,c4,e4] ~@2", U: "[a3,c4,f4]@8 ~ [a3,c4,f4]@2 ~",
  V: "~@3 [a3,c4,f4]@2 ~@7 [a3,c4,f4]@10 ~@2", // F
  W: "[~@24 [d4,b4]@2 ~ [d4,g4,b4]@2 ~@4 [d4,g4,b4]@2 ~@4 g2@3 [d4,g4,b4]@3 ~@3, [d4,g4,b4]@23 ~ g4 ~@23, ~@21 g2@13 ~@14]/2", // G
  X: "g3@4 ~@2 d4 g4, d4@3 ~, b3@5 b3@2 ~, ~@4 g3@3 ~",
  Y: "~@3 [g3,c4,e4]@2 ~@4 c3@3 [g3,c4,e4]@3 ~@3 [g3,c4,e4]@2 ~@4", Z: "[g3,b3,d4]@8 ~ [g3,b3,d4]@2 ~",
  AA: "~@3 [g3,b3,d4]@2 ~@7 [g3,b3,d4]@10 ~@2", AB: "f4@4 ~ a4 c5 f5, [a3,c4]@7 ~, ~@4 f4@3 ~",
  AC: "[a3,c4,f4]@2 ~ [a3,c4,f4]@2 ~@4 [a3,c4,f4]@12 ~@3", AD: "[g3,b3,d4]@13 ~@2 [g3,b3,d4]@7 ~@2",
  AE: "[g3,b3,d4]@8 ~ [g3,b3,d4] ~@2", AF: "[g3,b3,d4]@23 ~", AG: "[g3,c4,e4]@21 c3@2 ~",
  AH: "[g3,c4,e4]@2 ~ c3@2 ~ [a3,c4,f4]@2 ~@4 [g3,c4,e4]@12", // C F C
})).s("gm_piano").gain(0.3)

// chords · electric guitar clean · "GUITAR"
const electric_guitar_clean = note(`<
  A B C@5 D@5 E@2 F@4 G@2 H@2 I@6 J@2 K@2 L M@3 N@2 O@2 P Q@3 R S T U V W X@3 Y Z AA@2 AB AC AD AE AF AG AH AI AJ AK
  AL@2 AM AE AN AO AP AQ AR AI AS AE AT AU@2
>`.pickRestart({
  A: "~@9 d3@2 ~ g3@6 b3@3 g3@3, ~@2 g2@5 ~, ~@9 e3@5 ~@10",
  B: "~@6 g3@3 b3@5 ~ d4@2 ~@2 d3 ~@4, g2@19 ~@5, ~ d3@4 ~@3",
  C: "[~@6 c4@3 e4@5 ~@4 g3@3 ~@9 c4@3 e4@5 ~@16 c4@3 e4@5 ~@7 c4@3 ~@6 c4@3 e4@5 ~@16 c4@3 e4@5 ~@7 c4@3, c3@19 ~@2 c4@6 g3@18 c4@5 ~ g3@19 ~@5 g3@17 c4@6 ~ g3@13 ~@8, ~@2 g3@13 g4@11 ~@7 c4 ~@5 g4@13 ~@11 g4@13 ~@11 g4@15 ~@9 g4@9, ~@24 c3@22 ~@2 c3@21 ~@3 c3@21 ~@3 c3@17 ~@7]/5",
  D: "[~@6 g3@3 b3@5 ~@7 g3@3 ~@6 g3@3 b3@5 ~@6 g3@3 ~@7 g3@3 b3@5 ~@16 g3@3 b3@5 ~@7 g3@3 ~@6 g3@4 b3@5 ~@6 g3@3, g2@22 ~@2 g2@21 ~@2 g2@21 g3@6 ~ d3@18 ~@6 d3@12 ~@9, ~@3 d3@18 ~@6 d3@18 ~@6 d3@18 ~@3 g2@22 ~@2 g2@15 ~@9, ~@15 d4@12 ~@12 d4@11 ~@12 d4@13 ~@12 d4@13 ~@11 d4@9]/5",
  E: "[~@6 c4@3 e4@5 ~@7 c4@3 ~@6 c4@3 e4@7 ~@5 c4@3, c3@21 ~@3 c3@17 ~@7, ~@3 g3@18 ~@6 g3@13 ~@8, ~@15 g4@12 ~@13 g4@8]/2",
  F: "[~@5 f3@4 a3@5 ~@6 f3@3 ~@6 f3@4 a3@6 ~@5 f3@2 ~@8 c4@3 e4@5 ~@6 c4@4 ~@6 c4@3 e4@6 ~@6 c4@3, f2@20 ~@3 f2@16 ~@24 g4@12 ~@12 g4@8 ~, ~@3 c3@17 ~@6 c3@13 ~@8 c3@21 ~@4 c3@16 ~@8, ~@14 c4@11 ~@14 c4@8 ~@4 g3@18 ~@6 g3@13 ~@8]/4",
  G: "[~@6 g3@3 b3@6 ~@5 g3@3 ~@7 g3@3 b3@6 ~@6 g3@2 ~, g2@20 ~@3 g2@19 ~@6, ~@3 d3@17 ~@7 d3@17 ~@4, ~@5 d4@4 ~@4 d4@3]/2",
  H: "[~@6 c4@3 e4@6 ~@15 c4@3 e4@8 ~@3 c4@4, c3@21 ~@3 c3@19 ~@5, ~@3 g3@18 c4@6 g3@16 ~@5, ~@15 g4@13 ~@13 g4@7]/2",
  I: "[~@8 g3@7 ~@15 g3@3 b3@6 ~@5 g3@3 ~@6 c4@4 e4@6 ~@6 c4@3 ~@6 c4@3 e4@5 ~@6 c4@3 ~@6 g3@4 b3@6 ~@6 g3@3 ~@6 g3@3 b3@6 ~@6 g3@2 ~, g2@21 ~@3 g2@16 ~@23 g4@12 ~@12 g4@8 ~@16 d4@12 ~@12 d4@9, ~@5 d3@16 g3@5 ~ d3@13 ~@7 c3@20 ~@5 c3@17 ~@6 g2@22 ~@3 g2@16 ~@8, ~@15 d4@12 ~@12 d4@8 ~@3 g3@18 ~@7 g3@13 ~@10 d3@18 ~@7 d3@14 ~@7]/6",
  J: "[~@2 c4 e4@2 ~@2 c4 ~@2 c4 e4@2 ~@2 c4, c3@7 ~ c3@7 ~, ~ g3@6 ~@2 g3@6 ~, ~@5 g4@4 ~@4 g4@3]/2",
  K: "[~@6 c4@3 e4@5 ~@6 c4@3 ~@7 c4@3 ~ e4@6 ~@4 c4@4, c3@20 ~@3 c3@21 ~@4, ~@3 g3@17 ~@7 g3@17 ~@4, ~@15 g4@10 ~@15 g4@8]/2",
  L: "~@6 c4@3 e4@5 ~@6 c4@4, c3@19 ~@5, ~@3 g3@16 ~@5, ~@15 g4@8 ~",
  M: "[~@6 g3@3 b3@5 ~@6 g3@4 ~@6 g3@3 b3@6 ~@6 g3@3 ~@6 g3@3 b3@6 ~@6 g3@3, g2@7 ~ g2@7 ~ g2@7 ~, ~@3 d3@17 ~@7 d3@18 ~@6 d3@17 ~@4, ~@15 d4@11 ~@13 d4@11 ~@13 d4@9]/3",
  N: "[~@6 g3@3 b3@6 ~@6 g3@3 ~@6 g3@4 b3@5 ~@6 g3@2 ~, g2@21 ~@3 g2@16 ~@8, ~@3 d3@18 ~@6 d3@13 ~@8, ~@15 d4@11 ~@13 d4@8 ~]/2",
  O: "[~@6 c4@3 e4@5 ~@6 c4@4 ~@6 c4@3 e4@9 ~@2 c4@3 ~, c3@20 ~@4 c3@19 ~@5, ~@3 g3@17 ~@7 g3@16 ~@5, ~@15 g4@11 ~@16 g4@5 ~]/2",
  P: "~@5 f3@4 a3@6 ~@6 f3@3, f2@11 ~, ~ c3@6 ~, ~@5 c4@3",
  Q: "[~@6 f3@3 a3@6 ~@5 f3@2 ~@8 c4@3 e4@6 ~@5 c4@4 ~@6 c4@3 e4@6 ~@6 c4@3, f2@15 c4@8 ~@4 g3@18 ~@6 g3@16 ~@5, ~@3 c3@13 ~@7 c3@21 ~@4 c3@19 ~@5, ~@39 g4@11 ~@13 g4@9]/3",
  R: "~@6 g3@3 b3@6 ~@5 g3@4, g2@7 ~, ~@3 d3@17 ~@4, ~@5 d4@3", S: "~@2 g3 b3@3 ~ g3, g2@18 d4@5 ~, ~@3 d3@16 ~@5",
  T: "~@6 c4@3 e4@6 ~@5 c4@4, c3@7 ~, ~@3 g3@17 ~@4, ~@5 g4@3", U: "~@2 c4 e4@3 ~ c4, c3@5 ~, ~@3 g3@17 ~@4, ~@3 g4",
  V: "~@2 g3 b3@2 ~@2 g3, g2@7 ~, ~ d3@6 ~, ~@5 d4@3", W: "~@2 g3 b3@2 ~@2 g3, g2@17 ~@7, ~@3 d3@14 ~@7, ~@15 d4@8 ~",
  X: "[~@6 c4@3 e4@6 ~@6 c4@3 ~@6 c4@3 e4@8 ~@3 c4@3 ~@6 g3@4 b3@6 ~@6 g3@3, c3@21 ~@3 c3@19 ~@4 g2@21 ~@4, ~@3 g3@18 ~@6 g3@16 ~@7 d3@18 ~@4, ~@15 g4@11 ~@15 g4@6 ~@16 d4@9]/3",
  Y: "~@6 g3@3 b3@9 ~@2 g3@3 ~, g2@3 d4, ~@3 d3@17 ~@4", Z: "~@2 c4 e4@2 ~@2 c4, c3@11 ~, ~@3 g3@19 ~@2, ~@5 g4@3",
  AA: "~@2 c4 e4@2 ~@2 c4, c3@7 ~, ~ g3@6 ~, ~@5 g4@3", AB: "~@6 c4@3 e4@6 ~@5 c4@4, c3@5 ~, ~ g3@6 ~, ~@5 g4@3",
  AC: "~@2 c4 e4@2 ~@2 c4, c3@3 ~, ~@2 g3@15 ~@7, ~@15 g4@8 ~", AD: "~@6 g3@3 b3@6 d4@5 g3@4, g2@7 ~, ~@3 d3@17 ~@4",
  AE: "~@6 g3@3 b3@6 ~@5 g3@4, g2@7 ~, ~ d3@6 ~, ~@5 d4@3", AF: "~@6 g3@3 b3@6 d4@5 ~ g3@3, g2@7 ~, ~ d3@6 ~",
  AG: "~@6 g3@3 b3@6 d4@4 ~@2 g3@3, g2@7 ~, ~ d3@6 ~", AH: "~@6 g3@3 b3@6 ~@5 g3@2 ~@2, g2@15 d4@7 ~@2, ~@3 d3@14 ~@7",
  AI: "~@6 c4@3 e4@6 g4@5 ~ c4@3, c3@11 ~, ~@3 g3@19 ~@2", AJ: "~@6 c4@3 e4@8 ~@3 c4@3 ~, c3@17 g4@6 ~, ~ g3@5 ~@2",
  AK: "~@5 f3@3 a3@6 ~@6 f3@4, f2@5 ~, ~ c3@6 ~, ~@5 c4@3",
  AL: "[~@6 f3@3 a3@6 ~@5 f3@2 ~@8 c4@3 e4@6 ~@5 c4@4, f2@17 ~@22 g4@9, ~@3 c3@14 ~@6 c3@21 ~@4, ~@15 c4@7 ~@5 g3@18 ~@3]/2",
  AM: "~@6 c4@3 e4@6 ~@5 c4@3 ~, c3@19 ~@5, ~@3 g3@16 ~@5, ~@15 g4@8 ~",
  AN: "~@6 g3@3 b3@9 ~@2 g3@3 ~, g2@3 ~, ~@3 d3@15 d4@5 ~", AO: "~@2 c4 e4@2 ~@2 c4, c3@5 ~, ~ g3@6 ~, ~@5 g4@3",
  AP: "~@6 c4@3 e4@5 ~@6 c4@3 ~, c3@3 ~, ~@3 g3@14 ~@7, ~@15 g4@8 ~",
  AQ: "~@2 g3 b3@2 ~@2 g3, g2@11 ~, ~@3 d3@19 ~@2, ~@5 d4@3", AR: "~@6 g3@3 b3@9 d4@2 ~ g3@3, g2@5 ~, ~@3 d3@17 ~@4",
  AS: "~@6 c4@3 e4@7 ~@5 e4@3, c3@18 c4@5 ~, ~@3 g3@16 ~@5, ~@8 g4@3 ~",
  AT: "~@2 g3 b3@2 ~@2 g3, g2@3 ~, ~@3 d3@16 ~@5, ~@15 d4@8 ~",
  AU: "[~@9 e4@6 ~@21 [c3,e4]@11 ~, c3@4 c4 g3 ~@2, ~@3 g3@22 ~@2 c3@7 ~@14, ~@6 c4@5 ~@4 g4@11 ~@22, ~@21 e4@6 ~@5 c4@15 ~]/2", // C
})).s("gm_electric_guitar_clean").gain(0.4)

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

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

// drums · clap
const clap = s("cp").struct("<~@19 [~@2 x!2 ~@4] ~@51 [~@2 x!2 ~@4] ~@10>").gain(0.5)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@43 B ~@4 C ~@18 D ~ B ~@8>".pickRestart({
  A: "~ x!4 ~ x ~", B: "~@7 x", C: "~@5 x ~@2", D: "~@3 x",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D E@3 F G H I J K L M E N I E@2 L E F C@3 O E L H N C@2 E@2 P Q R C E C S F E L T L C E F E F@2 P L N@2 E U C E
  N T@2 N L C E V E C L C E N W C E@2 X E Y
>`.pickRestart({
  A: "x ~@2 x!2 ~ x ~@2 x ~@2 x ~@2 x ~@2 x!2 ~ x!2 ~", B: "x!2 ~ x!2 ~ x ~@2 x ~@2 x!2 ~ x!2 ~ x!2 ~ x ~@2",
  C: "x!2 ~ x!2 ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", D: "x ~@3 x ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2",
  E: "x ~@2 x!2 ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", F: "x ~@2 x!4 ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2",
  G: "x!2 ~ x!2 ~ x ~@2 x ~@2 x ~@2 x!2 ~ x ~@2 x ~@2", H: "x!2 ~ x!2 ~ x ~@2 x!2 ~ x!2 ~ x ~@2 x ~@2 x ~@2",
  I: "x!2 ~ x!4 ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", J: "x ~@2 x!2 ~ x ~@2 x ~@2 x ~@2 x ~@2 x!2 ~@2 x ~",
  K: "x!2 ~ x!2 ~ x!2 ~ x ~@2 x!2 ~ x ~@2 x ~@2 x ~@2", L: "x!2 ~ x!2 ~ x ~@2 x ~@2 x!2 ~ x ~@2 x ~@2 x ~@2",
  M: "x ~@2 x!2 ~ x ~ x!2 ~@2 x ~@2 x ~@2 x ~@2 x ~@2", N: "x ~@2 x!2 ~ x ~@2 x ~@2 x!2 ~ x ~@2 x ~@2 x ~@2",
  O: "x ~@2 x ~ x!2 ~ x!2 ~@2 x ~@2 x ~@2 x ~@2 x ~@2", P: "x ~@2 x!4 ~@2 x ~@2 x!2 ~ x ~@2 x ~@2 x ~@2",
  Q: "x!2 ~ x!2 ~ x ~@2 x ~@2 x!2 ~ x ~@2 x ~@2 x!2 ~", R: "x!2 ~ x ~ x!2 ~@2 x!2 ~ x!2 ~ x ~@2 x ~@2 x ~@2",
  S: "x ~@2 x!2 ~ x ~@2 x ~@2 x ~ x!2 ~@2 x ~@2 x ~@2", T: "x!2 ~ x!2 ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x!2 ~",
  U: "x!2 ~ x!2 ~ x ~@2 x ~@2 x!2 ~ x ~@2 x!2 ~ x!2 ~", V: "x ~@2 x ~ x!2 ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2",
  W: "x ~@2 x!2 ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x!2 ~", X: "x!8", Y: "x!3 ~ x ~@3",
})).gain(0.5)

// drums · mid tom
const mid_tom = s("mt").struct("<~@21 A ~@25 B ~@25 B ~@3 A ~@4>".pickRestart({
  A: "~@18 x!2 ~ x!2 ~", B: "~@3 x ~ x!2 ~",
})).gain(0.5)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@11 A ~@3 A ~ A ~ B ~@5 A C A ~ A ~ A ~ A ~@13 D ~@3 A E A ~@5 A ~ A ~@5 A ~ A ~@2 B F ~@5 A ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@11 x", C: "~ x ~@20 x ~", D: "~@2 x ~@4 x", E: "~ x ~@22", F: "~ x ~@2",
})).gain(0.37)

// drums · high tom
const high_tom = s("ht").struct("<~@47 [~ x] ~@25 [~ x] ~@8>").gain(0.5)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@11 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@11 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~@3
  A ~@2
>`.pickRestart({
  A: "~@3 x",
})).gain(0.56)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@19 [~@15 x!2 ~@7] ~@51 [~@15 x!2 ~@7] ~@10>").gain(0.19)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@22
  [~@3 x!2 ~@4 x ~@2]
  [~@2 x!2 ~@2 x ~]!7
  ~@18
  [~@2 x!2 ~@2 x ~]!5
  [~@5 x ~@2 x ~@9 x ~@5]
  [~@2 x!2 ~@2 x ~]!2
  ~@26
>`).gain(2.84)

stack(
  bass, piano, electric_guitar_clean, kick, snare, clap, low_tom, hihat, mid_tom, open_hat, high_tom, crash, tambourine,
  tambourine_soft, cabasa
)

More by The Beatles