Strudelify

Don't Pass Me By

The Beatles

KeyC majorTempo86 bpm
0:00/0:00
// Don't Pass Me By — The Beatles
// 86 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 12, 4/4 at bar 13, 2/4 at bar 22, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 81 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(86/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 · fiddle
const fiddle = note(`<
  ~@12 A B C D E F G@2 H@2 I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF@3 AG AH AI AJ AK AL@3 AM AN@2 AO AP AQ
  AR AS AT AU AV AW AX AY AZ BA@2 BB BC BD BE BF BG BH BI
>`.pickRestart({
  A: "~@14 c5 d5", B: "e5 c5 d5 e5 c5 g4 a4 g4 e4 c4 d4 e4 c4@2 g3 a3", C: "c4@2 c4 d4 e4 c4 d4 e4 c4@2 g3@2 c4@3 d4",
  D: "e4@2 ~@6 [e4,g4]!2 ~ [e4,g4]!2 ~ [e4,g4]!2", E: "~ [e4,g4]!2 ~ [e4,g4]!2 ~ [e4,g4] f4 ~@7",
  F: "~@2 f4 g4 a4 f4 g4 a4 f4@4 ~@4",
  G: "[~@2 f4 g4 a4 [f4,a4] [f4,a4]@2 ~@2 [b4,d5]@2 [b4,d5]@2 ~ [b4,d5]@3 [b4,d5]@2 ~@2 g4 a4 ~@2 [b4,d5]@2 [b4,d5]@2 [b4,d5]@2]/2", // F Bm
  H: "[[b4,d5]@2 [b4,d5]@2 a4 g4 a4 g4 ~@2 f4@2 f4@3 a4@3 c5 d5 f5 d5 c5 ~@3 f4@2 f4@2 f4@2]/2", // Bm
  I: "e4@2 [e4,g4]@4 c5 d5 e5 c5 d5 e5 c5 g4 a4 c5", J: "e4 f4 g4 a4 g4 f4 e4 c4 d4 e4 c4 a3 g3@2 a3@2",
  K: "e4@5 g3 a3 c4", L: "e4@2 g4@2 a4@2 g4 e4@3 c4 e4 c4 a#3 a3 g3", M: "f3@6 ~@2 f4@2 a#4 c5 d#5@2 f5@2",
  N: "~ d5 c5 g4 f4@2 f4 g4 a4 f4 g4 a4 f4@2 f4@2", O: "e4@4 [e4,g4]@4 ~@2 c4 ~ a3 ~ c4 [d#4,f#4]",
  P: "[e4,g4]@8 ~@2 [e4,g4] ~ [d4,f4] ~ [c4,e4] f#4", Q: "[d4,g4]@6 g4 a4 b4 g4 a4 b4 g4@2 e4 d4, c#4 ~@15",
  R: "g4@2 b4 [g4,a4] b4 [g4,a4] e4 [c4,d4] b4@2 a4 g4 b4 a4 g4@2", S: "c4@2 f4@2 a4@2 c5 f5@6 c5 d5 c5",
  T: "f5@2 c5 d5 c5 a4 g4 f4@3 a4 f4 g4@2 f4@2", U: "e4@6 c4 d4 e4 c4 d4 e4 c4 a3 g3 a3",
  V: "c4@2 c4 d4 e4 g4 a4 g4 c5@2 c4@2 a4@2 g4@2", W: "c4@2 g3@2 c4@3 d4 e4@2 ~@6",
  X: "[e4,g4]!2 ~ [e4,g4]!2 ~ [e4,g4]!2 ~ [e4,g4]!2 ~ [e4,g4]!2 ~ [e4,g4]", Y: "f4 ~@9 f4 g4 a4 f4 g4 a4",
  Z: "f4@4 ~@6 f4 g4 a4 [f4,a4] [f4,a4]@2", AA: "~@2 [b4,d5]@2 [b4,d5]@2 ~ [b4,d5]@3 [b4,d5]@2 ~@2 g4 a4",
  AB: "~@2 [b4,d5]@2 [b4,d5]@2 [b4,d5]@2 [b4,d5]@2 [b4,d5]@2 a4 g4 a4 g4", AC: "~@2 f4@2 f4@3 a4@3 c5 d5 f5 d5 c5 ~",
  AD: "~@2 f4@2 f4@2 f4@2 e4@2 [e4,g4]@4 c5 d5", AE: "e5 c5 d5 e5 c5 g4 a4 c5 e4 f4 g4 a4 g4 f4 e4 c4",
  AF: "[d4 e4 c4 a3 g3@2 a3@2 e4@10 g3@2 a3@2 c4@2 e4@2 g4@2 a4@2 g4 e4@3 c4 e4 c4 a#3 a3 g3 f3@2 ~@6]/3",
  AG: "f4@2 a#4 c5 d#5@2 f5@3 d5 c5 g4 f4@2 f4 g4", AH: "a4 f4 g4 a4 f4@2 f4@2 e4@4 [e4,g4]@4",
  AI: "~@2 c4 ~ a3 ~ c4 [d#4,f#4] [e4,g4]@8", // D#m Em
  AJ: "~@2 [e4,g4] ~ [d4,f4] ~ [c4,e4] ~ [d4,g4]@6 g4 a4, ~@8 [c#4,f#4] ~@7", // Em Dm C G5 F#5
  AK: "b4 g4 a4 b4 g4@2 e4 d4 g4@2 b4 [g4,a4] b4 [g4,a4] e4 [c4,d4]", // Gsus2 Csus2
  AL: "[b4@2 a4 g4 b4 a4 g4@2 c4@2 f4@2 a4@2 c5 f5@6 c5 d5 c5 f5@2 c5 d5 c5 a4 g4 f4@3 a4 f4 g4@2 f4@2 e4@4 e4@4]/3",
  AM: "e4@2 e4 d4 c4@2 c4 d4 e4@2 e4 d4 c4@2 c4 d4", AN: "[e4@2 e4 [c4,d4] g3@20 ~@8]/2", AO: "~@2 e4!2",
  AP: "~ c5 b4 [g4,a4] a4 g4 e4 [c4,d4] c5@3 d5 e5 f5 e5 d5", // Gsus2 Csus2
  AQ: "c5 g4 e4 [c4,d4] a3@2 ~ [d#4,f#4] [e4,g4]@8, ~@3 c4 ~@4", AR: "~@2 g3 ~ a3 ~ c4 ~ [e4,g4]@8",
  AS: "~ c4 d4 c4 [c4,f4]@4", AT: "~@2 f4 g4 a4 f4 g4 a4 f4@2 f4 g4 a4 f4 a4 c5", AU: "f5@2 d5 c5 a4@2 f4@2 e4@6 c5 d5",
  AV: "c5@3 d5 e5 c5 d5 e5 c5@2 c5@2 c5@2 g4 a4", AW: "c5 g4 a4 g4 f4 e4 d4 c4 e4@2 e4 c4 d4 [d4,e4] c4@2",
  AX: "g3@3 b3!2 ~ b3!2 [b3,d4] [b3,d4]@3 [b3,d4] [b3,d4]@2 [b3,d4]", // Bm
  AY: "[b3,d4] ~ g4@3 a4 b4 g4 a4@2 b4 [g4,a4] a4@2 b4 [g4,a4]", AZ: "f3@3 g3 a3 c4 d4 c4 f4@2 a4 f4 g4 a4 f4 g4",
  BA: "[a4 f4 g4 f4!2 g4 a4 f4 g4@2 f4@2 e4@3 [e4,g4]@2 c4 d4 e4 c4@2 c5 g4 a4 g4 e4 d4 c4@2 c5 d5]/2", // Em
  BB: "e5 f5 e5 d5 c5 a4 g4 f4 e4 d4 c4@2 e4 d4 c4@2", BC: "a3 f3@2 g3 a3 f3 g3 a3 f3@2 c4@2 g4 ~ g4 ~",
  BD: "g3@3 a3 b3 d4 e4 g4@3 g4 b4 a4 g4 g4@2", BE: "[c4,f4]@4 [c4,e4]@4 [c4,e4]@4 c5 d5 e5 c5",
  BF: "d5 e5 c5 g4 a4 c5 e4 f4 g4 a4 g4 f4 e4 c4 d4 e4", BG: "c4 a3 g3@2 a3@2 e4@6 ~@4, ~@6 d4 ~@9",
  BH: "g3@2 a3@2 c4@2 e4@2 g4@2 a4@2 g4 e4@3, f3 ~@15", BI: "c4 d4 c4 a#3 a3 g3 f3 ~@9",
})).s("gm_fiddle").gain(0.25).pan(0.9)

// chords · rock organ · "keyboard"
const rock_organ = note(`<
  A B 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 F@2 E@2 D@2 N O P@2 ~@3
>`.pickRestart({
  A: "d6 [c6,d6] f6@2 g6@2 f6 [d6,e6] c6 a5 ~ c6 g5@2 e5@2", B: "d5 c5 ~ b4 g4 a4@2 f4 e4@2 d4@2 c4@4",
  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,f3] [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: "f3 ~ c3 ~ f3 ~ c3 [a4,c5,f5], ~ [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 ~", // F
  O: "g3 ~ d3 ~ g3 ~ d3 [b4,d5,g5], ~ [b4,d5,g5]@2 [b4,d5,g5]@2 [b4,d5,g5]@2 ~", // G
  P: "[[d3,a4,d5,f5] [c3,g4,c5,e5] [g4,c5,e5]@4 ~@2, ~@2 c3 ~@5]/2", // Dm C
})).s("gm_rock_organ").gain(0.22).pan(0.1)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@3 A B A C D E F G D H I J A K D L F M N B O A P Q@2 R@2 S T U V W X A C D E F Y D Z I J AA AB Q AC R AD AE AF U AG
  AH AI@2 AJ AH@3 AK AL AM AH AN AO AP AQ AR AS AT AU AV AW@2 ~@3
>`.pickRestart({
  A: "c2 ~ g1 ~ c2 ~ g1 ~", B: "c2@2 ~@2 g1@2 ~@2 c2@2 ~@2 g1 a1 b1@2", C: "c2@2 ~@2 g1@2 ~@2 c2@2 ~ c2 d2@2 e2@2",
  D: "f2 ~ c2 ~ f2 ~ c2 ~", E: "f2@2 ~@2 c2@2 ~@2 f2@2 ~ d2 e2@2 f2@2", F: "g2 ~ d2 ~ g2 ~ d2 ~",
  G: "g2@2 ~@2 d2@2 ~@2 g2@2 ~ d2 d2@2 g2@2", H: "f2 e2 f2 g2 c2 ~ g1 ~", I: "c2@2 ~@2 g1 a1 b1@2 c2@2 ~@2 g1@2 ~@2",
  J: "c2 g1@3 a1@2 b1@2 c2@2 ~@2 g1@2 ~@2", K: "c2@2 ~ c2 d2@2 e2@2 f2@2 ~@2 c2@2 ~@2",
  L: "f2@2 ~ d2 e2@2 f2@2 g2@2 ~@2 d2@2 ~@2", M: "g2@2 ~ d2 d2@2 g2@2 f2@2 ~@2 c2@2 ~@2", N: "f2 ~ c2 ~ f2 e2 f2 g2",
  O: "c2@2 ~@2 g1@2 ~@2 c2 g1@3 a1@2 b1@2", P: "c2@2 ~@2 g2@2 ~ c2 c2@2 ~@2 g2@2 c2@2", Q: "f2 ~ c3 ~ f2 ~ c3 ~",
  R: "c2 ~ g2 ~ c2 ~ g2 ~", S: "g1 ~ d2 ~ g1 ~ d2 ~", T: "g1@2 ~@2 d2@2 ~@2 g1@2 ~ e1 g1@2 f#1@2",
  U: "f1 ~ a1 c2 f1 ~ a1 c2", V: "f1@2 ~@2 a1@2 c2@2 f1@2 ~ g1 a1@2 c2@2", W: "c2@2 ~@2 g1@2 ~@2 c2@2 ~ g1 g1@2 c2@2",
  X: "c2 ~ g1 ~ c2 ~ g1 c2", Y: "g2@2 ~@2 d2@2 ~@2 g2@2 d3 ~ b2@2 c3@2", Z: "f2 ~ f2 g2 c2 ~ g1 ~",
  AA: "c2@2 ~@2 g1@2 ~@2 c2@2 ~@2 g1@2 c2 ~", AB: "c2 ~ d2 e2 f2 ~ c3 ~", AC: "f2 ~ f2 g2 c2 ~ g2 ~",
  AD: "c2 ~ g2 ~ g1 ~ d2 ~", AE: "g1@2 ~@2 d2@2 ~@2 g1@2 ~ g1 d2@2 ~ b1", AF: "g1@2 ~ e1 g1@2 f#1@2 f1@2 ~@2 a1@2 c2@2",
  AG: "f1@2 f2 ~ a1@2 c2@2 c3@2 ~@2 g2@2 ~@2", AH: "c3 ~ g2 ~ c3 ~ g2 ~", AI: "[c3 ~ g2@12 ~@2]/2",
  AJ: "g2!2 ~ g2 ~ g2 g2@2 c3@2 ~@2 g2@2 ~@2", AK: "c3@2 ~ c3@2 d3 e3@2 f3@2 ~@2 c3@2 ~@2", AL: "f3 ~ c3 ~ f3 ~ c3 ~",
  AM: "f3@2 ~@2 c3@2 ~ c3 c3@2 ~@2 g2@2 ~@2", AN: "c3@2 ~@2 g2@2 ~@2 c3@2 ~ c3 b2@2 a2@2", AO: "g2 ~ d3 ~ g2 ~ d3 ~",
  AP: "g2 ~ d3 g3 d3 g2 d3 g3", AQ: "f2 ~ a2 c3 f2 ~ a2 c3", AR: "f2@2 ~@2 a2@2 c3@2 f2@2 ~ g2 a2@2 c3@2",
  AS: "c3 ~@3 g2 ~@3 c3 ~@3 g2 ~@3", AT: "c3 ~ c3 ~ g2@2 ~@2 c3@2 ~ c3!2 b2 a2 g2", AU: "f2 ~ a2 ~ f2 ~ a2 c3",
  AV: "g2@2 ~@2 d3@2 ~@2 g2@2 ~@2 d3@2 ~ b2, ~@7 g2", AW: "[c3@3 b2 c3@3 b2 c3@24]/2",
})).s("gm_electric_bass_finger").gain(0.32).pan(0.9)

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

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

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

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@53 [~@2 x!2 ~ x!2 ~@9] ~@27>").gain(0.32)

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

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

// drums · ride bell
const ride_bell = s("rd").struct("<~@76 x ~@4>").gain(0.32)

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

More by The Beatles