Strudelify
While My Guitar Gently Weeps cover art

The Beatles

While My Guitar Gently Weeps

The Beatles

KeyA majorTempo110 bpm
0:00/0:00
// While My Guitar Gently Weeps — The Beatles
// 110 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 63 bars on a 16-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 · "FINGERDBAS"
const bass = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB U AC W AD AE Z AF AG AH AI AJ AK AL AM AN@2 AO AP AQ AR AL R
  AS AT AU AV W AW AL AX AY AZ BA BB BC
>`.pickRestart({
  A: "a2", B: "g2", C: "f#2", D: "e2", E: "a1@5 ~ a1@7 ~ a1@2", F: "g1@2 ~ g1@3 ~ g2", G: "f#2@2 ~ f#2@3 ~ f#2",
  H: "f2@5 ~ f2@5 ~ e2@4", I: "a1@2 ~ a1@5", J: "g2@2 ~ g2@3 ~ g2", K: "d2@2 ~ d2@3 ~ d2", L: "e2@2 ~ e2@3 ~ e2",
  M: "a1@2 ~ a1@3 ~ a2", N: "g2@2 ~ g2@3 ~ g1", O: "f#1@2 ~ f#1@3 ~ f#2", P: "f2@2 ~ f2@3 e2@2", Q: "a1@2 ~ a1@4 a2",
  R: "g1@2 ~ g1@5", S: "~@4 c2@3 ~ d2@4 e2@3 ~", T: "e2@6 f#2@5 ~ g#2@3 ~", U: "a2@3 a1@3 a2 a1",
  V: "g#2@5 ~ g#1@6 g#2@4", W: "f#2@3 f#1@3 f#2 f#1", X: "e2@3 e1@3 e2@2", Y: "b1@4 ~@2 b1 ~ b1@7 ~",
  Z: "b1 c#2 d2 d#2", AA: "e2@8 f#2@7 ~", AB: "g#2 e2 f#2 g#2", AC: "g#2@3 g#1@3 g#2@2", AD: "e2@3 e1@3 e2 e1",
  AE: "b1@4 ~@2 b1 ~ b1@6 ~@2", AF: "e2 ~ e2@3 ~ e1@2 f#1 ~ f#1@3 ~ f#1@2", AG: "g#1 ~@7", AH: "a1@5 ~ a1@9 ~",
  AI: "a1@4 ~@2 a1@6 ~@2 a1 ~", AJ: "a1@4 ~@2 a1@7 ~ a1 ~", AK: "a1@4 ~@2 a1@5 ~ a2@2 e2@2", AL: "a1@2 ~ a1@3 ~ a1",
  AM: "g1@3 g2@3 g1@2", AN: "[d2@4 ~@2 d2@7 ~ e2@8 e2 ~ e2@2 b1 ~ e1@3 ~]/2", AO: "a1@4 ~@2 a1@5 ~ a2@2 a1 ~",
  AP: "g1@4 ~@2 g1@6 g2@2 g1 ~", AQ: "f#1@4 ~@2 f#1 ~ f#1@4 f#2@2 f#1@2", AR: "f1@4 ~@2 f1 ~ f1@4 e2@4",
  AS: "~@4 c2@4 d2@4 e2@3 ~", AT: "e2@6 f#2@6 g#2@3 ~", AU: "a2@6 a1@5 ~ a2@2 a1@2", AV: "g2@3 g1@3 g2 g1",
  AW: "f2@3 f1@3 f2 f1", AX: "g1@2 ~ g1@3 ~ g1", AY: "d2", AZ: "e2@11 ~ e2@4", BA: "a1@15 ~", BB: "g1", BC: "a1",
})).s("gm_electric_bass_finger").gain(0.18)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D E F G H I J K L E F G M@2 J N O P Q R S T U V W X Q R S T U Y Z AA F G H I J K L AB F G H I AC N O AD@2 AE AF
  AG AH AI AJ AK J AL
>`.pickRestart({
  A: "[a3,c4,e4]", B: "[g3,b3,d4]", C: "[f#3,a3,d4]", D: "[g#3,b3,e4]", E: "[a3,c4]!4", F: "[g3,a3,c4]!4",
  G: "[f#3,a3,c4]!4", H: "[f3,a3,c4]!3 e3", I: "~ c4@3, a2, ~ e3@7", J: "~ b3@3, g2, ~ d3@7", K: "~ f#3@3, d2, ~ a2@7",
  L: "~@3 d4, e3, ~ g#3@3, ~ b3", M: "[[f3,a3,c4]!3 ~@2 c4@3, ~@6 e3@3 e3@7, ~ a2]/2", N: "~ c3 d3 e3",
  O: "e3@3 f#3@3 g#3@2", P: "~@7 c#4, a3!2, ~ c#4@2 c#4@2 c#4@2 ~, ~ e4@2 e4",
  Q: "~@7 c#4, g#3!2, ~ c#4@2 c#4@2 c#4@2 ~, ~ e4@2 e4", R: "~@7 a3, f#3!2, ~ a3@2 a3@2 a3@2 ~, ~ c#4@2 c#4",
  S: "~@3 c#4, e3!2, ~ g#3@2 g#3@2 g#3@3, ~ c#4@2 ~", T: "b2@3 b2 b2@4", U: "b2 c#3 d3 d#3", V: "e3 f#3",
  W: "g#3 e3 f#3 g#3", X: "~@3 c#4 ~@2 c#4!2, a3!2, ~ c#4@2 ~@5, ~@2 e4@2 ~ e4@3",
  Y: "e3 ~ e3@3 ~ e2@2 f#2 ~ f#2@2 ~@2 f#2 ~", Z: "g#2 ~@7 g#3@4 d4@3 ~, ~@3 e3@3 ~@2",
  AA: "[a3,c4]@3 ~ [a3,c4] ~@3 [a3,c4]@4 [a3,c4]@4", AB: "[a3,c4]@3 ~ [a3,c4]@4 [a3,c4]@4 [a3,c4]@4",
  AC: "~@4 b3@11 ~, g2, ~ d3@7", AD: "[~ e3@2 ~@2 e3@2 e3, a2 g2, ~@3 e3@2 ~@3]/2", AE: "~ e3@2 e3, f#2",
  AF: "~ e3@2 e3, f2", AG: "~ e3@7, a2", AH: "~ e3@7, g2", AI: "[d2,a2]", AJ: "[e2,b2]", AK: "[a2,e3]",
  AL: "[a2,e3,a3]", // A5
})).s("gm_piano").gain(0.36)

// chords · piano · "A.PIANO 1"
const piano_2 = note(`<
  A B C D E F G H I J K L M N M O P Q R S T U T V W X Y@2 Z U Z AA AB AC AD AE AF AG AF H AH@2 AI L M N M AJ P J R S
  AK@2 AL@2 AM@2 AN AO AP@2 AQ
>`.pickRestart({
  A: "~@3 a5, e6@15 ~, ~@3 c6@5", B: "~@3 g5, d6, ~@3 b5@5", C: "~@3 f#5, d6, ~@3 a5@5",
  D: "~@3 g#4@3 e4@2, e5@3 ~, ~ b4@5 ~@2", E: "~@3 c5, a4, ~@3 b4@5", F: "~@3 c5, a4, ~ b4",
  G: "a4@3 ~@3 c5@2, ~@3 b4@5", H: "d5 c5@5 ~@2", I: "~@3 [a4,a5], ~@4 [e5,e6]@11 ~, ~@8 [c5,c6]@7 ~",
  J: "~@3 g4, [b4,b5], ~@3 a4@5", K: "~@3 c5, a4, ~@3 d4@5", L: "~@3 e4, b4", M: "[a4,c5]@3 [b4,d5]@3 [c5,e5]@2",
  N: "[a4,c5]@2 [b4,d5] [c5,e5]", O: "[d5,f5] [c5,e5]@3 ~@4", P: "~@3 [a4,a5], ~ [e5,e6]@3, ~ [c5,c6]",
  Q: "[b4,b5]@3 ~@3 g4@2, ~@3 a4@5", R: "~ e4 f4 g4, c5", S: "g#4@3 a4@3 b4@2, e5", T: "~@2 c#5@2 b4 c#5@3",
  U: "g#5@3 f#5@3 e5@2", V: "e5@2 c#5@13 ~", W: "~ b4 a4 b4, ~ f#4@3, ~@4 d4@9 ~@3", X: "~@3 c#5, [f#4,b4,e5]",
  Y: "[~@6 g#4@2 ~@4 d4@2 e4@6 g#4@4 a4@4 b4@3 ~, b4 ~@3, ~@2 g#4@4 ~@2 a4@7 ~@17, ~@2 e4@2 ~ e4@2 ~@9]/2",
  Z: "~@3 c#5 b4@2 c#5@2", AA: "e5@2 c#5@5 ~", AB: "~ b4 a4 b4, ~ [d4,f#4]@3", AC: "[b4,e5]@3 c#5, f#4",
  AD: "[e4,g#4]@7 ~ [d4,a4]@8, b4", AE: "[b3,e4] ~@5 e4@2", AF: "a4@3 b4@3 c5@2", AG: "a4@2 b4 c5",
  AH: "[~@7 g4, ~@2 [e5,e6]@6 b5@3 a4@5, ~ [c5,c6]@3, ~@3 a5@5, ~@12 a4@3 b4@17]/2", AI: "a4@3 ~@3 c5@2, ~@3 d4@5",
  AJ: "[d5,f5] [c5,e5]@5 ~@2", AK: "[~ [a3,c4]@2 [a3,c4], [c5,a5]@25 ~@7]/2", AL: "~ [a3,c4]", AM: "~ [a3,c4]!3",
  AN: "~@3 e4, f#3, e4@3 ~, ~ d4", AO: "~ d4, [g#3,b3]",
  AP: "[~@7 g4, [a3,c4]@3 a4 [b4,b5]@2 a4@2, ~ [e5,e6]@7, ~ [c5,c6]@3, ~@3 a5@5]/2", AQ: "[c#4,e4,a4]",
})).s("gm_piano").gain(0.54)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B C D E@2 F@2 G H@2 I J@2 K L M N O P Q R S T@3 U V W@2 X Y Z@2 U AA AB@4 AC AD AE AF AG AH AI AJ AK AL AM AN AO@2
  AP@2 AQ AR@2 AS AT AU AV
>`.pickRestart({
  A: "[a2,e3,a3,c4]@15 ~", B: "[g2,d3,g3,b3]", C: "[f#2,f#3,a3]@15 ~", D: "[e2,e3,g#3,b3]@15 ~",
  E: "[~@7 a2 ~@7 g2, a2@13 ~@3 g2@13 ~@3, ~ e3@4 ~ e3@2 ~ e3@4 ~ e3@2, ~@4 a3@5 ~ a3@7 ~@3 a3@4 ~@2 a3@6, ~@3 c4@6 ~@2 c4@5]/2",
  F: "[~@7 f#2 ~@5 a3 e3@2, f#2@13 ~@3 f2@16, ~ e3@3 ~@2 e3@2 ~ e3@4 ~@3, ~@4 a3@5 ~ a3@6 ~@4 a3@4 ~@8, ~@3 c4@6 ~@2 c4@5]/2",
  G: "~@5 a2 e3 a2, a2@9 ~@7, ~@2 e3@7 ~@7, ~@4 a3@7 ~@5, ~@6 c4@7 ~@3",
  H: "[[g2,a3]@2 ~@14 d2@9 ~@3 d3@2 f#3 ~, g3@3 d3@3 g2@2 f#3@6 ~@2, d3@2 g2@3 g3@2 d3@6 d2@3, ~@2 b3@13 ~ a3@14 ~@2]/2", // Gsus2
  I: "[e2,e3,g#3,b3]", // E
  J: "[~@7 a2 ~@7 g2, a2@13 ~@3 g2@13 ~@3, ~@2 e3@8 ~@2 e3@5 ~ e3@6 ~@4 e3@4, ~@4 a3@5 ~ a3@7 ~@3 a3@4 ~@2 a3@6, ~@3 c4@6 ~@2 c4@5]/2",
  K: "~@7 f#2, f#2@13 ~@3, ~ e3@4 ~ e3@2, ~@4 a3@5 ~ a3@6, ~@3 c4@5",
  L: "~@5 a3 e3@2, f2, ~ e3@3 ~@4, ~ a3 ~@2, ~@6 c4@7 ~@3",
  M: "~@5 a2 e3 a2, a2 ~, ~@2 e3@7 ~@7, ~ a3@2 ~, ~@3 c4@3 ~@2",
  N: "a3 ~@6 d3, g3@9 ~ g3@6, d3@7 ~ d3@4 ~@4, g2@5 ~ g2@5 ~ g2@4, ~ b3@7", O: "~@4 [c3,e4]@4 [d3,f4]@4 [e3,g4]@3 ~",
  P: "[e3,g#4]@3 [f#3,a4]@3 [g#3,b4]@2, e4", Q: "[a3,c#4,e4,a4]@13 ~@3", R: "[g#3,c#4,e4,g#4]@7 ~",
  S: "[f#3,c#4,f#4], a3@7 ~", T: "[[g#3,c#4]@7 ~ [f#3,b3,d4]@14 ~@2, e4@5 ~@11, e3@12 ~@3 b2@29 ~@4]/3",
  U: "[e2,e3] ~ [e2,e3]@3 ~ [e2,e3]@2 [f#2,f#3] ~ [f#2,f#3]@3 ~ [f#2,f#3]@2", // E F#
  V: "[g#2,g#3] ~@3 [e2,e3]@4 [f#2,f#3]@4 [g#2,g#3]@3 ~", // G# E F# G#
  W: "[~ c#4 e4 ~@8 g#4@4 ~, a3@2 ~ a3@5 g#3@8, ~@4 a4@5 c#4@6 ~, ~@10 e4@5 ~]/2",
  X: "~ f#4, f#3 c#4@3, ~@2 a3@13 ~, ~@3 f#3@5", Y: "~@3 e4@5, e3@15 ~, ~ g#3@7, ~@4 a3@11 ~",
  Z: "[~@22 f#3@2 ~@2 f#3@2 a3@3 ~, b2@13 ~ b2@14 ~@4, ~@2 f#3@12 ~@2 f#3@4 ~@4 e4@7 ~, ~@4 b3@13 ~ a3@9 ~@5]/2",
  AA: "[g#2,g#3] ~@15", AB: "[a3,a4] ~@3 [a3,a4] ~@3 [a3,a4] ~@3 [a3,a4]@2 [e3,e4]@2", AC: "[a3,a4]",
  AD: "[g3,d4,g4]@13 ~@3", AE: "[f#3,f#4], d4@13 ~@3", AF: "[b3,e4]@7 ~, e3@3 ~",
  AG: "~@4 a3@2 ~@2 b3@2 a3@2 e3@2 ~ e3, a2@13 ~@3, ~ e3@4 ~@2 a3, ~@6 c4@9 ~",
  AH: "~@4 b3 a3 ~ a3, g2, ~@2 e3@9 ~ e3@4, ~ a3 ~@2, ~@3 c4@5",
  AI: "~@4 b3 a3 e3 a3, f#2@7 ~, ~@2 e3@9 ~@5, ~ a3 ~@2, ~@3 c4@4 ~",
  AJ: "~@4 b3 a3 ~ a3, f2, ~@2 e3@9 ~ e3@4, ~ a3 ~@2, ~@3 c4@2 ~@3",
  AK: "~@2 a3 ~ b3 a3 ~ a3, a2, ~ e3@4 ~ e3@2, ~@3 c4@2 ~@3", AL: "~@7 d3, g2 g3@3, ~ d3@5 g2@2, ~@3 g2@2 b3@3, ~ a3",
  AM: "~@2 [c2,c3]@2 [d2,d3]@2 [e2,e3] ~", AN: "[e2,e3]@6 [f#2,f#3]@6 [g#2,g#3]@3 ~",
  AO: "[~@4 c4 ~@7 c4 ~@2 e3, a2@2 a3@7 e3@5 ~@2, ~@2 e3@14 g2@5 ~ g2@9 ~, ~@6 a2@4 b3@8 ~@2 a3@7 ~ a3@4, ~@6 a2 e4@2 ~@4 b3@3]/2",
  AP: "[~@4 c4 ~@2 e4 ~@4 c4 ~@2 e3, f#2@4 a3@14 ~@2 a3@7 ~ a3@4, ~ e3@7 ~ e3@5 ~@2, ~@3 f#2@2 b3@4 ~@4 b3@3, ~@12 f#2@4 f2@5 ~ f2@10]/2",
  AQ: "~@4 c4 ~@2 e4, a2 a3@3, ~ e3@7, ~@3 a2@2 b3@3, ~@3 a2",
  AR: "[~@8 c4@2 ~@6 [d2,d3]@13 ~@3, g2@2 a3@3 b3@3 ~@8, ~@2 e3@12 ~@2 f#3@15 ~, ~@6 g2@6 a3@19 ~]/2", // D
  AS: "[e2,e3,b3]@13 ~@3", AT: "[e3,a3,c4]@13 ~@3, a2", AU: "[d3,g3,b3]@7 ~, g2", AV: "[a2,c#3,e3,a3]",
})).s("gm_acoustic_guitar_steel").gain(0.28).pan(0.7)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A B C D E F@2 G H I@2 J E K L@2 M@2 N O P Q R S T@2 U V W X Y Z T@2 U AA AB@2 AC G AD@6 AE@4 AF AG AH@2 AI@4 AJ AK AL
  AM AN
>`.pickRestart({
  A: "a2", B: "g2", C: "f#2", D: "e2@7 ~", E: "~ a3@3, a2, ~ e3@7",
  F: "[~@5 a3@3, g2 f#2, ~@2 e3@15 ~ e3@14, ~@2 a3@7 ~@7]/2", G: "~ a3@3, f2, ~ e3@7", H: "~ a3@3, a2@15 ~, ~ e3@7",
  I: "[~@5 a3@3, g2 f#2, ~ d3@7 ~ d3@7, ~@2 g3@7 ~@7]/2", J: "~ b3@3, e2, ~ e3@7", K: "~ a3@3, g2, ~ e3@7",
  L: "[~@5 a3@3, f#2 f2, ~@2 e3@15 ~ e3@14, ~@2 a3@7 ~@7]/2", M: "[~@5 g3@3, a2 g2, ~ e3@7 ~ d3@7, ~@2 a3@7 ~@7]/2",
  N: "~@2 [c2,c3]@2 [d2,d3]@2 [e2,e3] ~", O: "[e2,e3]@3 [f#2,f#3]@3 [g#2,g#3] ~", P: "[a2,e3,a3,c#4]@7 ~",
  Q: "[g#2,e3,g#3,c#4]@15 ~", R: "[f#2,f#3,a3,c#4]@15 ~", S: "[e3,g#3,c#4]@3 ~, e2", T: "[[b2,f#3,a3,d4]@7 ~]/2",
  U: "e2 ~ e2@3 ~ e2@2 f#2 ~ f#2@3 ~ f#2@2", V: "g#2 ~@3 e2@3 ~ f#2@3 ~ g#2@4", W: "[a2,e3,a3,c#4]@15 ~",
  X: "[g#2,e3,g#3,c#4]@7 ~", Y: "[f#2,f#3,a3,c#4]@7 ~", Z: "[e3,g#3,c#4]@13 ~@3, e2@15 ~", AA: "g#2 ~@15",
  AB: "[~@5 a3@3, a2 g2, ~ e3@7 ~ e3@7, ~@2 a3@7 ~@7]/2", AC: "~ a3@3, f#2, ~ e3@7",
  AD: "[~@24 a3@2 ~@4 g3 ~@15 d3@2 ~@14 b2@2 ~@14 a2@2 ~@14 g2@2, a2@16 g2@5 ~ g2@10 f#2@9 ~ f#2@6 e2@16 ~@32, ~@2 e3@14 ~@2 d3@25 ~@7 b2@11 ~@3 a2@13 ~@3 g2@13 ~@3, ~@4 a3@14 ~@2 g3@8 a3@4 f#3@16 ~@4 e3@12 ~@2 e3@15 ~ e3@13 ~, ~@13 b3@2 ~@4 a3@7 ~@4 b3@3 ~ a3@7 ~ a3@6]/6",
  AE: "[~@7 f#2 ~@12 b3 ~@10 d3, f#2@13 ~@3 f2@16 a2@5 ~ a2@5 ~ a2@4 g2@4 a3@12, ~@2 e3@15 ~ e3@15 ~ e3@11 ~ d3@14 g2@4, ~@4 a3@14 ~@2 a3@14 ~@2 a3@5 ~ a3@8 g3@14, ~@27 g2 b3@4]/4",
  AF: "~@4 c3@3 ~ d3@3 ~ e3@3 ~", AG: "[e2,e3]@6 [f#2,f#3]@6 [g#2,g#3]@3 ~",
  AH: "[~@8 g2@7 ~, a2@9 ~ a2@6 ~@16, ~ e3@4 ~ e3@10, ~ a3@7, ~@3 b3@13]/2",
  AI: "[~@4 f2@4 ~@4 g2@3 ~, f#2@9 ~ f#2@6 ~@16 a2@9 ~ a2@6 ~@16, ~@2 e3@8 ~@2 e3@21 ~ e3@8 ~@2 e3@16 ~@4, ~@4 a3@29 ~@3 a3@25 ~@3, ~@6 b3@28 ~@4 b3@23 ~@3]/4",
  AJ: "[f#2,d3,a3]@15 ~", AK: "[e2,e3,b3]@15 ~", AL: "[a2,e3,a3]", AM: "[d3,g3]@7 ~, g2@3 ~", AN: "[a2,c#3,e3,a3]",
})).s("gm_electric_guitar_clean").gain(0.2).pan(0.6)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@4 A ~@3 B A C ~ A@3 ~@8 A ~@2 C ~@2 A C A ~@4 A@2 D A ~@12 A@3 ~ A ~@6
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~@3 x ~@4", D: "~@5 x ~ x",
})).gain(0.16)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@2 A ~@8 B ~@31 C ~@11 D ~@7>".pickRestart({
  A: "~@5 x ~@2", B: "~@3 x", C: "~@5 x ~ x", D: "~@9 x ~@6",
})).gain(0.2)

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

// drums · pedal hat
const pedal_hat = s("hh").struct("<A@3 B C@2 D C@4 E A C@5 ~@18 A C@4 D C F G C@3 A C ~@13>".pickRestart({
  A: "~ x!3", B: "~ x!2 ~", C: "x!4", D: "x ~ x ~ x ~ x!2", E: "x ~ x ~ x!2 ~@2", F: "x ~ x ~ x!3 ~",
  G: "~ x!2 ~ x ~ x ~",
})).gain(0.36)

// drums · pedal hat · soft notes
const pedal_hat_soft = s("hh").struct(`<
  ~@4 A@2 B ~ C D C E ~ A F C G F ~@18 H ~ I J@3 K@2 C J@2 B L J ~@13
>`.pickRestart({
  A: "~@7 x", B: "~ x ~@3 x ~@2", C: "~@3 x ~ x ~@2", D: "~@3 x ~@3 x", E: "~ x ~@6", F: "~@5 x ~@2", G: "~ x ~@5 x",
  H: "~@3 x ~@6 x ~@3 x ~", I: "~ x ~ x ~ x ~ x", J: "~ x ~ x ~ x ~@2", K: "~ x ~ x ~@4", L: "~@3 x ~ x ~ x",
})).gain(0.16)

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 [~@3 x ~@4] ~@31 [~@3 x ~@4] ~@11>").gain(0.36)

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

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

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

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@21 A B ~ C D ~@4 E ~@26 D ~@5>".pickRestart({
// … 7 more lines

More by The Beatles