Strudelify

Figure of Eight

McCartney

KeyE majorTempo114 bpm
0:00/0:00
// Figure of Eight — McCartney
// 114 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 6/4 at bar 5, 4/4 at bar 7) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 1 "NYLON GTR" acoustic guitar nylon (copy of ch 3 "STEEL GTR" acoustic guitar steel); ch 9 "STEEL GTR" acoustic guitar steel (copy of ch 3 "STEEL GTR" acoustic guitar steel)
// note: Full arrangement: all 93 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(114/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 · "PICK BASS"
const bass = note(`<
  ~@6 A B C B D E F G E@2 B C B D E H G E@2 G@2 I J G@2 K L G@2 I J M N O P Q P R S G T U V W X Y B Z B AA AB S AC E S G
  AD AE AF G AG AH S G AD AE AI AJ ~@8 AK AL AM AL AN AL AM AL AO@3
>`.pickRestart({
  A: "~@5 f#1!3", B: "e1!8", C: "e1!7 b1", D: "e1!6 g#1!2", E: "b1!8", F: "c#2!7 b1", G: "a1!8", H: "c#2!6 b1!2",
  I: "g#1!8", J: "c#2!4 c#1!4", K: "g#1!4 f#1!4", L: "e1!4 b1!4", M: "f#1!8", N: "b0@3 ~@13", O: "~@2 e1!2 f#1!2 e1!2",
  P: "f#1 e1 g1!3 f#1!3", Q: "f#1@2 e1 ~@3 e1@2 f#1@2 f#1@2 e1@2 e1@2", R: "f#1!2 b1!6", S: "b1!2 a1!6",
  T: "a1 g#1 e1!6", U: "e1 g#1 b1!6", V: "b1!2 f#1!6", W: "f#1!2 b1!4 f#1!2",
  X: "f#1@2 b1!2 b1@2 b1@2 b1@2 b1@2 b0@2 b0@2", Y: "b0!2 e1!6", Z: "e1 b1 e1!6", AA: "g#1!2 b1!6", AB: "b1!2 c#2!6",
  AC: "a1!2 b1!6", AD: "a1!2 g#1!6", AE: "g#1!2 c#2!4 c#1!2", AF: "c#1!2 a1!6", AG: "a1!2 g#1!4 f#1!2",
  AH: "f#1!2 e1!4 b1!2", AI: "c#1!2 f#1!6", AJ: "f#1@2 f#1@2 b0@3 ~@9", AK: "~@4 e1!2 f#1!2",
  AL: "e1!2 f#1 e1 g1!3 f#1", AM: "f#1@2 f#1@2 f#1@2 e1 ~@3 e1@2 f#1@2 f#1@2", AN: "f#1!3 e1!3 f#1!2",
  AO: "[f#1!2 b1@2 e1@14 ~@6]/3",
})).s("gm_electric_bass_pick").gain(0.49)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@3 A B C D E F G H I@2 J@3 K L@2 H M@2 N@3 O@8 P@3 Q@2 R S T@2 U@5 V@5 W@2 X Y@5 Z@8 AA@6 AB AC@2 AD@2 AC@2 AE@2 AC@2
  AD@2 AC@2 AF@4
>`.pickRestart({
  A: "[e2,g#3,b3]@2 [e2,g#3,b3]@2 [f#2,a3,c#4]@2 ~@2 [e2,g#3,b3]@2 [e2,g#3,b3]@2 [f#2,a3,c#4] ~ [e2,g#3] ~", // E F#m E F#m E
  B: "g2@2 ~@2 g2@2 f#2@4 [f#2,e4]@2 [f#2,e4]@2 [e2,g3,g#3,e4] ~, b3@3 [a3,c#4]@4 ~, a#3 ~ g2@2 ~@12, ~@3 e4@6 ~@7", // F#7 E A
  C: "~@2 [e2,g#3,b3]@2 [f#2,a3,c#4]@2 ~@2 [e2,g#3,b3]@2 [e2,g#3,b3]@2 [f#2,a3,c#4] ~ [e2,g#3] ~", // E F#m E F#m E
  D: "g2 ~ g2 f#2@2 f#2 [f#2,e4] [e2,g#3,e4], b3@3 [a3,c#4]@4 ~, a#3 ~ g2@2 ~@12, ~@3 e4@9 ~@4", E: "~@7 g#3",
  F: "~@7 e3, a3@3 g#3@5, ~ b3@7, ~ e4@2 e4", G: "~@8 [g#3,b3,e4] ~@5 g#3@2",
  H: "~@3 g#3@4 [b2,f#3], a3@3 ~@5, ~ b3@6 ~, ~@2 e4@5 ~", // B5
  I: "[~@7 g#3, ~@2 b3@7 ~ b3@4 b3@4 b3@8 b3@6, ~ f#3@2 f#3 g#3 g#3@2 ~, ~@3 e4@8 e4@5]/2",
  J: "[~@8 e4@4 b3@2 [b3,e4]@6 ~@16 e4@3 ~ f#3@4 f#3@2 [f#3,b3,e4]!2, e3@10 ~ f#3@3 f#3@2 f#3@4 ~@4, ~@2 a3@18 ~@4 e4@11 ~@13, ~@2 b3@4 ~@4 b3@3 b3@2 b3@2 b3@3 [b3,e4]@3 ~]/3", // E5 Esus2 E5
  K: "[e3,b3,e4]@9 ~@5 g#3@2", L: "[~@3 g#3@4 ~ e3 ~@6 g#3, a3@3 ~@4 [g#3,b3,e4]@2 ~@7, ~ b3@6 ~@9, ~@2 e4@5 ~@9]/2",
  M: "[~@28 g#3@3 ~, ~ b3@4 b3@2 b3@2 b3@4 b3@3, ~@4 f#3@8 f#3@4 g#3@4 g#3@7 ~@5, ~@3 e4@6 ~@2 e4@5]/2",
  N: "[~@2 e4 ~@8 f#3, e3@5 f#3@2 f#3@2 f#3@2 ~, ~ a3@7 ~@16, ~@4 b3@8 b3@11 ~@3 b3@8 b3@4 b3@4 b3@6, ~@14 e4@9 ~ e4@8 e4@8 e4@8]/3",
  O: "[~@21 b3@4 ~@3 c#4 b3 ~ f#3 ~@13 b3@4 ~@4 b3 b3@4 ~ [b3,e4] [b3,e4]@2 [b3,e4] ~, ~ b3@4 b3@4 b3@4 b3@4 b3@4 ~@4 b3@3 ~@2 b3@3 b3@4 b3@4 b3@4 ~@4 b3@4 ~@11, ~ e3@4 f#3@4 f#3@4 e3@4 e3@4 f#3@4 f#3@4 ~@3, ~@8 e4@6 e4@10 e4@6 e4@9 ~ e4@10 ~@6 e4@16 e4@6 e4@10 e4@14 d#4@10 ~@16]/8", // E5
  P: "[~@10 b3@2 b3@5 ~@9 b3 ~ b3@2 ~@12 b3@2 b3@4, ~@2 b3@8 ~@8 b3@7 ~@5 b3@6 b3@6 ~@6, ~@2 e3@14 ~ f#3@7, ~@3 e4@8 d#4@7 ~ d#4@5]/3",
  Q: "[~@6 e4@4 b3@2 b3@6 ~@10 [b3,e4]@3 ~, ~@2 b3@7 ~@3 e4@8 e4@8 ~@4, ~@4 g#3@11 ~@3 a3@10 ~@4, ~@11 b3@3 ~@2, ~@26 f#3@5 ~]/2", // E5
  R: "[f#3,b3,d#4,f#4] ~@7", S: "~@2 [e2,g#3,b3]!2 [f#2,a3,c#4] ~ [e2,g#3,b3]!2",
  T: "[[f#2,a3,c#4] ~ [e2,g#3] ~ g2@2 ~@2 g2@2 f#2@4 [f#2,e4]@2 [f#2,e4]@2 [e2,g3,g#3,e4] ~@3 [e2,g#3,b3]@2 [f#2,a3,c#4]@2 ~@2 [e2,g#3,b3]@2 [e2,g#3,b3]@2, ~@2 b3@3 [a3,c#4]@4 ~@7, ~@4 a#3 ~ g2@2 ~@24, ~@7 e4@6 ~@19]/2", // F#m E F#7 E F#m E A
  U: "[[f#2,a3,c#4] ~ [e2,g#3] ~ g2@2 ~@2 g2@2 f#2@4 f#2@2 [f#2,e4]@4 ~@30 e4@4 ~@8 b3@6 ~@6 [e3,b3,e4]@2 ~@4, ~@4 b3@6 [a3,c#4]@10 ~@2 f#3@14 ~@2 e3@29 ~@13, ~@4 a#3 ~ g2@2 ~@18 e4@14 ~@2 e4@8 ~@4 e4@4 e4@10 ~@12, ~@7 e4@9 ~@8 b3@6 b3@10 b3@6 b3@10 b3@6 ~@18]/5", // F#m E F#7 E5 A
  V: "[[e3,b3,e4]@2 [e3,b3,e4]@2 ~@4 b3@4 ~@2 b3@10 b3@4 ~@6 f#3@3 ~@13 e3@4 ~@10 b3@2 [b3,e4]@2 ~ [b3,e4]@11, ~@12 e4@12 ~@4 e4@9 ~@7 e4@15 ~ f#4@6 ~@14, ~@30 b3@7 ~@3 b3@6 a3@6 ~@4 b3@8 ~@16, ~@32 a3@5 ~ f#3@6 ~@10 f#3@4 f#3@8 ~@2 [e3,g#3]@12, ~@31 e4@2 ~@7]/5", // E5 E
  W: "[~@2 g#3@2 ~@6 g#3@8 [g#3,b3,e4]!2 [g#3,b3,e4]@12, ~@2 a3@3 ~@11, ~@3 b3@6 ~@7, ~@4 e4@5 ~@7]/2", // E
  X: "~ g#3 ~@3 g#3@3, ~@2 a3@3 ~@3, ~@3 b3@5, ~ e4",
  Y: "[~@2 [b2,f#3]@2 ~@28 g#3@3 ~@9 e4@4 ~@30 b3@2, ~@3 b3@4 b3@2 b3@2 b3@4 b3@3 ~ a3@7 ~@14, ~@8 f#3@8 f#3@4 g#3@4 g#3@7 ~@5 e3@20 f#3@8 f#3@8 f#3@8, ~@10 e4@12 ~@4 e4@10 ~@4 b3@8 b3@11 ~@3 b3@8 b3@4 b3@4 ~@2, ~@50 e4@9 ~ e4@8 e4@8 e4@4]/5", // B5
  Z: "[f#3@2 ~@15 d#4@2 ~@4 b3@4 ~@3 c#4 b3 ~ f#3 ~@13 b3@4 ~@4 b3 b3@4 ~ [b3,e4] [b3,e4]@2, ~@3 b3@4 b3@4 b3@4 b3@4 b3@4 ~@4 b3@3 ~@2 b3@3 b3@4 b3@4 b3@4 ~@4 b3@4 ~@9, ~ e3@2 f#3@2 f#3@2 e3@2 e3@2 f#3@2 f#3@2 ~, ~@6 e4@3 e4@5 d#4@3 ~@5 d#4@5 ~@3 e4@8 e4@3 e4@5 d#4@7 d#4@5 ~@6]/8", // E5
  AA: "[[b3,e4]@2 ~@12 b3@2 b3@5 ~@9 b3 ~ b3@2 ~@12 b3@2 b3@5 ~@5 e4@4 b3@2 b3@6 ~@10 [b3,e4]@3 ~ [f#3,b3,d#4,f#4]@2 ~@10, ~@6 b3@8 ~@8 b3@7 ~@5 b3@6 b3@6 ~@8 b3@7 ~@13 b3@6 ~@16, ~@8 e3@28 ~@2 f#3@15 ~@3 g#3@11 ~@3 a3@10 ~@16, ~@10 e4@16 d#4@14 ~@2 d#4@11 ~@11 e4@8 e4@8 ~@16, ~@78 f#3@5 ~@13]/6", // E5 B
  AB: "~@4 [e2,g#3,b3]!2 [f#2,a3,c#4] ~", // E F#m
  AC: "[[e2,g#3,b3]@2 [e2,g#3,b3]@2 [f#2,a3,c#4] ~ [e2,g#3] ~ g2@2 ~@2 g2@2 f#2@4 [f#2,e4]@2 [f#2,e4]@2 [e2,g3,g#3,e4] ~@3 [e2,g#3,b3]@2 [f#2,a3,c#4]@2 ~@2, ~@4 b3@3 [a3,c#4]@4 ~@5, ~@8 a#3 ~ g2@2 ~@20, ~@11 e4@6 ~@15]/2", // E F#m E F#7 E F#m A
  AD: "[[e2,g#3,b3]@2 [e2,g#3,b3]@2 [f#2,a3,c#4] ~ [e2,g#3] ~ g2@2 ~@2 g2@2 f#2@4 f#2@2 [f#2,e4]@2 [e2,g#3,b3] ~@3 [e2,g#3,b3]@2 [f#2,a3,c#4]@2 ~@2, ~@4 b3@3 [a3,c#4]@4 ~@5, ~@8 a#3 ~ g2@2 ~@20, ~@11 e4@9 ~@12]/2", // E F#m E F#7 E F#m A
  AE: "[[e2,g#3,b3]@2 [e2,g#3,b3]@2 [f#2,a3,c#4] ~ [e2,g#3] ~ g2@2 ~@2 g2@2 f#2@4 f#2@2 [f#2,e4]@4 [e2,g#3,b3]@2 [e2,g#3,b3]@2 [f#2,a3,c#4]@2 ~@2, ~@4 b3@3 [a3,c#4]@5 ~@4, ~@8 a#3 ~ g2@2 ~@20, ~@11 e4@9 ~@12]/2", // E F#m E F#7 E F#m A
  AF: "[[e2,g#3,b3]@2 [e2,g#3,b3]@2 [f#2,a3,c#4] ~ [e2,g#3] ~ g2@2 ~@2 g2@2 f#2@4 f#2@2 [b2,e4]@4 ~@2 b4@27 ~@11, ~@4 b3@3 [a3,c#4]@5 [e3,b3,e4]@14 ~@6, ~@8 a#3 ~ g2@2 ~@52, ~@11 e4@9 ~@5 [f#4,g#4]@27 ~@12]/4", // E F#m E E5 A E5 F#sus2
})).s("gm_acoustic_guitar_steel").gain(0.38)

// other · percussive organ · "ORGAN 2" · A
const percussive_organ = note(`<
  ~@51
  [~@3 e4!5]
  [e4!5 e4@2 ~]
  [~@6 e4@2 e4!2 e4@2 e4!2 e4@2]
  [e4!2 e4@2 e4@2 e4@2 e4@2 e4@2 ~@4]
  ~@2
  [~@3 [a4,c#5]!3 [a4,c#5]@2]
  ~@35
>`).s("gm_percussive_organ").gain(0.35).pan(0.4)

// chords · lead 1 square · "SQUAREWAVE"
const lead_1_square = note("<A@4 ~@89>".pickRestart({
  A: "[~@8 [e3,b3,e4]@41 ~@15]/4", // E5
})).s("gm_lead_1_square").gain(0.33)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@43 A@3 B C@5 D E D F@6 ~@14 G@4 ~ H ~ I J K ~@8>".pickRestart({
  A: "[~@4 [b2,f#3]@16 [a2,e3]@15 ~ [a2,e3]@9 ~ [a2,e3]@2]/3", B: "~@2 [e2,b2]@5 [e3,b3]",
  C: "[[e3,b3]@2 ~@2 [b2,f#3]@16 [f#2,c#3]@16 [b2,f#3]@8 [f#2,c#3]@8 [b2,f#3]@16 ~@4 [e3,b3] ~@3 [e3,b3] ~@3]/5", // E5 B5 F#5 B5 F#5 B5 E5
  D: "~@4 [e3,a3,c#4]@5 ~ [e3,g#3,b3]@5 ~", E: "~@8 [e3,b3] ~@3 [e3,b3]@2 ~@2",
  F: "[~@4 [b2,f#3]@15 ~ [c#3,g#3]@15 ~ [a2,e3]@15 ~ [b2,f#3]@17 ~ [b2,f#3]@2 ~@4 [b2,f#3]@8 ~@12]/6", // B5 C#5 A5 B5
  G: "[~@14 a3@6 a3@2 ~ g3 e3@16 ~@4 d3@2 c#3@9 ~@9]/4", H: "~@6 [e3,b3,e4] ~@9",
  I: "b3@3 g3 a3 ~ e3@8 ~@2, ~@6 g3 ~@9", J: "~@7 [c#3,e3]", K: "~@4 [c#3,e3,a3] ~@11",
})).s("gm_overdriven_guitar").gain(0.38).pan(0.4)

// chords · lead 3 calliope · "CALLIOPE"
const lead_3_calliope = note("<~ A@4 ~@2 B@5 C@4 D@7 E@2 ~@26 F@7 G@3 ~@32>".pickRestart({
  A: "[~@5 [e4,b4]@55 ~@4]/4", B: "[e4,b4]/5", C: "[~ e4@15, ~ c#5@13 ~@2]/4",
  D: "[[e4,b4]@83 ~ [c#5,g#5]@16 [a4,e5]@12]/7", E: "[~@2 [e4,b4]@29 ~]/2",
  F: "[~@4 [e4,b4]@83 ~ [c#5,g#5]@16 [a4,e5]@8]/7", G: "[~@6 [e4,b4]@29 ~@13]/3",
})).s("gm_lead_3_calliope").gain(0.05)

// chords · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note(`<
  ~@21 A B C@2 D E@2 F D E G@2 D E@2 F D H ~@4 I@8 ~@5 J@4 K@6 L@8 ~@4 M@4 N ~ O@2 P@2 Q@2 R@3
>`.pickRestart({
  A: "[c#5,g#5]", B: "[a4,e5]", C: "[e4,b4]/2", D: "[a3,c#4,e4]", E: "[b3,d#4,f#4]", F: "[c#4,e4,g#4]",
  G: "[d#4 [e4,g#4], [b3,f#4]]/2", H: "[b3,d#4,f#4]@3 ~@13",
  I: "[~ [b4,f#5]@8 [a4,e5]@4 [e4,b4]@4 [b4,f#5]@4 [f#4,c#5]@4 [b4,f#5]@2 [a4,e5]@2 [b4,f#5]@3]/8", // B5 A5 E5 B5 F#5 B5 A5 B5
  J: "[~ [c#5,g#5]@4 [a4,e5]@4 [e4,b4]@7]/4", // C#5 A5 E5
  K: "[~ [a3,c#4,e4]@4 [b3,d#4,f#4]@4 [b3,d#4,f#4]@4 [c#4,e4,g#4]@4 [a3,c#4,e4]@4 [b3,d#4,f#4]@3]/6", // A B C#m A B
  L: "[~@4 d#4@16 [e4,g#4]@16 [a3,c#4,e4]@16 [b3,d#4,f#4]@16 [b3,d#4,f#4]@16 [c#4,e4,g#4]@16 [a3,c#4,e4]@16 [b3,d#4,f#4]@3 ~@9, ~ [b3,f#4]@8 ~@23]/8", // E A B C#m A B B5
  M: "[[f#3,c#4] [e3,b3]@2 [g3,d4]]/2", N: "[f#3,c#4] ~", O: "[~@13 b6@11 [g4,d5]@8, ~@7 [b5,e6]@17 ~@8]/2",
  P: "[[f#4,c#5]@8 [e4,b4]@16 [g4,d5]@7 ~]/2", Q: "[[f#4,c#5]@7 ~ [e4,b4]@16 [g5,d6]@7 ~]/2",
  R: "[[f#5,c#6]@2 [e5,f#5,b5,e6]@7 ~@3]/3", // F#5 Esus2
})).s("gm_synth_strings_2").gain(0.44)

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

// drums · rim
const rim = s("rim").struct("<~@74 [~@2 x!2] [x!4]!7 x ~@10>").gain(0.49)

// drums · clap
const clap = s("cp").struct(`<
  ~@16 A B C ~@6 D E D E D E D E D E D E D F ~@13 G H G H G H G H I J K J K J K J K J K J K L ~@19
>`.pickRestart({
  A: "~@7 x", B: "x ~@6 x", C: "~@6 x!2", D: "x ~ x ~ x!3 ~", E: "x!3 ~ x ~ x ~", F: "x", G: "x!2 ~@6", H: "~ x ~@6",
  I: "~@2 x ~ x ~ x!2", J: "x ~ x!3 ~ x ~", K: "x ~ x ~ x ~ x!2", L: "x!2 ~@2",
})).gain(0.27)

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

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@3 A@3 B A B A B A B A B@2 A B A B A B A B C A B A B A B A B A B A B@2 ~ D E D A D A D A@3 D C D A D A D A D A ~ D A
  D A D A D A D A D A D ~@9 F B G A G A G A ~@3
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "~ x ~ x ~@4", D: "~@3 x ~ x ~ x", E: "~ x ~ x ~@3 x", F: "~@5 x ~ x",
  G: "~ x ~@3 x ~ x",
})).gain(0.16)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@6 A ~@8 B ~@3 A ~@4 C ~@3 A ~@3 A ~@3 A D ~@2 E F ~@3 F ~@4 G ~@2 F ~ F ~ F ~ H I ~@3 F ~@3 F ~@3 F I ~@9 A J ~@3 J
  ~ I ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@12 x ~ x!2", C: "~@4 x!4", D: "~@3 x", E: "~@5 x ~@2", F: "~ x ~@6", G: "~@2 x!2", H: "~@2 x!6",
  I: "x", J: "~@3 x ~@4",
})).gain(0.38)

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

// drums · ride
const ride = s("rd").struct("<~@90 [~@4 x ~@2 x!2 ~@7] ~@2>").gain(0.33)

// drums · tambourine
const tambourine = s("tb").struct("<~@39 A B@3 C ~@30 D E@7 F ~@10>".pickRestart({
  A: "~@4 x!5 ~ x!6", B: "x!3 ~ x!5 ~ x!6", C: "x!3 ~ x ~@11", D: "~@4 x!4", E: "x!8", F: "x!4 ~@4",
})).gain(0.16)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@39 A B@3 C ~@30 D E@7 F ~@10>".pickRestart({
  A: "~@9 x ~@6", B: "~@3 x ~@5 x ~@6", C: "~@3 x ~@12", D: "~@9 x ~ x ~ x ~ x", E: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  F: "~ x ~ x ~ x ~ x ~@8",
})).gain(0.11)

stack(
  bass, acoustic_guitar_steel, percussive_organ, lead_1_square, overdriven_guitar, lead_3_calliope, synth_strings_2,
  kick, rim, clap, snare, hihat, hihat_soft, open_hat, crash, ride, tambourine, tambourine_soft
)

More by McCartney