Strudelify

Octopus's Garden

The Beatles

KeyE majorTempo191 bpm
0:00/0:00
// Octopus's Garden — The Beatles
// 191 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 7 "pick guitar 2" acoustic guitar nylon (copy of ch 5 "picking guitar" electric guitar clean)
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): solo guitar.
setcpm(191/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 · electric guitar jazz · "guitar lead"
const electric_guitar_jazz = note("<A B C D E F G ~@64 H I J K L M@2 N@2 O@2 P L Q R S T ~@41>".pickRestart({
  A: "b3@3 ~ e4@4 ~@2 b4@5 ~", B: "g#4@2 e4 ~ f#4@2 ~@2", C: "b3@3 ~ e4@4 ~@2 d#5@3 ~ b4 ~", D: "g#4@2 e4 ~ e4 ~ f#4 ~",
  E: "f#4@7 ~ c#5@2 ~@2 g#4@4", F: "e4@2 ~@2 e4@3 ~ f#4@3 ~ c#4@3 ~", G: "g#3@3 ~@5 e3@3 ~ f#3@4",
  H: "~@7 g4@4 ~ b4@2 ~@2", I: "~@4 b4@7 ~ d5@2 ~@2", J: "b4@3 ~ a4@2 ~@2 a4@4 ~@2 b4@2",
  K: "~@2 d5 ~ d5@2 ~@2 d5@3 ~ b4@2 d5@2", L: "~@2 d5 ~ d5@2 ~@2 b4 ~ d5@2 ~@2 e5 ~",
  M: "[b5@3 ~@5 a5@2 ~@2 a5@7 ~ b5@3 ~@5 a5@2 ~@2]/2", N: "[a5@7 ~ e5@2 ~@2 e5@7 ~ e5@2 ~@2 e5@7 ~]/2",
  O: "[a4@8 e4@2 ~@2 a4 ~ b4@4 e5@2 c#5@2 ~@2 a4@3 ~ b4@2 ~@2]/2", P: "b4 ~ d5@2 ~@4 d5@2 ~@2 b4 ~ d5@2",
  Q: "b5@3 ~@5 b5@3 ~@5", R: "b5@3 ~ a5@2 ~@2 a5@3 ~ b5@2 ~@2", S: "a5@5 ~@3", T: "~@3 [e4,b4]",
})).s("gm_electric_guitar_jazz").gain(0.36).pan(0.7)

// other · electric guitar jazz · "guitar lead" · soft notes
const electric_guitar_jazz_2 = note("<A ~ A ~@3 B ~@73 C ~@6 D ~@41>".pickRestart({
  A: "~@8 g#4 ~@7", B: "~@2 e3 ~@5", C: "~@5 f#4 ~@2", D: "~@2 [e4,b4]@3 ~ [e4,b4] ~ [e4,b4]@3 ~@5",
})).s("gm_electric_guitar_jazz").gain(0.2).pan(0.7)

// other · overdriven guitar · "guitar lead"
const overdriven_guitar = note("<~@107 A B ~ C D ~ E F G F ~ H I ~@2 J@2 ~@2 K L@2>".pickRestart({
  A: "g#3@7 ~ f#3@7 ~", B: "e3@15 ~", C: "[b3,d#4]@4 [b3,d#4]@4 [b3,d#4]@4 [b3,d#4]@3 ~",
  D: "~@4 [b3,d#4]@4 [b3,d#4,f#4]@3 ~@5", E: "~@4 e5@2 d#5@3 ~ e5@2 d#5@2 ~@2", F: "c#5@9 ~@7",
  G: "g#5@2 f#5@2 ~@2 g#5@2 f#5@2 ~@2 e5 ~@3", H: "~@4 e4 ~@3 e4@4 ~@2 f#4@2", I: "~@2 a4@2 f#4@2 ~@2 e4@7 ~",
  J: "[f#5@6 ~ e5@2 ~@3 f#5@7 ~ e5 ~@3 e5@3 ~ f#5@2 ~@2]/2", K: "~ f#5@4 c#5@2 ~@3 b4@3 f#4@3",
  L: "[~ e4@2 d#4@2 f#4@10 ~]/2",
})).s("gm_overdriven_guitar").gain(0.36).pan(0.7)

// bass · fretless bass · "bass"
const bass = note(`<
  ~ A ~ B C D E F G H I J K L M N G O I J K L P Q R@3 S T@2 U V W H X Y Z AA AB AC G H I J K AD P AE G H I J K L M Q R@3
  S T@2 AF AG W H X Y AH F AI AJ AK AL AM@2 AN AO AP AQ AK AL AM AR AS AT AU AV G H I AW K AX AY AZ BA O I BB K BC BD BE
  R@3 S T@2 U V W H X Y BF BG BH BI BJ BK BL BM BN BO BP BQ ~
>`.pickRestart({
  A: "~@2 b1 ~ e2@2 ~@2", B: "~@2 b1 ~ b1@2 ~@2 c#2@2 ~@2 d#2@2 ~@2", C: "e2@7 ~ b1@2 ~@6", D: "c#2@6 ~@2 g#1@3 ~@5",
  E: "a1@6 ~@2 e1@3 ~@5", F: "b1@3 ~ c#2@3 ~ d#2@3 ~ b1@3 ~", G: "e2 ~ b1 ~", H: "e2 ~ d#2 ~", I: "c#2@3 ~@5 g#1@3 ~@5",
  J: "c#2@3 ~@5 b1@3 ~@5", K: "a1 ~ e2 ~", L: "a1@3 ~@5 a1@2 ~@2 a1@3 ~", M: "b1@2 ~@2 b1@3 ~ b1@2 ~@2 b1@3 ~",
  N: "b1@3 ~ c#2@3 ~ d#2@2 b1@2 c#2@2 d#2@2", O: "e2@3 ~@5 d#2@4 ~@4", P: "b1@2 ~@2 b1@3 ~ b1@3 ~ b1@3 ~",
  Q: "c#2@3 ~ d#2@3 ~ b1@2 c#2@2 d#2@3 ~", R: "c#2/3", S: "c#2@8 b1@7 ~", T: "[a1@31 ~]/2", U: "b1!4",
  V: "~@4 b1@3 ~ c#2@4 d#2@4", W: "e2@5 ~@3 e3@6 ~@2", X: "c#2@13 ~@3", Y: "c#2 ~ b1 ~", Z: "a1@13 ~@3",
  AA: "b1 ~ b1 ~ c#2 ~ d#2 ~", AB: "e2@2 ~@2 e2@2 ~@2 e2@5 ~@3", AC: "e2@5 ~@3 e2@2 c#2@2 b1@3 ~",
  AD: "a1@3 ~@5 a1@2 ~@2 a1@2 ~@2", AE: "b1@2 ~@2 c#2@3 ~ d#2@2 b1 ~ c#2@2 d#2@2", AF: "b1!3 ~",
  AG: "~@4 b1@3 ~ c#2@4 d#2@3 ~", AH: "a1@4 c#2@3 ~", AI: "e2@6 ~@2 b1@5 ~@3",
  AJ: "d3@2 d3@2 d3@2 d3 ~ d3@3 ~ c#3@2 b2 ~", AK: "a2@2 a2@2 e2@3 ~", AL: "a2@4 a2@4 e2@7 ~",
  AM: "f#2@2 f#2@2 c#2@3 ~", AN: "d2@4 d2@4 a1@7 ~", AO: "d2!2 a1 d2", AP: "e2 ~ e2 ~ e2@3 ~",
  AQ: "e2 f#2@2 a2@3 ~ e2@6 ~@3", AR: "f#2@4 f#2@4 e2@7 ~", AS: "d2 ~ d2 ~ d2@4",
  AT: "e2@2 ~@2 e2@3 ~@3 d2@2 c#2@2 b1@2", AU: "a1 ~ a1 ~ a1 ~ a1 ~", AV: "b1@2 ~@2 b1@3 ~ c#2@2 ~@2 d#2@2 ~@2",
  AW: "c#2@3 ~ c#2@3 ~@5 b1@3 ~", AX: "a1@3 ~@5 e2@2 ~@2 a1@3 ~", AY: "b1@2 ~@2 b1@3 ~ c#2@2 ~@2 c#2@3 ~",
  AZ: "d#2@3 ~ b1@3 ~ c#2@3 ~ d#2@2 ~@2", BA: "e2@3 ~ e2@3 ~ b1@4 ~@4", BB: "c#2@3 ~ c#2@3 ~ b1@3 ~@5",
  BC: "a1@3 ~ a1@3 ~ e2@3 ~@5", BD: "b1@2 ~@2 b1@3 ~ d#2@3 ~@5", BE: "b1@3 ~ b1@3 ~ c#2@3 ~ d#2@3 ~",
  BF: "a1@7 ~ e2@6 ~@2", BG: "b1@3 ~ c#2 ~ d#2 ~", BH: "e2@7 ~ b1@5 ~@3", BI: "c#2@5 ~@3 b1@5 ~@3",
  BJ: "a1@5 ~@3 c#2@3 ~ e2@3 ~", BK: "b1@3 ~ d#2 ~ f#2 ~", BL: "c#2@3 ~ c#2@3 ~ c#2@3 ~ c#2@3 ~",
  BM: "c#2@2 c#2@2 b1@2 ~@2 b1@7 ~", BN: "a1@5 ~@3 c#2@5 ~@3", BO: "b1@5 ~@4 d#2@5 ~@2", BP: "~ e2@6 ~@9",
  BQ: "~@6 d#2@3 ~ e2@5 ~",
})).s("gm_fretless_bass").gain(0.46)

// other · electric guitar jazz · "echo lead"
const electric_guitar_jazz_3 = note("<A B C D E F G ~@58 H I ~@46 J K L K ~ M N ~@2 O@2 ~@2 P Q@2>".pickRestart({
  A: "b3@4 e4@4 g#4 ~ b4@5 ~", B: "g#4@2 e4 ~ f#4@2 ~@2", C: "b3@3 ~ e4@3 ~ g#4 ~ d#5@3 ~ b4 ~",
  D: "g#4@2 e4 ~ e4 ~ f#4 ~", E: "f#4@7 ~ c#5@2 ~@2 g#4@4", F: "e4@2 ~@2 e4@3 ~ f#4@3 ~ c#4@3 ~",
  G: "g#3@3 ~ e3@2 ~@2 e3@3 ~ f#3@4", H: "~@8 a4@7 ~", I: "g#4", J: "~@4 e5@2 d#5@3 ~ e5@2 d#5@2 ~@2", K: "c#5@9 ~@7",
  L: "g#5@2 f#5@2 ~@2 g#5@2 f#5@2 ~@2 e5 ~@3", M: "~@4 e4 ~@3 e4@4 ~@2 f#4@2", N: "~@2 a4@2 f#4@2 ~@2 e4@7 ~",
  O: "[f#5@6 ~ e5@2 ~@3 f#5@7 ~ e5 ~@3 e5@3 ~ f#5@2 ~@2]/2", P: "~@2 e5@2 ~ c#5@2 ~@2 b4@3 ~ g#4@2 ~, ~ f#5@2 ~@13",
  Q: "[f#4@2 e4@2 f#4 ~ d#4@4 e4@22]/2",
})).s("gm_electric_guitar_jazz").gain(0.41).pan(0.3)

// chords · electric guitar clean · "picking guitar"
const electric_guitar_clean = note(`<
  ~@4 A B C D E F G H I J K D E L G M N@2 O D P@3 Q R ~ S@2 T U V W X Y Z AA AB U AC H AD AE AF AG E L G M N@2 O D P@3 Q
  R ~ AH@2 T U V W AI AJ AK AA AL AM AN AO AP AQ AR AS AL AM AN AO AT AU AV AW E F G H AX AY AZ D E L G M N@2 O D P@3 Q
  R ~ S@2 T U V W X Y BA BB AI AJ BA BC BD BE@2 BF@2
>`.pickRestart({
  A: "~@10 g#3@5 ~, e4@13 ~@3, ~@4 g#3@5 ~@7, ~@6 b3@9 ~", B: "~@5 g#3@3, g#3 ~, ~ e3@2 ~, ~@6 b3@7 ~@3",
  C: "~@3 c#4, [g#3,g#4], ~@2 e3@13 ~, ~@3 c#4@3 ~@2, ~@5 e4@3", D: "~@5 f#4 ~@2, b4@5 ~@3, ~ b3@2 ~, ~@3 d#4@3 ~@2",
  E: "~@3 g#3, e4, ~@4 e3@11 ~, ~@3 g#3@3 ~@2, ~@10 b3@5 ~",
  F: "~@3 g#3, e4@5 b3@3, e3@4 e3@11 ~, ~@2 b2@13 ~, ~@3 g#3@3 ~@2",
  G: "~@5 g#4@3, g#4@5 ~@3, ~@2 g#3@13 ~, ~ b3@3, ~@6 e4@9 ~",
  H: "~@5 f#4 e4 ~, g#4@15 ~, ~@2 g#3@13 ~, ~ b3@3, ~@3 e4@3 ~@2",
  I: "~@3 c#4, a4@7 ~, a3@3 a3@5, ~@2 e3@13 ~, ~@2 c#4@3 e4@3",
  J: "~@3 e4, a3, a4@7 ~, ~@2 e3@13 ~, ~@4 c#4@2 e4@4 c#4@5 ~", K: "b3@3 d#4@2 f#4@3, f#3@15 ~, b4@3 ~",
  L: "~@3 e3, e4, ~@2 b2@13 ~, ~@2 e3@3 b3@3, ~@3 g#3@5",
  M: "~@10 f#4@2 e4 ~@3, g#4@15 ~, ~@2 g#3@13 ~, ~ b3@3, ~@3 e4@3 ~@2",
  N: "~@3 c#4, a4, a3 a3@3, ~@2 e3@13 ~, ~@3 c#4@2 e4@3", O: "b3@3 d#4@2 f#4@3, [f#3,b4]",
  P: "[~ e4@32 ~@15, [g#3,c#4]@17 ~@7]/3", Q: "e4@7 ~ d#4@7 ~", R: "c#4@15 ~",
  S: "[[b3,d#4,f#4]@3 ~ [b3,d#4,f#4]@4 [b3,d#4,f#4]@4 [b3,d#4,f#4]@8 [b3,d#4,f#4]@4 [b3,d#4,f#4]@3 ~@5]/2", // B
  T: "~@12 e4@3 ~, e4@3 ~, ~@4 e3@11 ~, ~@3 g#3@5, ~@10 b3@5 ~",
  U: "~@3 g#3, e3@4 e3@11 ~, ~@2 b2@13 ~, ~@3 g#3@3 ~@2, ~@5 b3@3", V: "~@5 e4@3, g#4@15 ~, ~ g#3@3, ~@3 b3@5",
  W: "~@5 f#4 e4 ~, g#4, ~ g#3@3, ~@3 b3@5", X: "~@3 e4@2 ~ e4@2, a4@9 ~ a4@6, ~ a3@7, ~ c#4@3",
  Y: "~@3 f#4@2 ~ f#4@2, b4@9 ~ b4@5 ~, ~ b3@7, ~ d#4@3", Z: "~@2 b3 c#4 [e4,b4,e5]@3 ~, [e4,g#4]@3 ~@5",
  AA: "~@5 b3 c#4@2, [e4,g#4]@9 ~@7, ~@4 e3@7 ~@5, ~@6 g#3@7 ~@3", // E
  AB: "~@3 g#3, e4, b4@13 ~@3, ~@4 e3@11 ~, ~@6 g#3@4 b3@5 ~",
  AC: "~@10 g#4@5 ~, g#4@5 ~@3, ~@2 g#3@13 ~, ~ b3@3, ~@6 e4@9 ~",
  AD: "~@3 c#4, a3@3 a3@5, ~@2 e3@13 ~, ~ c#4@2 ~, ~@5 e4@3",
  AE: "~@3 e4, a3, ~@2 e3@13 ~, ~@4 c#4@6 c#4@5 ~, ~@3 e4@3 ~@2", AF: "b3@3 d#4@2 f#4@3, f#3@15 ~",
  AG: "~@10 f#4@5 ~, b4@5 ~@3, ~ b3@2 ~, ~@3 d#4@3 ~@2",
  AH: "[[b3,d#4,f#4]@3 ~ [b3,d#4,f#4]@4 [d#4,f#4]@5 ~@19, ~@8 b3@13 ~@11]/2", // B D#m
  AI: "~@12 e4@3 ~, a4@9 ~ a4@5 ~, ~ a3@7, ~ c#4@3, ~@3 e4@3 ~@2",
  AJ: "~@3 f#4@2 ~ f#4@2, b4@9 ~ b4@6, ~ b3@7, ~ d#4@3", AK: "~@2 b3 ~@2 e4@3, [e4,g#4]@6 c#4@9 ~",
  AL: "e4@4 ~@2 c#4@4 e4@3 ~@3, ~@4 a3@11 ~", AM: "e4@2 ~ c#4@2 e4@2 ~, ~@4 a3@11 ~",
  AN: "f#4@2 f#3 ~@2 c#4@2 ~, ~@3 a3@4 ~", AO: "~@2 f#3 ~@2 c#4@2 ~, f#4@3 a3@3 ~@2",
  AP: "d5@4 d4@2 ~@4 a4@5 ~, ~@6 f#4@9 ~", AQ: "~@5 a4@2 ~, d5@6 f#4@7 ~@3, ~@4 d4@9 ~@3", AR: "b4@4 e4@2 g#4@4 b4@5 ~",
  AS: "e5@4 e4@2 g#4@4 b4@5 ~", AT: "a4@4 d4@2 f#4@4 a4@2 d4@3 ~", AU: "b4@2 e4 b4@2 g#4 e4 ~",
  AV: "a3@3 ~ e3@2 a3@4 e4@2 c#4@4", AW: "~@2 e4@3 ~@3 e4@4 ~@4, b3@5 ~ b3@6 ~@4",
  AX: "~@3 c#4, a4@5 e4@3, a3@3 a3@5, ~@2 e3@13 ~, ~ c#4@2 ~",
  AY: "~@3 e4, a3, a4@10 c#4@5 ~, ~@2 e3@13 ~, ~@2 c#4 e4@3 ~@2", AZ: "b3@3 d#4@2 f#4@3, [f#3,b4]@15 ~",
  BA: "~@5 e4@3, e4 ~, ~ e3@2 ~, ~@3 g#3@4 ~", BB: "~@10 e4@5 ~, e4@9 ~@7, ~@4 e3@7 ~@5, ~@6 g#3@7 ~@3",
  BC: "~@10 e4@5 ~, e4 ~, ~@4 e3@7 ~@5, ~@6 g#3@7 ~@3", BD: "~@3 c#4, e4@9 ~ e4@6, ~ e3@7, ~ a3@3, ~@3 c#4@3 ~@2",
  BE: "[~@13 d#4@4 [e4,g#4]@15, f#4@10 ~ f#4@6 ~@15, ~@3 f#3@15 ~@14, ~@5 b3@12 ~@15, ~@7 d#4@6 ~@19]/2", // E
  BF: "[~@6 [d#4,f#4]@3 ~ [e4,g#4]@17 ~@5]/2", // D#m E
})).s("gm_electric_guitar_clean").gain(0.31).pan(0.7)

// chords · piano
const piano = note(`<
  ~@24 A B C D E@2 ~@2 F G H I J K L M ~@16 A B N O P@2 ~@2 Q R H I J K S T ~@32 A B C U V@2 ~@2 W G H I J K X Y Z AA
  AB@2 AC AD AE AF ~
>`.pickRestart({
  A: "[c#5,e5]@2 ~@2 [c#5,e5]@2 ~@2 [c#5,e5]@2 ~@2 [c#5,e5,g#5]@2 g#4 ~", // C#m
  B: "[c#5,e5,g#5] ~ [c#5,e5] ~ [c#5,e5,g#5] g#4 [c#5,e5,g#5] ~", // C#m
  C: "[c#5,e5,g#5]@2 ~@2 [c#5,e5]@2 g#4 ~ [c#5,e5,g#5]@2 ~@2 [c#5,e5,g#5]@2 g#4@2", // C#m
  D: "[c#5,e5,g#5] ~ [c#5,e5,g#5] ~ [g#4,e5,g#5] c#5 [b4,e5,g#5] ~, c#4@7 ~ b3@7 ~", // C#m E
  E: "[[a4,c#5,e5]@2 ~@2 [a4,c#5,e5]@3 ~ [a4,e5]@2 ~@2 [a4,c#5,e5]@3 ~ [a4,c#5,e5]@2 ~@2 [a4,c#5,e5]@3 ~ [a4,c#5,e5]@2 ~@2 [a4,c#5,e5]@3 ~, a3@7 ~@9, ~@7 e4@2 ~@6 e4@2 ~@6 e4@2 ~@7]/2", // A A5 A
  F: "~ e5@2 ~@5 d#5@2 e5@3 ~@3", G: "b4@5 ~@3 f#5 ~ g#5 ~ e5@3 ~", H: "c#5@4 g#4@3 ~", I: "c#5@5 ~@11", J: "a4@7 ~",
  K: "b4@13 ~@3", L: "~@4 g#5@2 b5@2 e5@2 f#5@2 e5@3 ~, [e5,b5]@3 ~@5", M: "~ b4@8 ~@7, e5 ~",
  N: "[c#5,e5,g#5] ~ [c#5,e5] g#4 [c#5,e5,g#5] ~ [c#5,e5,g#5] g#4", // C#m
  O: "[c#5,e5,g#5] ~ [c#5,e5,g#5] ~ [g#4,e5,g#5] c#5 [b4,e5,g#5] ~, c#4@8 b3@7 ~", // C#m E
  P: "[[a4,c#5,e5]@2 ~@2 [a4,c#5,e5]@3 ~ [a4,e5]@2 ~@2 [a4,c#5,e5]@3 ~ [a4,c#5,e5]@2 ~@2 [a4,c#5,e5]@3 ~ [a4,c#5,e5]@2 ~@2 [a4,c#5,e5]@3 ~, a3@13 ~@19, ~@7 e4@2 ~@6 e4@2 ~@6 e4@2 ~@7]/2", // A A5 A
  Q: "~ e5@2 ~@5 b4@2 ~@6", R: "e5@3 ~@5 d#5 e5 ~@2 b4@3 ~", S: "~@4 g#5@2 ~@2 g#5@4 b5@3 ~, [e5,b5]@3 ~@5",
  T: "[b4,e6] ~", U: "[c#5,e5,g#5] ~ [c#5,e5,g#5] ~ [g#4,e5,g#5] c#5 [b4,e5,g#5] ~, c#3@7 ~ b2@7 ~",
  V: "[[a4,c#5,e5]@2 ~@2 [a4,c#5,e5]@3 ~ [a4,e5]@2 ~@2 [a4,c#5,e5]@3 ~ [a4,c#5,e5]@2 ~@2 [a4,c#5,e5]@3 ~ [a4,c#5,e5]@2 ~@2 [a4,c#5,e5]@3 ~, a2@7 ~@9, ~@7 e4@2 ~@6 e4@2 ~@6 e4@2 ~@7]/2", // A A5 A
  W: "~ e5@2 ~@5 d#5@2 e6@5 ~, ~@10 e5@3 ~@3", X: "~@3 b4@2 ~@3 [b4,e5]@2 ~@4 [b4,e5]@2",
  Y: "~@2 [b4,e5] ~ [b4,e5] ~@3", Z: "~ [f#4,a4] ~ [f#4,a4]", AA: "~@4 [f#4,b4]@5 ~@3 [f#4,b4]@3 ~",
  AB: "[~ [e4,g#4]@5 [e4,g#4]@4 ~@2 [e4,g#4]@6 [e4,g#4]@4 ~@2 [e4,g#4]@3 ~ [e4,g#4]@2 ~@2]/2", // E
  AC: "~@4 [f#4,a4]@4 ~@5 a4@3, ~@3 f#4", AD: "~@5 [f#4,b4]@5 ~@3 [f#4,b4]@3", AE: "~ [b4,e5]@3 ~@12",
  AF: "~@6 [d#4,f#4]@3 ~ [e4,g#4]@3 ~@3", // D#m E
})).s("gm_piano").gain(0.26).pan(0.3)

// chords · piano · soft notes
const piano_soft = note("<~@24 A B@2 ~ C ~@27 A B@2 ~ C ~@43 A B@2 ~ C ~@9 D E ~@9>".pickRestart({
  A: "g#5 ~ g#5 ~ g#5 ~@3", B: "~@2 g#5 ~@5", C: "~@4 c#5 ~@3", D: "~@3 e5@2 ~@5 [b4,e5]@2 ~@4",
  E: "~@2 [b4,e5]@2 ~@6 [b4,e5]@5 ~", // E5
})).s("gm_piano").gain(0.15).pan(0.3)

// drums · rim
const rim = s("rim").struct("<~@8 A@16 B@6 ~@10 A@16 B@6 C ~@25 A@16 B@6 ~@10 A@5 D ~@3>".pickRestart({
  A: "~ x ~ x", B: "x!2", C: "~@3 x", D: "~@5 x ~@7 x ~@2",
})).gain(0.36)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A B@20 ~@7 A B C D C D C D C B@16 ~@7 A B C D C D C D C B@32 ~@7 A B C D C E B D C B@5 F G H ~
>`.pickRestart({
  A: "~ x!2 ~", B: "x!2", C: "~ x", D: "~ x ~@2", E: "~ x ~ x", F: "x ~@8 x ~@6", G: "~ x ~@14", H: "~@3 x ~ x ~@2",
})).gain(0.36)

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

// drums · low tom
const low_tom = s("lt").struct("<~@72 A@7 B A@6 C D ~@31 E ~@3 F ~@5>".pickRestart({
  A: "x!2", B: "x ~@2 x!2 ~ x ~", C: "x ~@3 x ~@2 x", D: "x!4", E: "~@3 x ~@4", F: "~@2 x!5 ~",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A ~@2 B C@19 D@6 C ~ B E C E C E C E C@16 D@6 F ~ B E C E C E C E ~@16 C@16 D@6 C ~ B E C E C G H E C I C I C J K
  ~@2
>`.pickRestart({
  A: "~ x", B: "~ x!3", C: "x!4", D: "~ x ~ x", E: "x ~ x!2", F: "x!3 ~", G: "~ x!2 ~", H: "x ~@2 x!2 ~ x!2", I: "x",
  J: "x ~@12 x ~@2", K: "~ x ~@14",
})).gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 [~ x!3] ~@64 [~ x ~ x]!15 [~ x ~ x ~ x ~@2] ~@31 [~@5 x ~@2] ~@9>").gain(0.31)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~@4 A ~@16 A ~@8 B A ~ A ~ A ~ A ~@15 A ~@8 B A ~ A ~ A C ~@32 A ~@8 B A ~ A ~ D ~@3 E ~@3 F ~@3
>`.pickRestart({
  A: "~ x ~@2", B: "x", C: "~ x", D: "~@2 x!2", E: "~ x!3", F: "~@5 x ~@3 x ~@6",
})).gain(0.36)

// drums · crash
// … 11 more lines

More by The Beatles