Strudelify
Savoy Truffle cover art

The Beatles

Savoy Truffle

The Beatles

KeyE minorTempo120 bpm
0:00/0:00
// Savoy Truffle — The Beatles
// 120 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/8 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: ch 2 "Bass (muted)" named as a bass, played on electric bass finger (its electric guitar muted patch is not one)
// note: duplicate parts dropped: ch 2 "Bass (muted)" electric bass finger (copy of ch 1 "Bass" acoustic bass); ch 7 "clavinet" clavinet (copy of ch 8 "Rhy. Guitar" distortion guitar)
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · acoustic bass · "Bass"
const bass = note(`<
  ~ A B C D E F G 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 AG AH AI AJ AK AL@2 AJ AK AM@2 AN U V W X Y
  Z AA AB AC AD AE AF AG AH AI AJ AK AL@2 AJ AK AM@2 AN U V W X Y Z AA AB AC AD AE AF AG AH AO AF AG AH
>`.pickRestart({
  A: "e2@2 e2@2 e2@3 ~@3 b1@2 d2@2 d#2@2", B: "e2@3 ~ e2 ~ b1@2 d2@2 d#2@2 e2@3 ~", C: "~@5 e2!3",
  D: "~@2 b1@2 b1@2 d2@2 d#2@2 e2@3 ~@3", E: "b1@2 d2@2 d#2@2 e2 ~ e2@6 ~@2", F: "b1 d2 d#2 e2 c#2 f#2!3",
  G: "~@2 c#2@2 c#2@2 e2@2 f2@2 f#2@3 ~@3",
  H: "[c#2@2 e2@2 f2@2 f#2 ~ a2@3 ~ a2@2 g2@4 f#2@4 e2 ~ d2@3 ~ d2@2 c#2@2]/2", I: "c#2 b1!2 a1@2 g1!2 b1",
  J: "b1 d2!2 e2!2 g2!2 e2", K: "e2 d2!2 b1!4 d#2", L: "d#2 f#2!2 a2 b2@2 a2 g#2", M: "g#2 f#2 b1 d2 d#2 e2!3",
  N: "b1 d2 e2!2 d2 e2!3", O: "d2 e2!2 d2!2 c2!2 b1", P: "b1 a1!2 g1!3 b1 d2", Q: "g2 ~@4 e2!3",
  R: "~@4 b1@2 d2@2 d#2@2 e2@3 ~ e2 ~", S: "b1@2 d2@2 d#2@2 e2@3 ~@7", T: "~@4 e2@2 e2@2 e2@3 ~ b1@2 b1@2",
  U: "d2@2 d#2@2 e2@3 ~@3 b1@2 d2@2 d#2@2", V: "e2 ~ e2@6 ~@2 b1@2 d2@2 d#2@2",
  W: "e2@2 c#2@2 f#2@2 f#2@2 f#2@3 ~ c#2@2 c#2@2", X: "e2@2 f2@2 f#2@3 ~@3 c#2@2 e2@2 f2@2",
  Y: "f#2 ~ a2@3 ~ a2@2 g2@4 f#2@4", Z: "e2 ~ d2@3 ~ d2@2 c#2@2 c#2@2 b1@2 b1@2", AA: "a1@2 g1!2 b1!2 d2!2",
  AB: "e2!2 g2!2 e2!2 d2!2", AC: "b1!4 d#2!2 f#2!2", AD: "a2 b2@2 a2 g#2!2 f#2 b1", AE: "d2 d#2 e2!3 b1 d2 e2",
  AF: "e2 d2 e2!3 d2 e2!2", AG: "d2!2 c2!2 b1!2 a1!2", AH: "g1!3 b1 d2 g2 ~@2", AI: "~@2 e2!2 d2!2 c#2!2",
  AJ: "b1@2 b1@2 a1@2 a1@2 c2 c#2 e2@4 e2@2", AK: "f2 f#2 a2@2 a1@5 ~ c#2@3 ~ e2@2",
  AL: "[~@2 f#2@2 g2@5 ~ f#2@9 ~ e2@2 e2@2 d2@2 d2@2 c#2@2 c#2@2]/2",
  AM: "[~@2 f#2@2 g2@5 ~ f#2@9 ~ e2@2 e2@2 e2@3 ~ b1@2 b1@2]/2", AN: "d2@2 d#2@2 e2@2 e2@2 e2@3 ~ b1@2 b1@2",
  AO: "~@2 e2!3 b1 d2 e2",
})).s("gm_acoustic_bass").gain(0.48)

// other · tenor sax · "T. Sax Hi R"
const tenor_sax = note(`<
  ~@4 A B C D E F G H I J K ~ L@2 M ~@3 N O P Q R S T U V W X ~ Y@2 ~@10 Z AA AB@2 AC AD AE@2 AF AG AH ~ Y@2 ~@10 N O P
  Q R S T U V W X ~ Y@2 ~@2 Y@2
>`.pickRestart({
  A: "~@10 e3@3 ~ e4@2", B: "b3@2 d4@2 b3@2 g3@2 e3@5 ~ d4@2", C: "b3@2 g3@2 g#3@2 e3@2 f3@2 f#3@3 ~ e4@2",
  D: "c#4@2 f#4@2 e4@2 a3@2 a#3@2 f#3@3 ~ f#4@2", E: "e4@2 f#3@2 g3@2 g#3@2 a3@5 ~ f#4@2",
  F: "e4@2 c4@2 c#4@2 ~@2 a3@5 ~ g4@2", G: "e4@2 c4@2 c#4@2 a3@2 g#3@2 g3@5 ~", H: "~@2 b3@2 c4@2 c#4@2 d4@5 ~@3",
  I: "~@2 g3@2 a3@2 a#3@2 b3@5 ~ a4@2", J: "f#4 b4 f#4 a4 ~@4", K: "a4@6 b4 ~@9",
  L: "[~@14 [c4,e4]@12 [b3,d4] ~ [b3,d4] ~ [b3,d4] ~]/2", M: "[b3,d4] ~@15", N: "~@4 e3@3 ~ e4@2 b3@2 d4@2 b3@2",
  O: "g3@2 e3@5 ~ d4@2 b3@2 g3@2 g#3@2", P: "e3@2 f3@2 f#3@3 ~ e4@2 c#4@2 f#4@2 e4@2",
  Q: "a3@2 a#3@2 f#3@3 ~ f#4@2 e4@2 f#3@2 g3@2", R: "g#3@2 a3@5 ~ f#4@2 e4@2 c4@2 c#4@2",
  S: "~@2 a3@5 ~ g4@2 e4@2 c4@2 c#4@2", T: "a3@2 g#3@2 g3@5 ~@3 b3@2 c4@2", U: "c#4@2 d4@5 ~@5 g3@2 a3@2",
  V: "a#3@2 b3@5 ~ a4@2 f#4@2 b4@2 f#4@2", W: "a4 ~@4 a4@3", X: "b4 ~@15",
  Y: "[~@8 [c4,e4]@12 [b3,d4] ~ [b3,d4] ~ [b3,d4] ~ [b3,d4] ~@5]/2", Z: "~@4 e4 d4 b3 a3", AA: "g3 e3 ~ d3 ~ b2 a2 g2",
  AB: "[e2 f2 f#2@8 ~@6]/2", AC: "~@4 a4 g4 e4 d4", AD: "c4 a3 ~ g3 ~ e3 d3 c3", AE: "[a2 g#2 g2@8 ~@6]/2",
  AF: "~@4 b4 a4 f#4 e4", AG: "d4 d#4 b3 a3 a#3 b3 f#3 f3", AH: "e3@2 d#3 ~@13",
})).s("gm_tenor_sax").gain(0.19).pan(1)

// other · tenor sax · "T. Sax Lo R"
const tenor_sax_2 = note(`<
  ~@4 A B C D E F G H I J K L M@2 N ~@3 O P Q R S T U V W X Y Z ~ AA ~@10 AB AC AD@2 AE AF AG@2 AH AI AJ Z ~ AA ~@10 O P
  Q R S T U V W X Y Z AK@2 Z@2 AK@2
>`.pickRestart({
  A: "~@10 e2@3 ~ e3@2", B: "b2@2 d3@2 b2@2 g2@2 e2@5 ~ d3@2", C: "b2@2 g2@2 g#2@2 e2@2 f2@2 f#2@3 ~ e3@2",
  D: "c#3@2 f#3@2 e3@2 a2@2 a#2@2 f#2@3 ~ f#3@2", E: "e3@2 f#2@2 g2@2 g#2@2 a2@5 ~ f#3@2",
  F: "e3@2 c3@2 c#3@2 ~@2 a2@5 ~ g3@2", G: "e3@2 c3@2 c#3@2 a2@2 g#2@2 g2@5 ~", H: "~@2 b2@2 c3@2 c#3@2 d3@5 ~@3",
  I: "~@2 g2@2 a2@2 a#2@2 b2@5 ~ a3@2", J: "f#3 b3 f#3 a3 ~@4", K: "a3@6 b3 ~@3 e2 ~ e2 ~@3",
  L: "~@2 e2 ~ e2 ~@5 e2 ~ e2 ~@3", M: "[~@2 e2 ~ e2 ~@5 c2@16 g2 ~ g2 ~ g2 ~]/2", N: "g2 ~@15",
  O: "~@4 e2@3 ~ e3@2 b2@2 d3@2 b2@2", P: "g2@2 e2@5 ~ d3@2 b2@2 g2@2 g#2@2",
  Q: "e2@2 f2@2 f#2@3 ~ e3@2 c#3@2 f#3@2 e3@2", R: "a2@2 a#2@2 f#2@3 ~ f#3@2 e3@2 f#2@2 g2@2",
  S: "g#2@2 a2@5 ~ f#3@2 e3@2 c3@2 c#3@2", T: "~@2 a2@5 ~ g3@2 e3@2 c3@2 c#3@2", U: "a2@2 g#2@2 g2@5 ~@3 b2@2 c3@2",
  V: "c#3@2 d3@5 ~@5 g2@2 a2@2", W: "a#2@2 b2@5 ~ a3@2 f#3@2 b3@2 f#3@2", X: "a3 ~@4 a3@3",
  Y: "b3 ~@3 e2 ~ e2 ~@5 e2 ~ e2 ~", Z: "~@4 e2 ~ e2 ~@5 e2 ~ e2 ~", AA: "~@4 g2 ~ g2 ~ g2 ~ g2 ~@5",
  AB: "~@4 e3 d3 b2 a2", AC: "g2 e2 ~ d2 ~ b2 a2 g2", AD: "[e2 f2 f#2@8 ~@6]/2", AE: "~@4 a3 g3 e3 d3",
  AF: "c3 a2 ~ g2 ~ e3 d3 c3", AG: "[a2 g#2 g2@8 ~@6]/2", AH: "~@4 b3 a3 f#3 e3", AI: "d3 d#3 b2 a2 a#2 b2 f#2 f2",
  AJ: "e2@2 d#2 ~ e2 ~ e2 ~@5 e2 ~ e2 ~", AK: "[~@4 c2@16 g2 ~ g2 ~ g2 ~ g2 ~@5]/2",
})).s("gm_tenor_sax").gain(0.27).pan(1)

// other · tenor sax · "T. Sax Lo L"
const tenor_sax_3 = note(`<
  ~@4 A B C D E F G H I J K L M@2 N ~@3 O P Q R S T U V W X Y Z AA@2 ~@10 AB AC AD@2 AE AF AG@2 AH AI AJ Z AA@2 ~@10 O P
  Q R S T U V W X Y Z AA@2 Z@2 AA@2
>`.pickRestart({
  A: "~@10 e2@3 ~ e3@2", B: "b2@2 d3@2 b2@2 g2@2 e2@5 ~ d3@2", C: "b2@2 g2@2 g#2@2 e2@2 f2@2 f#2@3 ~ e3@2",
  D: "c#3@2 f#3@2 e3@2 a2@2 a#2@2 f#2@3 ~ f#3@2", E: "e3@2 f#2@2 g2@2 g#2@2 a2@5 ~ f#3@2",
  F: "e3@2 c3@2 c#3@2 ~@2 a2@5 ~ g3@2", G: "e3@2 c3@2 c#3@2 a2@2 g#2@2 g2@5 ~", H: "~@2 b2@2 c3@2 c#3@2 d3@5 ~@3",
  I: "~@2 g2@2 a2@2 a#2@2 b2@5 ~ a3@2", J: "f#3 b3 f#3 a3 ~@4", K: "a3@6 b3 ~@3 e2 ~ e2 ~@3",
  L: "~@2 e2 ~ e2 ~@5 e2 ~ e2 ~@3", M: "[~@2 e2 ~ e2 ~@5 c2@16 g2 ~ g2 ~ g2 ~]/2", N: "g2 ~@15",
  O: "~@4 e2@3 ~ e3@2 b2@2 d3@2 b2@2", P: "g2@2 e2@5 ~ d3@2 b2@2 g2@2 g#2@2",
  Q: "e2@2 f2@2 f#2@3 ~ e3@2 c#3@2 f#3@2 e3@2", R: "a2@2 a#2@2 f#2@3 ~ f#3@2 e3@2 f#2@2 g2@2",
  S: "g#2@2 a2@5 ~ f#3@2 e3@2 c3@2 c#3@2", T: "~@2 a2@5 ~ g3@2 e3@2 c3@2 c#3@2", U: "a2@2 g#2@2 g2@5 ~@3 b2@2 c3@2",
  V: "c#3@2 d3@5 ~@5 g2@2 a2@2", W: "a#2@2 b2@5 ~ a3@2 f#3@2 b3@2 f#3@2", X: "a3 ~@4 a3@3",
  Y: "b3 ~@3 e2 ~ e2 ~@5 e2 ~ e2 ~", Z: "~@4 e2 ~ e2 ~@5 e2 ~ e2 ~", AA: "[~@4 c2@16 g2 ~ g2 ~ g2 ~ g2 ~@5]/2",
  AB: "~@4 e3 d3 b2 a2", AC: "g2 e2 ~ d2 ~ b2 a2 g2", AD: "[e2 f2 f#2@8 ~@6]/2", AE: "~@4 a3 g3 e3 d3",
  AF: "c3 a2 ~ g2 ~ e3 d3 c3", AG: "[a2 g#2 g2@8 ~@6]/2", AH: "~@4 b3 a3 f#3 e3", AI: "d3 d#3 b2 a2 a#2 b2 f#2 f2",
  AJ: "e2@2 d#2 ~ e2 ~ e2 ~@5 e2 ~ e2 ~",
})).s("gm_tenor_sax").gain(0.27).pan(0)

// chords · distortion guitar · "Rhy. Guitar"
const distortion_guitar = note(`<
  ~@5 A B C D E F G H I J K L M N ~@3 O P Q@2 R S T@2 U V W X Y Z AA AB AC AD AA AB AC AD O AE@2 P Q@2 R S T@2 U@2 W X Y
  Z AA AB AC AD AA AB AC AD O AE@2 P Q@2 R S T@2 U@2 W X Y Z W X Y Z
>`.pickRestart({
  A: "[e2,b2,g#3]@3 ~ [e2,b2,g#3]@3 ~ [e2,b2,g#3]@6 ~@2", B: "[e2,b2,g#3]@3 ~ [e2,b2,g#3]@3 ~ [f#2,c#3,a#3]@6 ~@2",
  C: "[f#2,c#3,a#3]@3 ~ [f#2,c#3,a#3]@3 ~ [f#2,c#3,a#3]@6 ~@2", // F#
  D: "[f#2,c#3,a#3]@3 ~ [f#2,c#3,a#3]@3 ~@7 [a2,e3,c#4]@2", E: "~@2 [a2,e3,c#4]@2 [a2,e3,c#4] ~@3 [a2,e3,c#4]@6 ~@2",
  F: "[a2,e3,c#4]@3 ~ [a2,e3,c#4]@3 ~ [g2,d3,b3]@6 ~@2", G: "[g2,d3,b3]@3 ~ [g2,d3,b3]@3 ~ [g2,d3,b3]@6 ~@2",
  H: "[g2,d3,b3]@3 ~ [g2,d3,b3]@3 ~ [b2,d#3,a3,b3]@6 ~@2", // G B7
  I: "[b2,d#3,a3,b3]@3 ~ [b2,d#3,a3,b3]@3 ~ [b2,d#3,a3,b3]@6 ~@2", // B7
  J: "~@2 [b2,d#3,a3,b3] ~ [b2,d#3,a3,b3]@3 ~@7 [e3,b3,e4,g4]@2", K: "~@3 [e3,c4,e4,g4] ~@3 [e3,c#4,e4,g4]",
  L: "~@3 [e3,c4,e4,g4] ~@3 [c3,g3,c4,e4]", M: "~@3 [c3,g3,c4,e4]@2 [g2,d3,b3]!3", N: "[g2,d3,b3] ~@15",
  O: "~@10 [e2,b2,g#3]@3 ~ [e2,b2,g#3]@2", P: "~@2 [e2,b2,g#3]@6 ~@2 [e2,b2,g#3]@3 ~ [e2,b2,g#3]@2",
  Q: "~@2 [f#2,c#3,a#3]@6 ~@2 [f#2,c#3,a#3]@3 ~ [f#2,c#3,a#3]@2", // F#
  R: "~@8 [a2,e3,c#4]@2 ~@2 [a2,e3,c#4]@2 [a2,e3,c#4] ~", S: "~@2 [a2,e3,c#4]@6 ~@2 [a2,e3,c#4]@3 ~ [a2,e3,c#4]@2",
  T: "~@2 [g2,d3,b3]@6 ~@2 [g2,d3,b3]@3 ~ [g2,d3,b3]@2", // G
  U: "~@2 [b2,d#3,a3,b3]@6 ~@2 [b2,d#3,a3,b3]@3 ~ [b2,d#3,a3,b3]@2", // B7
  V: "~@2 [b2,d#3,a3,b3]@6 ~@4 [b2,d#3,a3,b3] ~ [b2,d#3,a3,b3]@2", W: "~@4 [e3,b3,e4,g4] ~@3",
  X: "[e3,c4,e4,g4] ~@3 [e3,c#4,e4,g4] ~@3", Y: "[e3,c4,e4,g4] ~@3 [c3,g3,c4,e4] ~@3",
  Z: "[c3,g3,c4,e4]@4 [g2,d3,b3]@2 [g2,d3,b3]@2 [g2,d3,b3]@2 [g2,d3,b3] ~@5", AA: "~@4 [b3,e4,g4] ~@3",
  AB: "[b3,e4,g4] ~@3 [g3,c#4,e4] ~@3", AC: "[a2,e3,g3,c#4]@2 [a2,e3,g3,d4]@3 [a2,e3,g3,c#4]@3",
  AD: "~@2 [g2,d3,f3,b3]@3 [b2,f#3,a3,d#4]@3", AE: "~@2 [e2,b2,g#3]@3 ~ [e2,b2,g#3]@3 ~ [e2,b2,g#3]@3 ~ [e2,b2,g#3]@2",
})).s("gm_distortion_guitar").gain(0.3).pan(0.3)

// chords · drawbar organ · "Organ"
const drawbar_organ = note("<~@36 A@3 B A@3 B C@4 D@2 E@7 ~@3 A@3 B A@3 B F@6 G@7 ~@7>".pickRestart({
  A: "[~@2 [e5,g5,b5]@8 [e5,a5,c#6]@8 d6@3 c#6@3, ~@3 [e5,a5]]/3", B: "~@2 [d5,g5]@3 [d#5,f#5]@3, ~ b5@3",
  C: "[~ [e4,e5]@15]/4", D: "[~ [f#4,f#5]@7]/2", E: "[~ [a4,c#5,a5]@8 [g4,b4,g5]@8 [b4,d#5,a5]@8 ~@3]/7",
  F: "[~@4 [e4,e5]@63 ~ [f#4,f#5]@28]/6", G: "[~ [a4,c#5,a5]@17 [g4,b4,g5]@16 [b4,d#5,a5]@16 ~@6]/7",
})).s("gm_drawbar_organ").gain(0.15)

// other · overdriven guitar · "Dist. Guitar"
const overdriven_guitar = note(`<
  ~@4 A B C D E F G H I J K L M ~@5 N O P Q R S T U V W X Y Z ~ AA AB AC AD AA AB AC AD ~@11 AE AF@2 ~@2 AA AB AC AD AA
  AB AC AD ~@2 N O P Q R S T U V W AG AF ~@2 AH AI AJ AK
>`.pickRestart({
  A: "~@10 e2@3 ~ e3@2", B: "b2@2 d3@2 b2@2 g2@2 e2@5 ~ d3@2", C: "b2@2 g2@2 g#2@2 e2@2 f2@2 f#2@3 ~ e3@2",
  D: "c#3@2 f#3@2 e3@2 a2@2 a#2@2 f#2@3 ~ f#3@2", E: "e3@2 f#2@2 g2@2 g#2@2 a2@5 ~ f#3@2",
  F: "e3@2 c3@2 c#3@2 ~@2 a2@5 ~ g3@2", G: "e3@2 c3@2 c#3@2 a2@2 g#2@2 g2@5 ~", H: "~@2 b2@2 c3@2 c#3@2 d3@5 ~@3",
  I: "~@2 g2@2 a2@2 a#2@2 b2@5 ~ a3@2", J: "f#3 b3 f#3 a3 ~@4", K: "a3@6 b3 ~@3 e2 ~ e2 ~@3",
  L: "~@2 e2 ~ e2 ~@5 e2 ~ e2 ~@3", M: "~@2 e2 ~ e2 ~@11", N: "~@4 e2@3 ~ e3@2 b2@2 d3@2 b2@2",
  O: "g2@2 e2@5 ~ d3@2 b2@2 g2@2 g#2@2", P: "e2@2 f2@2 f#2@3 ~ e3@2 c#3@2 f#3@2 e3@2",
  Q: "a2@2 a#2@2 f#2@3 ~ f#3@2 e3@2 f#2@2 g2@2", R: "g#2@2 a2@5 ~ f#3@2 e3@2 c3@2 c#3@2",
  S: "~@2 a2@5 ~ g3@2 e3@2 c3@2 c#3@2", T: "a2@2 g#2@2 g2@5 ~@3 b2@2 c3@2", U: "c#3@2 d3@5 ~@5 g2@2 a2@2",
  V: "a#2@2 b2@5 ~ a3@2 f#3@2 b3@2 f#3@2", W: "a3 ~@4 a3@3", X: "b3 ~@3 e5@2 ~@6 e5@2 ~@2", Y: "~@2 e5 ~@3 e5 ~",
  Z: "~@2 e5 ~@5", AA: "~@4 [b3,e4,g4] ~@3", AB: "[b3,e4,g4] ~@3 [g3,c#4,e4] ~@3",
  AC: "[a2,e3,g3,c#4]@2 [a2,e3,g3,d4]@3 [a2,e3,g3,c#4]@3", AD: "~@2 [g2,d3,f3,b3]@3 [b2,f#3,a3,d#4]@3",
  AE: "~@10 e5@5 ~", AF: "~@4 e2 ~ e2 ~@5 e2 ~ e2 ~", AG: "b3 ~@3 e2 ~ e2 ~@5 e2 ~ e2 ~",
  AH: "~@4 e2 ~ e2 ~ [e3,b3,e4]@2 ~@2 e2 ~ e2 ~", AI: "[e3,c4,e4]@2 ~@2 e2 ~ e2 ~ [e3,c#4,e4]@2 ~@2 e2 ~ e2 ~",
  AJ: "[e3,c4,e4]@2 ~@6 [c3,g3,c4]@7 ~", AK: "[c3,g3,c4]@3 ~ [g2,d3,g3]@2 [g2,d3,g3]@2 [g2,d3,g3]@2 [g2,d3,g3] ~@5",
})).s("gm_overdriven_guitar").gain(0.22)

// other · distortion guitar · "Lead Guitar"
const distortion_guitar_2 = note("<~@2 A@2 ~@16 B@2 ~@10 C@2 D ~@9 E@2 F@2 G H@2 ~ I J K L ~@32>".pickRestart({
  A: "[~@14 f#4@5 ~ d4@4 b3 ~ e4@4 ~@2]/2", B: "[~@8 f#4@5 ~ d4@4 b3 ~ e4@4 ~@8]/2", C: "~@2 d5 ~@3 d5 ~",
  D: "~@2 d5 ~@5", E: "[~@4 f#4@5 ~ f#4@3 ~ d4@4 b3@2 e4@5 ~@3 g#4@2 a4@2]/2", F: "[a#4@2 b4@19 ~@11]/2",
  G: "~@4 c#4@5 ~ c#4@5 ~", H: "[c#4@4 a3@2 f#3@5 ~@8 a4 [a4,c#5]@8 ~@4, ~@7 a#4 b4 c5 ~@6, ~@15 f#4@2 g#4@2 ~@13]/2",
  I: "~@10 g4@2 b4 ~ c5 ~", J: "c#5 ~ d5@4 g4@3 ~@3 [g4,b4] ~ [a4,c#5] ~", K: "[a#4,d5] ~ [b4,d#5]@7 ~@7",
  L: "~@10 e5@5 ~",
})).s("gm_distortion_guitar").gain(0.5).pan(0.8)

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

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

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@14 A B C ~@15 D@2 ~@22 D@2 ~@22 D@2 ~@2 D@2 ~@2>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2", D: "~@3 x ~@3 x",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@40 [~ x ~@14] ~@23 [~ x ~@14] ~@23>").gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@37 A B@2 C ~ D C ~@17 A B@2 C ~ D C ~@20>".pickRestart({
  A: "~@15 x", B: "x ~@14 x", C: "x", D: "~@14 x!2",
})).gain(0.64)
// … 23 more lines

More by The Beatles