Strudelify

Ringo Starr

The Beatles

KeyC majorTempo90 bpm
0:00/0:00
// Ringo Starr — The Beatles
// 90 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, 2/4 at bar 14, 4/4 at bar 15, 2/4 at bar 24, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: ch 2 "Lead - Clarinet" named as a reed, played on clarinet (its contrabass patch is not one)
// note: duplicate parts dropped: ch 7 "E.Piano 1" piano (copy of ch 3 "E.Piano 1" epiano1)
// note: Full arrangement: all 82 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/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 pick · "Fretless E.Bass"
const bass = note(`<
  ~@4 A B A C D E F G D H I J I K D L F M N B O A P Q@2 R@2 S T U V W X B C D Y F Z D AA AB J A AC Q AD R AE AF AG U AH
  A AI@2 AJ A@3 AK D AL A AM S AN U V A AO AP AQ AR@2 ~@3
>`.pickRestart({
  A: "c2 ~ g1 ~ c2 ~ g1 ~", B: "c2@3 ~@3 g1@3 ~@3 c2@3 ~@3 g1@2 a1 b1@3", C: "c2@3 ~@3 g1@3 ~@3 c2@3 ~@2 c2 d2@3 e2@3",
  D: "f2 ~ c2 ~ f2 ~ c2 ~", E: "f2@3 ~@3 c2@3 ~@3 f2@3 ~@2 d2 e2@3 f2@3", F: "g2 ~ d2 ~ g2 ~ d2 ~",
  G: "g2@3 ~@3 d2@3 ~@3 g2@3 ~@2 d2 d2@3 g2@3", H: "f2 e2 f2 g2 c2 ~ g1 ~",
  I: "c2@3 ~@3 g1@2 a1 b1@3 c2@3 ~@3 g1@3 ~@3", J: "c2@2 g1@4 a1@3 b1@3 c2@3 ~@3 g1@3 ~@3",
  K: "c2@3 ~@2 c2 d2@3 e2@3 f2@3 ~@3 c2@3 ~@3", L: "f2 ~ c2 f2 g2 ~ d2 ~", M: "g2 c3!2 d3 f2 ~ c2 ~",
  N: "f2 ~ c2 ~ f2 ~ f2 g2", O: "c2@3 ~@3 g1@3 ~@3 c2@2 g1@4 a1@3 b1@3", P: "c2@3 ~@3 g2@3 ~@2 c2 c2@3 ~@3 g2@3 c2@3",
  Q: "f2 ~ c3 ~ f2 ~ c3 ~", R: "c2 ~ g2 ~ c2 ~ g2 ~", S: "g1 ~ d2 ~ g1 ~ d2 ~",
  T: "g1@3 ~@3 d2@3 ~@3 g1@3 ~@2 e1 g1@3 f#1@3", U: "f1 ~ g1 c2 f1 ~ g1 c2", V: "f1@3 ~@3 g1@3 c2@3 f1@3 ~@2 a1@4 c2@3",
  W: "c2@3 ~@3 g1@3 ~@3 c2@3 ~@2 g1 g1@3 a1@3", X: "c2 ~ g1 ~ c2 ~ g1 c2", Y: "f2 ~ c2 ~ f2 ~ c2 f2",
  Z: "g2 ~ d2 ~ g2 c3!2 d3", AA: "f2 ~ f2 g2 c2 ~ g1 ~", AB: "c2 ~ g1 b1 c2 ~ g1 ~", AC: "c2!2 d2 e2 f2 ~ c3 ~",
  AD: "f2 ~ f2 g2 c2 ~ g2 ~", AE: "c2 ~ g2 ~ g1 ~ d2 ~", AF: "g1@3 ~@3 d2@3 ~@3 g1@3 ~@2 g1 d2@3 ~@2 b1",
  AG: "g1@3 ~@2 e1 g1@3 f#1@3 f1@3 ~@3 g1@3 c2@3", AH: "f2 d2 a1 c2!2 ~ g1 ~", AI: "[c2 ~ g1@10 ~@4]/2",
  AJ: "g1@2 g1 ~@2 g1 ~@2 g1 g1@3 c2@3 ~@3 g1@3 ~@3", AK: "c2@3 ~@2 c2@3 d2 e2@3 f2@3 ~@3 c2@3 ~@3",
  AL: "f2@3 ~@3 c2@3 ~@2 c2 c2@3 ~@3 g1@3 ~@3", AM: "c2@3 ~@3 g1@3 ~@3 c2@3 ~@2 c2 b1@3 a1@3",
  AN: "g1 ~ d2 g2 d2 g1 d2 g2", AO: "c2@3 ~@2 c2 g1@3 ~@3 c2@3 ~@2 c2 c2@2 b1 a1@2 g1", AP: "f1 ~ a1 ~ f1 ~ a1 c2",
  AQ: "g1 ~ d2 ~ g1 ~ d2 g1", AR: "[c2!2 c2@6]/2",
})).s("gm_electric_bass_pick").gain(0.48)

// chords · epiano1 · "E.Piano 1"
const epiano1 = note(`<
  A B@2 C D@4 E@2 F@2 G@8 H@3 D@4 E@2 D@2 F@2 E@2 D@4 E@2 F@2 I@8 J@7 K@2 L@8 M N@2 E@2 D@2 O P Q@2 ~@3
>`.pickRestart({
  A: "~@18 d6 c6 d6 f6@3",
  B: "[~ g6@3 f6 e6 d6 ~ c6@2 a5@2 c6@2 g5@3 ~ e5@3 d5@2 c5@2 ~ b4@2 g4 a4@3 ~ f4 ~ e4@3 d4@3 c4@7]/2",
  C: "~@4 c3 [g4,c5,e5]@3", // C
  D: "c3 [g4,c5,e5] [g2,g4,c5,d5] ~ c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5], ~@3 [g4,c5,e5]@2 ~@3", // C Gsus4 C Gsus4 C
  E: "[f3 ~ c3 ~ f3 ~ c3 ~ f3 ~ c3 ~ f3 ~ c3 [a4,c5,f5], ~ [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 ~]/2", // F
  F: "[g3 ~ d3 ~ g3 ~ d3 ~ g3 ~ d3 ~ g3 ~ d3 [d4,g4,b4], ~ [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 ~]/2", // G
  G: "[f3 ~ c3 ~ f3 ~ c3 ~ f3 ~ c3 [a4,c5,f5] c3 [g4,c5,e5] [g2,g4,c5,d5] ~ c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] c3 [g4,c5,e5] [g2,g4,c5,d5] ~ c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] c3 [g4,c5,e5] [g2,g4,c5,d5] ~ c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] c3 [g4,c5,e5] [g2,g4,c5,d5] ~ c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] f3 ~ c3 ~ f3 ~ c3 ~ f3 ~ c3 ~ f3 ~ c3 [a4,c5,f5] g3 ~ d3 [d4,g4,b4], ~ [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 ~@4 [g4,c5,e5]@2 ~@6 [g4,c5,e5]@2 ~@6 [g4,c5,e5]@2 ~@6 [g4,c5,e5]@2 ~@4 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 ~@2 [d4,g4,b4]@2 ~]/8", // F C Gsus4 C Gsus4 C Gsus4 C …
  H: "[g3 ~ d3 ~ g3 ~ d3 ~ g3 ~ d3 [d4,g4,b4] f3 ~ c3 ~ f3 ~ c3 ~ f3 ~ c3 [a4,c5,f5], ~ [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 ~@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 ~]/3", // G F G F
  I: "[f3 ~ c3 ~ f3 ~ c3 ~ f3 ~ c3 [a4,c5,f5] c3 [g4,c5,e5] [g2,g4,c5,d5] ~ c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] c3 [g4,c5,e5] [g2,g4,c5,d5] ~ c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] c3 [g4,c5,e5] [g2,g4,c5,d5] ~ c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] c3 [g4,c5,e5] [g2,g4,c5,d5] ~ c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] f3 ~ c3 ~ f3 ~ c3 ~ f3 ~ c3 ~ f3 ~ c3 [a4,c5,f5] c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5], ~ [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 ~@4 [g4,c5,e5]@2 ~@6 [g4,c5,e5]@2 ~@6 [g4,c5,e5]@2 ~@6 [g4,c5,e5]@2 ~@4 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 ~@5]/8", // F C Gsus4 C Gsus4 C Gsus4 C …
  J: "[c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] c3 [g4,c5,e5] [g2,g4,c5,d5] ~ c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] g3 ~ d3 ~ g3 ~ d3 ~ g3 ~ d3 ~ g3 ~ d3 [d4,g4,b4] f3 ~ c3 ~ f3 ~ c3 ~ f3 ~ c3 ~ f3 ~ c3 [a4,c5,f5] c3 [g4,c5,e5] [g2,g4,c5,d5] ~ c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5], ~@7 [g4,c5,e5]@2 ~@4 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 ~@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 ~@4 [g4,c5,e5]@2 ~@7]/7", // C Gsus4 C Gsus4 C Gsus4 C G …
  K: "[c3 [g4,c5,e5] [g2,g4,c5,d5]@10 ~@4]/2", // C Gsus4
  L: "[~@4 c3 [g4,c5,e5] [g2,g4,c5,d5] ~ c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] c3 [g4,c5,e5] [g2,g4,c5,d5] ~ c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] c3 [g4,c5,e5] [g2,g4,c5,d5] ~ c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] c3 [g4,c5,e5] [g2,g4,c5,d5] ~ c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] f3 ~ c3 ~ f3 ~ c3 ~ f3 ~ c3 ~ f3 ~ c3 [a4,c5,f5] c3 [g4,c5,e5] [g2,g4,c5,d5] ~ c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5], ~@7 [g4,c5,e5]@2 ~@6 [g4,c5,e5]@2 ~@6 [g4,c5,e5]@2 ~@6 [g4,c5,e5]@2 ~@4 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 ~@4 [g4,c5,e5]@2 ~@7]/8", // C Gsus4 C Gsus4 C Gsus4 C Gsus4 …
  M: "c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5] c3 [g4,c5,e5] [g2,g4,c5,d5] [g4,c5,e5]", // C Gsus4 C Gsus4 C
  N: "[g3 ~ d3 ~ g3 ~ d3 ~ g3 ~ d3 ~ g3 ~ d3 [b4,d5,g5], ~ [b4,d5,g5]@2 [b4,d5,g5]@2 [b4,d5,g5]@2 [b4,d5,g5]@2 [b4,d5,g5]@2 [b4,d5,g5]@2 [b4,d5,g5]@2 ~]/2", // G
  O: "f3 ~ c3 ~ f3 ~ c3 [a4,c5,f5], ~ [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 ~", // F
  P: "g3 ~ d3 ~ g3 ~ d3 [b4,d5,g5], ~ [b4,d5,g5]@2 [b4,d5,g5]@2 [b4,d5,g5]@2 ~", // G
  Q: "[[c3,a4,d5,f5] [c3,g4,c5,e5] [c3,g4,c5,e5]@4 ~@2]/2", // Dm7 C
})).s("gm_epiano1").gain(0.32).pan(0.4)

// other · fiddle
const fiddle = note(`<
  ~@13 A B C D E F G@2 H@2 I J K L M@2 N O P Q R S T U V W X Y Z AA AB AC AD AE@3 AF AG AH AI AJ AK@3 AL AM@2 AN AO AP
  AQ AR AS AT AU AV AW AX AY AZ@2 BA BB BC BD BE BF BG BH
>`.pickRestart({
  A: "~@21 c5@2 d5", B: "e5@2 c5 d5@2 e5 c5@2 g4 a4@2 g4 e4@2 c4 d4@2 e4 c4@3 g3@2 a3",
  C: "c4@3 c4@2 d4 e4@2 c4 d4@2 e4 c4@3 g3@3 c4@5 d4",
  D: "e4@3 ~@9 [e4,g4]@2 [e4,g4] ~@2 [e4,g4] [e4,g4]@2 ~ [e4,g4]@2 [e4,g4]", // Em
  E: "~@2 [e4,g4] [e4,g4]@2 ~ [e4,g4]@2 [e4,g4] ~@2 [e4,g4] f4@3 ~@9", F: "~@3 f4@2 g4 a4@2 f4 g4@2 a4 f4@6 ~@6",
  G: "[~@3 f4@2 g4 a4@2 [f4,a4] [f4,a4]@3 ~@3 [b4,d5]@3 [b4,d5]@3 ~@2 [b4,d5]@4 [b4,d5]@3 ~@3 g4@2 a4 ~@3 [b4,d5]@3 [b4,d5]@3 [b4,d5]@3]/2", // F Bm
  H: "[[b4,d5]@3 [b4,d5]@3 a4@2 g4 a4@2 g4 ~@3 f4@3 f4@5 a4@4 c5@2 d5 f5@2 d5 c5@2 ~@4 f4@3 f4@3 f4@3]/2", // Bm
  I: "e4@3 [e4,g4]@6 c5@2 d5 e5@2 c5 d5@2 e5 c5@2 g4 a4@2 c5", // Em
  J: "e4@2 f4 g4@2 a4 g4@2 f4 e4@2 c4 d4@2 e4 c4@2 a3 g3@3 a3@3", K: "e4@5 g3 a3 c4",
  L: "e4@3 g4@3 a4@3 g4@2 e4@4 c4@2 d4 c4@2 a#3 a3@2 g3",
  M: "[f3@3 ~@9 f4@3 a#4@2 c#5 d#5@3 f5@5 d5 c5@2 a4 f4@3 f4@2 g4 a4@2 f4 g4@2 a4 f4@3 f4@3]/2",
  N: "e4@6 [e4,g4]@6 ~@3 c4@2 ~ a3@2 ~ c4@2 ~", O: "[e4,g4]@12 ~@3 [e4,g4]@2 ~ [d4,f4]@2 ~ [c4,e4]@2 ~",
  P: "[d4,g4]@9 g4@2 a4 b4@2 g4 a4@2 b4 g4@3 e4@2 d4", Q: "g4@3 b4 a4 g4 b4 a4 g4 e4 d4 c4 b4@3 a4@2 g4 b4@2 a4 g4@3",
  R: "c4@3 f4@3 a4@3 d5@2 f5@9 c5 d5@2 c5", S: "f5@3 c5@2 d5 c5@2 a4 g4@2 f4@4 a4@2 f4 g4@3 f4@3",
  T: "e4@9 c4@2 d4 e4@2 c4 d4@2 e4 c4@2 a3 g3@2 a3", U: "c4@3 c4@2 d4 e4@2 g4 a4@2 g4 c5@3 c4@3 a4@3 g4@3",
  V: "c4@3 g3@3 c4@5 d4 e4@3 ~@9",
  W: "[e4,g4]@2 [e4,g4] ~@2 [e4,g4] [e4,g4]@2 ~ [e4,g4]@2 [e4,g4] ~@2 [e4,g4] [e4,g4]@2 ~ [e4,g4]@2 [e4,g4] ~@2 [e4,g4]", // Em
  X: "f4@3 ~@12 f4@2 g4 a4@2 f4 g4@2 a4", Y: "f4@6 ~@9 f4@2 g4 a4@2 [f4,a4] [f4,a4]@3",
  Z: "~@3 [b4,d5]@3 [b4,d5]@3 ~@2 [b4,d5]@4 [b4,d5]@3 ~@3 g4@2 a4", // Bm
  AA: "~@3 [b4,d5]@3 [b4,d5]@3 [b4,d5]@3 [b4,d5]@3 [b4,d5]@3 a4@2 g4 a4@2 g4", // Bm
  AB: "~@3 f4@3 f4@5 a4@4 c5@2 d5 f5@2 d5 c5@2 ~", AC: "~@3 f4@3 f4@3 f4@3 e4@3 [e4,g4]@6 c5@2 d5",
  AD: "e5@2 c5 d5@2 e5 c5@2 g4 a4@2 c5 e4@2 f4 g4@2 a4 g4@2 f4 e4@2 c4",
  AE: "[d4@2 e4 c4@2 a3 g3@3 a3@3 e4@15 g3@3 a3@3 c4@3 e4@3 g4@3 a4@3 g4@2 e4@4 c4@2 d4 c4@2 a#3 a3@2 g3 f3@3 ~@9]/3",
  AF: "f4@3 a#4@2 c#5 d#5@3 f5@5 d5 c5@2 a4 f4@3 f4@2 g4", AG: "a4@2 f4 g4@2 a4 f4@3 f4@3 e4@6 [e4,g4]@6",
  AH: "~@3 c4@2 ~ a3@2 ~ c4@2 ~ [e4,g4]@12", AI: "~@3 [e4,g4]@2 ~ [d4,f4]@2 ~ [c4,e4]@2 ~ [d4,g4]@9 g4@2 a4",
  AJ: "b4@2 g4 a4@2 b4 g4@3 e4@2 d4 g4@3 b4 a4 g4 b4 a4 g4 e4 d4 c4",
  AK: "[b4@3 a4@2 g4 b4@2 a4 g4@3 c4@3 f4@3 a4@3 d5@2 f5@9 c5 d5@2 c5 f5@3 c5@2 d5 c5@2 a4 g4@2 f4@4 a4@2 f4 g4@3 f4@3 e4@6 e4@6]/3",
  AL: "e4@3 e4@2 d4 c4@3 c4@2 d4 e4@3 e4@2 d4 c4@3 c4@2 d4", AM: "[e4@3 e4 d4 c4 g3@30 ~@12]/2", AN: "~@2 e4!2",
  AO: "~@2 c5 b4 a4 g4 a4@2 g4 e4 d4 c4 a4@5 b4 e5@2 f5 e5@2 d5", AP: "c5@2 g4 e4 d4 c4 a3@3 c4@3 [e4,g4]@12",
  AQ: "~@3 g3@2 ~ a3@2 ~ c4@2 ~ [e4,g4]@12", AR: "~ c4 d4 c4 [c4,f4]@4",
  AS: "~@3 f4@2 g4 a4@2 f4 g4@2 a4 f4@3 f4@2 g4 a4@2 f4 a4@2 c5", AT: "f5@3 d5@2 c5 a4@3 f4@3 e4@9 c5@2 d5",
  AU: "c5@5 d5 e5@2 c5 d5@2 e5 c5@3 c5@3 c5@3 g4@2 a4",
  AV: "c5@2 g4 a4@2 g4 f4@2 e4 d4@2 c4 e4@3 e4@2 c4 d4 e4 d4 c4@3",
  AW: "g3@5 b3 b3@2 ~ b3@2 b3 [b3,d4]@2 [b3,d4]@4 [b3,d4]@2 [b3,d4]@3 [b3,d4]", // Bm
  AX: "[b3,d4]@2 ~ g4@5 a4 b4@2 g4 a4@3 b4 a4 g4 a4@3 b4 a4 g4", // Bm
  AY: "f3@5 g3 a3@2 c4 d4@2 c4 f4@3 a4@2 f4 g4@2 a4 f4@2 g4",
  AZ: "[a4@2 f4 g4@2 f4 f4@2 g4 a4@2 f4 g4@3 f4@3 e4@5 [e4,g4]@3 c4 d4@2 e4 c4@3 c5@2 g4 a4@2 g4 e4@2 d4 c4@3 c5@2 d5]/2", // Em
  BA: "e5@2 f5 e5@2 d5 c5@2 a4 g4@2 f4 e4@2 d4 c4@3 e4@2 d4 c4@3",
  BB: "a3@2 f3@3 g3 a3@2 f3 g3@2 a3 f3@3 c4@3 g4@2 ~ g4@2 ~", BC: "g3@5 a3 b3@2 d4 e4@2 g4@4 g4@2 b4 a4@2 g4 g4@3",
  BD: "[c4,f4]@6 [c4,e4]@6 [c4,e4]@6 c5@2 d5 e5@2 c5", // F5 C
  BE: "d5@2 e5 c5@2 g4 a4@2 c5 e4@2 f4 g4@2 a4 g4@2 f4 e4@2 c4 d4@2 e4", BF: "c4@2 b3 g3@3 a3@3 e4@9 ~@6",
  BG: "g3@3 a3@3 c4@3 e4@3 g4@3 a4@3 g4@2 e4@4", BH: "c4@2 d4 c4@2 a#3 a3@2 g3 f3@3 ~@12",
})).s("gm_fiddle").gain(0.4).pan(0.8)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B@9 C B D B E B F B F B G B@6 E B H B@7 I B@3 J K L B M B F B F B N B O B K ~ P B@5 J B@3 Q B R B@2 S T ~@5
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~@2 x!2 ~@2", B: "~ x ~ x", C: "~@6 x ~@7 x ~@2 x ~@2 x!2 ~@2",
  D: "~@6 x ~@10 x ~@3 x ~@2", E: "~@6 x ~@10 x ~@2 x!2 ~@2", F: "~@5 x ~@2 x!2 ~@8 x ~@5",
  G: "~@6 x ~ x!2 ~ x ~@6 x ~@5", H: "~@6 x ~@8 x ~ x ~@2 x!2 ~@2", I: "~@6 x ~@5 x ~ x!2 ~ x!2 ~ x!2 ~ x",
  J: "~@6 x ~@11 x ~ x!2 ~ x", K: "~ x ~@2", L: "x ~ x!2 ~ x!2 ~ x ~@9 x ~@5", M: "~@6 x ~@11 x ~@4 x",
  N: "~@3 x ~ x ~@2 x!2 ~@8 x ~@5", O: "~@5 x!2 ~ x!2 ~ x ~@6 x ~@5", P: "x ~ x ~@2 x ~@2 x!2 ~@8 x ~@5", Q: "~@23 x",
  R: "~@6 x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x ~@2 x", S: "~@6 x ~ x ~@2 x ~@6 x ~@5", T: "~@6 x ~@4 x ~@6 x ~@5",
})).gain(0.4)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@4 A B ~ C ~@3 C ~@5 D ~@3 D ~@10 E ~@2 F G ~ C ~@3 C ~@11 H ~@2 I ~@3 J K ~ K ~@3 L ~ M N ~@10
>`.pickRestart({
  A: "~@11 x!2 ~@10 x", B: "x ~@7 x ~@2 x!2 ~@4 x ~@2 x!2 ~@2", C: "~@15 x ~ x!2 ~ x!2 ~@2",
  D: "~@3 x ~ x!2 ~ x!2 ~@14", E: "~@15 x ~ x ~@2 x!2 ~@2", F: "~@12 x ~ x!2 ~ x!2 ~@5",
  G: "~@12 x ~ x!2 ~ x!2 ~ x!2 ~@2", H: "~@3 x ~ x ~@2 x!2 ~@14", I: "~@15 x ~ x ~@3 x ~ x",
  J: "~@2 x!2 ~ x!2 ~ x!2 ~@2 x ~@2 x ~@2 x ~@5", K: "x ~ x ~@2 x ~@2 x!2 ~@14", L: "~@12 x ~ x ~@2 x!2 ~@2 x ~@2",
  M: "~@12 x ~ x ~@2 x!2 ~ x!2 ~@2", N: "~@12 x ~ x ~@2 x!2 ~@5",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@32 A ~@21 B ~@3 C ~@7 C ~@7 D ~ B ~@5>".pickRestart({
  A: "~ x", B: "x", C: "~ x ~@2", D: "~@7 x",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@45 [~@18 x ~ x ~@2 x] [~@9 x ~ x ~@12] ~@35>").gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~@9 B ~@10 C ~@9 B ~ B ~@7 B ~ B D E ~@6 C ~ F C ~@2 C ~ D ~@3 C B ~@2 G ~ B@2 ~@3 B ~@4
>`.pickRestart({
  A: "~@7 x ~@4", B: "x", C: "~ x", D: "~@2 x!2", E: "x!2 ~@2", F: "x!2", G: "~ x ~@2",
})).gain(0.4)

stack(bass, epiano1, fiddle, kick, snare, hihat, low_tom, open_hat, mid_tom, crash)

More by The Beatles