Strudelify
My Love cover art

1973 · Red Rose Speedway

My Love

Paul McCartney

KeyF majorTempo64 bpm
0:00/0:00
// My Love — Paul McCartney
// 64 bpm, 4/4, key F major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 4, 4/4 at bar 5) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 64 bars on a 32-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): guitar program 26.
setcpm(64/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, A@4 for four bars: edit a riff to change every repeat.

// chords · epiano1
const epiano1 = note(`<
  ~@3 A@2 B@2 A C D E F G H A@2 I J K L D E F G H M N O P Q N R@2 S@2 T U V W X E Y G H A@2 I J K L D E F G H M N Z@2
  AA@5
>`.pickRestart({
  A: "[a3,bb3,d4] f3 [a3,bb3,d4] f3 [a3,bb3,d4] f3 [a3,bb3,d4] f3", // Bbmaj7
  B: "[[a3,c4,e4]@2 g3@2 [a3,c4,e4]@2 g3@2 [a3,c4,e4]@2 g3@2 a3 ab3 g3 ~ [a3,c4,e4]@2 gb3@2 [a3,c4,e4]@2 gb3@2 [bb3,d4]@2 g3@2 [a3,c4,d4]@2 gb3@2, ~@24 [c4,e4]@5 ~ gb3@4 ~@30]/2", // Am Bb D7 C
  C: "[g3,a3,c4]@4 e3@4 [a3,c4]@4 e3@3 ~ [a3,bb3,d4]@4 f3@4 [bb3,d4]@4 f3@4, ~@8 g3@7 ~@9 a3@8", // Am7 Am Bbmaj7 Bb
  D: "~@2 a3@2 [b3,d4,f4]@2 a3@2 [b3,d4,f4]@2 a3@2 [b3,d4,f4]@2 a3 ~, [b3,d4,f4]@7 ~@25", E: "[g3,a3,c4]@7 ~, f4",
  F: "[f3,bb3,c4]@11 ~ c5@4, ~@11 f4@3 ~@2, ~@23 bb4@6 ~@3", G: "[bb3,c4,d4,f4]@15 ~",
  H: "[g3,a3,c4]@21 ~@3 [a3,c4]@7 ~, f4@3 ~", I: "[a3,c4,e4] g3 [a3,c4,e4] g3 [a3,c4,e4] g3 [a3,c4,e4] g3",
  J: "[a3,c4,e4] gb3 [a3,c4,e4] gb3 [bb3,d4] g3 [a3,c4,d4] gb3", // Am Bb D7
  K: "[f3,a3,bb3,d4]@7 ~ [a3,bb3,d4,f4]@2 [a3,bb3,d4,f4]@2 [a3,bb3,d4,f4]@2 [a3,bb3,d4,f4] ~@5 [a3,bb3,d4,f4]@2 [a3,bb3,d4,f4]@2 [a3,bb3,d4,f4]@2 [a3,bb3,d4,f4]@2 [a3,bb3,d4,f4]@2 [a3,bb3,d4,f4] ~", // Bbmaj7
  L: "[a3,c4]@4 e3@4 [a3,c4]@4 e3@3 ~ [a3,bb3,d4]@4 f3@4 [bb3,d4]@4 f3@4, ~@8 g3@7 ~@9 a3@8", // Am Bbmaj7 Bb
  M: "[f3,bb3,d4]@16 ~@9 g3@7, ~ [e3,bb3], ~@4 c4@3 ~", N: "[f3,a3]@3 ~ [f3,db4]@3 ~, c4 a3",
  O: "[f3,d4] [e3,g3,bb3], bb3@12 ~@4 c4@11 ~@5", P: "[f3,a3]@13 ~@3 a3@6 ~@2 a3@8, c4@4 [f3,db4]@3 ~",
  Q: "[f3,d4]@2 ~ e3, bb3@3 ~ [g3,bb3]@4, ~@4 c4@3 ~", // Dm Gm
  R: "[[bb3,d4]@12 ~@4 [bb3,d4]@8 a3@6 ~@2 [f3,a3]@16 bb3@4 a3@4 g3@4 f3@3 ~, f3 e3 ~@2, ~@24 c4@24 a3 ~@15]/2", // Bb F
  S: "[[a3,bb3,d4]@7 ~ [a3,bb3,d4]@7 ~, f3@12 ~@2 f3@15 ~@3]/2", // Bbmaj7
  T: "[e3,g3,a3,c4]@21 ~@3 [e3,g3]@8, ~@24 [a3,c4]@5 ~@3", U: "[gb3,c4,d4]@11 ~ [gb3,a3,c4,d4]@3 ~",
  V: "[f3,a3,bb3,d4]@16 ~@4 [d3,f3,g3,bb3]@3 ~ d3 ~ [d3,f3,g3,bb3] ~ [d3,f3,bb3]@4, ~@14 g3 ~", // Bbmaj7 Gm7 Bb
  W: "[e3,g3,a3,c4]@8 ~@2 [e3,g3,a3,c4] ~ [e3,g3,c4]@4 [f3,a3,bb3,d4] ~@3 [f3,a3,bb3,d4]@3 ~ [a3,bb3,d4]@4 f3@2 a3 ~, ~@12 a3@2 ~@10 f3@3 ~@5", // Am7 C Bbmaj7
  X: "[a3,b3,d4,f4]@11 ~ [a4,b4,d5,f5]@19 ~", Y: "[f3,bb3,c4]@23 ~ c5@8, ~@23 [f4,bb4]@6 ~@3",
  Z: "[[f3,d4]@17 ~ g3@17 ~@29, bb3@13 ~@4 [e3,bb3]@18 ~@29, ~@17 c4@12 ~@35]/2", // Dm Edim
  AA: "[~@6 [f3,g3,a3,c4]@8 ~ [f3,c4]@8 ~ [a3,db4,f4]@8 ~ [a3,db4,f4]@9 [bb3,d4,g4]@8 ~@2 [bb3,d4,g4]@7 ~@2 [e4,a4]@19 ~ [g3,a3,c4,f4]@70 ~@9, ~@15 g3@26 ~@119, ~@15 a3@5 ~@41 [bb3,d4]@16 ~@83]/5", // F F5 Aaug Gm A5 F Bb
})).s("gm_epiano1").gain(0.33)

// bass · fretless bass
const bass = note(`<
  ~@3 A B C D E F G H I J K L M N D O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN L M N D O P Q R S
  T U V W AO@2 AP AQ@4
>`.pickRestart({
  A: "bb1@15 f1", B: "bb1@3 bb2", C: "a2@14 e2@2 a2@11 ~@3 a2@2", D: "d2 c2 bb1 a1", E: "g1@12 ~@3 g1 g1@16",
  F: "a1@16 bb1@9 ~@3 bb1 ~ bb1@2", G: "b1 ~ b1@2 b1 ~ b1@2 b1@3 ~@2 b1!2 ~ b1 ~ b1 ~ b1 ~ b1@2 b1@2 b1 ~ b1 ~ b1@2",
  H: "f1@8 ~@4 f1@14 ~@2 f1 ~ f1@2", I: "g1@6 g2@7 f2 d2 c2", J: "bb1@8 bb2@9 ~@3 bb2@8 c2@4",
  K: "f1@12 ~@2 f1@2 f1@9 ~@3 f1@2 g1@2", L: "bb1@13 ~ bb2@2", M: "bb1@6 ~ bb1", N: "a1@11 ~@3 a1@2 a1 ~@3 a1@10 c2@2",
  O: "g1@7 ~ g1@4 g1 ~ g1@2 g1@2 g1@2 g1@2 g1@2 g1@3 ~ g1@2 ab1@2",
  P: "a1@4 a1@3 ~ a1@3 ~ a1 ~ a1@2 bb1@4 bb1@3 ~ bb1@2 ~@2 bb1@4",
  Q: "b1 ~ b1@2 b1@2 b1 ~ b1@2 b1 ~ b1@2 b1@2 b1@2 b1@2 b1@2 b1@2 b1@2 b1 ~ b1@4", R: "f1@11 ~ f1@20",
  S: "g1@8 c2@2 d2@2 g2@12 f2 ~@3 d2 ~@3", T: "bb1@7 ~ bb1@6 ~@2 bb1 ~@3 bb1@6 ~@2 bb1@2 c2@2",
  U: "f1@8 f2@4 f2 ~ f2@2 f2@8 g2@4 a2@4", V: "g2@4 f2@4 e2@4 c2 ~ e2 ~", W: "f2@8 c2@3 ~ c2@4 a1@3 ~ a1@4 g1@4 a1@4",
  X: "bb1@4 bb1 ~ bb1@2 bb1@2 ~@2 bb1@3 ~ c2@4 ~@2 c2@2 c2@2 ~@2 c2@4",
  Y: "f1@3 ~ f1@4 g1@4 ab1@4 a1@3 ~ a1@3 ~ g1@4 a1@2 f1@2", Z: "g1@3 ~ g2@2 g2 ~ f2@2 ~@2 f2@2 g2@2 e2@8 c2@4 e2@4",
  AA: "f2@2 c2@2 a1@2 g1 a1", AB: "bb1@5 ~ bb1@2 c2@6 ~@2", AC: "f1@12 ~ f1 g1 a1",
  AD: "bb1@7 ~ bb1@5 ~ bb1@2 bb1@5 ~ bb1@2 bb1@2 f1@2 g1@2 a1@2",
  AE: "bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@4 bb1@3 ~ bb1@2 bb1@2 bb1@2 bb1@6",
  AF: "a1@3 ~ a1@3 ~ g1@4 a1 ~ a1@2 g1@3 ~ a1@2 g1@2 a1@2 ~@2 a1@2 c2@2",
  AG: "d2@2 ~@2 d2@2 gb2@2 c2@3 ~ c2@2 d2@2 b1@3 ~ b1@4 a1@2 ~@2 a1@4",
  AH: "g1@3 ~ g1@3 ~ a1@4 g1@3 ~ g1@2 ~@2 g1 ~ g1 ~ g1@2 g1 ~ g1@4",
  AI: "a1@3 ~ a1@2 ~@2 a1@3 ~ a1 ~ a1@2 bb1@4 bb1@3 ~ bb1@2 bb1 ~ bb1@4",
  AJ: "b1@2 b1 ~ b1@2 b1 ~ b1@2 b1@2 b1@2 b1@2 b1 ~ b1@2 b1@2 b1@2 b1 ~ b1@2 b1@2 b1@2",
  AK: "f1@9 ~@3 f1@11 ~ f1@3 ~ f1@2 gb1@2", AL: "g1@6 g2@7 f2 d2 a1",
  AM: "bb1@5 ~@3 bb1@6 f1@2 bb1@2 ~@2 bb1@8 d2@2 c2@2", AN: "f1@12 ~@3 f1 f1@4 f1@4 g1@4 a1@4",
  AO: "[bb1@4 bb1 ~ bb1@2 ~ bb1@2 ~@2 bb1@4 c2@18 ~@29]/2", AP: "~@6 f1@8 ~ f1@9 a1@7 ~",
  AQ: "[~ a1@2 ~@3 a1@4 bb1@10 ~@4 bb1@5 c2@7 ~@3 c2@10 f1@32 ~ f1!2 f1@34 ~@10]/4",
})).s("gm_fretless_bass").gain(0.38)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@5 A ~ B ~@2 C D ~@4 E ~@4 C D ~ F ~@21 E ~@4 C D ~ F ~@9>".pickRestart({
  A: "~@8 [a3,c4,e4] ~@7 [a3,c4,e4] ~ [a3,c4,e4] ~@13", B: "~@8 [bb3,d4,f4] ~@7 [bb3,d4,g4] ~@15",
  C: "~@3 [a3,c4,f4]@4 ~", D: "~@6 [bb3,d4,g4] ~@25", E: "~@8 [e3,a3,c4] ~@7 [a3,c4,e4] ~@15", F: "~@8 [f3,c4]@7 ~",
})).s("gm_electric_guitar_clean").gain(0.27).pan(0.4)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@6 A B C D ~@2 E F ~@2 G@2 H I J K ~ L@2 ~@8 M N@2 O P Q R S ~@5 G@2 H I J K ~ L@2 ~@6 T@3
>`.pickRestart({
  A: "~@7 gb4@5 d4@4", B: "~@3 bb3", C: "a3@15 ~@17", D: "~@7 d3, ~@2 d3 ~, ~@18 f3@5 ~ f3@8, ~@20 a3@11 ~",
  E: "~@12 bb2@2 c3@2 d3@4 f3@2 ~ f3 g3@2 f3@2 d3@2 c3@2, ~@11 g3 ~@4", F: "f2@17 ~@15",
  G: "[~@22 a3 ~ a3@16 ~@12 e4@2 ~@2 e4@8, ~@20 [c4,e4]@21 ~@13 c4@10]/2", H: "~@4 f3@2 d3 f3", I: "e3@11 ~@21",
  J: "~@6 d4 ~ d4@4 ~ f4 ~ b3, ~@4 a4@7 ~ a4@4, ~@10 f4@4 a3@7 ~@7 d4@4", K: "[f3,c4]@3 ~",
  L: "[~@12 d4@16 c4@12 ~@6 ab3 a3 c4@4 a3 g3 f3 ~ g3@3 ~ g3@4]/2", M: "~@2 bb4@3 g4@2 f4@9",
  N: "[~@8 bb4@2 g4@2 f4@2 c4@6 f4@2 ~@2 g4@2 f4@2 ~@20 e4@2 a4@2 c5@2 ~@2 a4 c5 a4@2 e4@2 ~@2, ~@28 c4@23 ~@13]/2",
  O: "e4@20 ~@6 g4@2 g4 ~ g4 ~", P: "g4@4 bb3@2 bb3 ~@3 bb3@2 bb3@11 ~@3 g4@2 a4@2 a4 ~",
  Q: "a4@3 ~ c4@2 c4@3 ~ c4 ~@3 c4@2 d4@2 f4@2 g4@2 ~@2 d4@2 f4@2 [g4,a4]@2 c5@2", // Gsus2
  R: "d5@2 f5@3 ~ f5 ~ d5@2 c5 ~ d5@2 c5 ~ ab4@2 g4 f4 g4@2 f4 ~ g4 ~@2 g4@2 ~ f4 g4, ~@2 e5 ~@29", S: "[c4,f4]@31 ~",
  T: "[~@17 c5@62 ~@17, ~@16 [c4,a4]@71 ~@9, ~@8 a5@31 ~@9]/3", // F
})).s("gm_overdriven_guitar").gain(0.24).pan(0.6)

// other · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~@10 A ~ B ~@3 C@2 ~@2 D E ~@2 F ~@8 G H@2 ~@3 I ~@6 C@2 ~@2 D E ~@2 F ~@9
>`.pickRestart({
  A: "~@6 [a3,c4,f4]@9 ~", B: "~@12 f3 ~@3", C: "[~@26 a3@2 g3@2 gb3@19 ~@15]/2", D: "~@22 a3 ~@9", E: "~@8 f3@19 ~@5",
  F: "f3@15 ~@17", G: "~ c4", H: "[~@3 a3@2 ~@3]/2", I: "~ eb5 ~@14",
})).s("gm_electric_guitar_jazz").gain(0.27)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@3 A@2 B@2 C D E F@3 G ~@4 H D E F@3 G ~@3 I J G K L@6 M@2 F@3 G ~@4 H D E F@3 G N@2 O@2 P Q@4
>`.pickRestart({
  A: "f4/2", B: "[e4@24 ~@2 d4@5 e4]/2", C: "f4@19 bb3@4 d4@4 ~ f4@4", D: "e4 a4", E: "d5", F: "[c5@57 ~@6 bb3@32 ~]/3",
  G: "a3@31 ~", H: "~@19 bb3@4 d4@4 ~ f4@4", I: "~@3 a3", J: "g3", K: "f3 bb3",
  L: "[a3@17 ~@31 a4@15 ~ f4@2 g4@2 f4@2 g4@2 bb4@19 ~ g4@4 [c4,e4]@29 ~@3 [c4,e4,gb4]@32 [bb3,d4,f4]@32, ~@3 a3@13 ~@8, ~@16 d4@32 a4@33 ~@15]/6", // C Gbm7b5 Bb
  M: "[[c4,e4,g4]@16 [d4,f4]@13 ~@3 [a3,d4,f4]@32, ~ a4@3]/2", N: "[d4@16 e4@15 f4@9 g4@8 a4@16]/2",
  O: "[f4@17 bb4@45 ~@2]/2", P: "~@6 [a4,a5] [g4,g5]",
  Q: "[~ [f4,f5]@4 [e4,e5]@5 [d4,d5]@19 ~ e4@19 [f4,f5]@70 ~@9, ~@29 e5@20 ~@79]/4", // F E D F
})).s("gm_string_ensemble_1").gain(0.33).pan(0.4)

// chords · string ensemble 1
const string_ensemble_1_2 = note(`<
  ~@3 A@5 B@6 ~@4 C D@6 E@2 F@3 G H@2 I J K L M N O P@5 ~@3 C D@6 E@2 Q@2 R@5
>`.pickRestart({
  A: "[~@4 a4@4 g4@4 [a3,e4]@2 bb3 ~ [f3,bb3]@4, a3@93 ~@3 gb3@32 ~@32, [d4,f4]@64 c4@49 ~@7 a3@39 ~, ~@32 e4@15 ~@9 d4@24]/5", // A5 Bb5 Dm
  B: "[[a3,c4,e4]@16 bb3@16 b3@32 ~@12 g3@12 ~@2 g3@5 ~@17 d4@48 [g3,a3,c4]@32, g3@32 a3@53 ~@3 a3@7 bb3@62 ~@35, ~ f4@11, ~@16 d4@48 c4@95 ~@33]/6", // Am Am7
  C: "bb3",
  D: "[[a3,c4,e4]@4 bb3@4 b3@8 ~@3 g3@3 a3@2 ~@4 d4@12 [g3,a3,c4]@8, g3@16 a3@22 ~@10 bb3@31 ~@17, ~ f4@11, ~@16 d4@48 c4@95 ~@33]/6", // Am Am7
  E: "[[bb3,d4]@2 a3 g3 ~@2 db4@2, ~ c4@2 ~, ~ a3]/2", // Bb
  F: "[[bb3,d4]@2 e4@2 g4 ~ db4@2 [bb3,d4]@2 [c4,e4] [bb3,d4], ~@16 c4@33 ~@47, ~@32 a3@33 ~@31, ~@5 f4@5 ~@2]/3", // Bb C Bb
  G: "c4 db4, a3", H: "[d4@24 ~@8 a3@17 ~@7 [f3,f4]@8, bb3 ~, ~@3 c4@3 ~@2]/2", I: "[f4,f5]",
  J: "~ e5 [d4,d5] [e4,e5] [f4,f5]@10 [d4,d5]@2, [d4,d5] ~@15, ~ e4@2 ~@29", K: "[e4,e5] [c4,c5]",
  L: "[a3,a4]@24 [d4,d5]@6 [b4,b5,c6] [c5,db5,db6]", M: "[d5,d6]@3 [f5,f6]",
  N: "[e5,e6]@8 [c5,c6]@8 [a4,a5]@8 [g4,g5]@4 ~@2 f6 g6, ~@7 [f4,f5]", O: "[a5,a6]@15 ~",
  P: "[a3@3 g3@3 a3@2 ~@4 d4@12 [g3,a3,c4]@8 ~@8, f4@129 ~@31, c4@19 ~@13, ~@16 bb3@31 ~@33]/5", // Am7
  Q: "[[bb3,d4]@17 [g3,c4,e4]@44 ~@3]/2", // Bb C
  R: "[~@24 db4@18 ~ g4@18 ~ e4@19 [g3,a3,c4,f4]@63 ~@16, ~@6 f3@55 ~@99, ~@6 f4@36 ~@19 a4@19 ~@80, ~@6 c4@18 ~@19 d4@38 ~@79, ~@7 a3@36 bb3@34 ~@83]/5", // F
})).s("gm_string_ensemble_1").gain(0.33)

// chords · flute
const flute = note("<~@25 A B ~@2 C D ~@24 A B ~@2 E@5>".pickRestart({
  A: "~@2 [d4,g4] [f4,d5] [e4,a4,c5]@2 [d4,g4,bb4]@2, ~ bb4 ~@2", // G5 Dm Am Gm
  B: "[c4,f4]@7 ~ [a3,d4,f4]@4 [c4,e4,g4]@4 [db4,f4,a4]@16, a4 ~@7", // F5 Dm C Dbaug
  C: "~@2 [d4,g4] [f4,bb4,d5] [e4,a4,c5]@2 [d4,g4,bb4]@2, ~@8 bb4@3 ~@21", // G5 Bb Am Gm
  D: "[c4,a4]@2 [a3,d4,f4] [c4,e4,g4] [db4,f4,a4]@4, f4@5 ~@27", E: "[~@6 c4@18 a4@18 g4@19 a4@90 ~@9]/5",
})).s("gm_flute").gain(0.33)

// other · alto sax
const alto_sax = note("<A@6 ~@12 B C D ~@7 E F ~@18 B C D ~@8 G H@4>".pickRestart({
  A: "[~@31 a4@145 ~@16]/6", B: "~@6 d4 f4", C: "g4@4 e4@12 f4@15 g4", D: "a4@15 ~@17", E: "~ f3 a3 c4 db4@4",
  F: "d4@3 c4", G: "~@3 f3", H: "[~ a3@9 g3@19 a3@20 c4@70 ~@9]/4",
})).s("gm_alto_sax").gain(0.33).pan(0.1)

// other · french horn
const french_horn = note("<A@6 ~@2 B@2 ~@9 B@2 ~@7 C D E F G ~@2 H@2 I J@2 ~@9 B@2 ~@8 K@5>".pickRestart({
  A: "[~@31 a4@145 ~@16]/6", B: "[~@12 a3@4 bb3@4 d4@4 f4@4 a4@35 ~]/2", C: "~@3 a4", D: "g4", E: "f4@12 g4@2 a4 g4",
  F: "f4@8 e4@8 d4@8 c4@7 ~, g3", G: "[f3,c4] ~", H: "[~@16 a3@13 ab3@2 ~ gb3@25 ~@7, ~@31 g3@2 ~@31]/2",
  I: "[bb3,d4]@31 ~", J: "[[c4,e4]@15 ~ f4@15 ~ a4@31 ~, ~ d4@3]/2",
  K: "[~@24 a4@5 g4@4 f4@5 e4@4 d4@10 bb3@9 e4@10 c4@10 f4@71 ~@8]/5",
})).s("gm_french_horn").gain(0.33)

// other · muted trumpet
const muted_trumpet = note("<~@11 A ~@10 B ~@18 B ~@10 B ~@11>".pickRestart({
  A: "c5", B: "c5 f5",
})).s("gm_muted_trumpet").gain(0.38)

// chords · trombone
const trombone = note(`<
  ~@8 A@2 B@2 ~@5 C ~ D@2 B@2 ~@5 E@2 F G ~@3 H I ~@2 J B@2 ~@5 C ~ D@2 B@2 ~@4 K@2 L@5
>`.pickRestart({
  A: "[~@8 a3@8 bb3@15 ~@25 a3@6 g3@2, ~@31 b3@33]/2", B: "[f3@12 a2@12 a3@6 g3@2 f3@12 ~ g2@19, c4]/2", C: "d2@3 ~",
  D: "[~@8 a3@8 bb3@15 b3@25 a3@6 g3@2]/2", E: "[~@8 a2@4 c3@4 f3@32 e3@13 ~@3]/2", F: "~@3 f2 a2@2 c3@2 db3@8",
  G: "d3 ~", H: "~@16 a3@13 ab3 g3@2", I: "gb3@17 ~@15", J: "~@12 a3@3 g3", K: "[d4@31 ~]/2",
  L: "[~@6 f2@18 a2@18 bb2@19 c3@18 ~@2 c3@70 ~@9]/5",
})).s("gm_trombone").gain(0.44).pan(0.7)

// other · vibraphone · A
const vibraphone = note(`<
  ~@56
  [~@16 db5 a4 db5 ~ db5 a4 db5 a4 db5 [a4,db5] a4 db5 [a4,db5] a4 db5 [a4,db5]]
  [a4 d5 ~@30]
  ~@6
>`).s("gm_vibraphone").gain(0.22).pan(0.8)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A B@4 C B@3 D ~ A B@4 C B@3 D B@3 E B@3 ~@3 B@4 ~@2 F B@2 ~ A B@4 C B@3 D B@2 G ~ H I J ~@2
>`.pickRestart({
  A: "~@12 x ~ x!2", B: "~ x ~ x", C: "~@3 x ~@4", D: "~@4 x ~@7 x ~ x!2", E: "~@4 x ~ x!2 ~@4 x ~@3",
  F: "~@6 x!3 ~@23", G: "~@9 x ~@22", H: "~@15 x ~@16", I: "~ x ~@18 x ~@11", J: "~@5 x ~ x ~@24",
})).gain(0.49)

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

More by Paul McCartney