Strudelify
My Love cover art

1973 · All The Best

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 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
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: edit a riff to change every repeat.

// chords · epiano1
const epiano1 = note(`<
  ~@3 A@2 B@2 A C D E F@2 G A@2 H I J K D L F@2 G M N O P Q R S@2 T@2 U V W X Y E Z AA G A@2 H I J K D L F@2 G M N AB@2
  AC@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, ~@36 [c4,e4]@7 ~@2 gb3@6 ~@45]/2", // Am Bb D7 C
  C: "[g3,a3,c4]@6 e3@6 [a3,c4]@6 e3@5 ~ [a3,bb3,d4]@6 f3@6 [bb3,d4]@6 f3@6, ~@12 g3@10 ~@14 a3@11 ~", // 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]@5 ~@19", E: "[g3,a3,c4]@7 ~, f4",
  F: "[[f3,bb3,c4]@33 ~@3 c5@11 ~ [c4,d4,f4]@45 ~@3, ~@33 f4@9 ~@5 bb3@43 ~@6, ~@17 bb4@4 ~@27]/2", // Fsus4 Dm7
  G: "[g3,a3,c4]@32 ~@4 [a3,c4]@11 ~, f4@3 ~", H: "[a3,c4,e4] g3 [a3,c4,e4] g3 [a3,c4,e4] g3 [a3,c4,e4] g3",
  I: "[a3,c4,e4] gb3 [a3,c4,e4] gb3 [bb3,d4] g3 [a3,c4,d4] gb3", // Am Bb D7
  J: "[f3,a3,bb3,d4]@11 ~ [a3,bb3,d4,f4]@3 [a3,bb3,d4,f4]@3 [a3,bb3,d4,f4]@3 [a3,bb3,d4,f4]@2 ~@7 [a3,bb3,d4,f4]@3 [a3,bb3,d4,f4]@3 [a3,bb3,d4,f4]@3 [a3,bb3,d4,f4]@3 [a3,bb3,d4,f4]@3 [a3,bb3,d4,f4]@2 ~", // Bbmaj7
  K: "~@6 e3@6 [a3,c4]@6 e3@5 ~ [a3,bb3,d4]@6 f3@6 [bb3,d4]@6 f3@6, ~ [a3,c4]@9 ~@2 g3@10 ~@14 a3@11 ~", // Am Bbmaj7 Bb Am
  L: "~ g3@42 ~@5, f4, [a3,c4]@7 ~", M: "[f3,bb3,d4]@23 ~@14 g3@11, ~ [e3,bb3], ~@4 c4@3 ~",
  N: "[f3,a3]@19 ~@5 [f3,db4]@18 ~@6, c4 a3", O: "[f3,d4] [e3,g3,bb3], bb3@18 ~@6 c4@17 ~@7",
  P: "[f3,a3]@19 ~@5 a3@9 ~@3 a3@12, c4@4 [f3,db4]@3 ~", Q: "[f3,d4]@2 ~ e3, bb3@3 ~ bb3@4, ~@24 c4@19 ~@5, ~@25 g3@23",
  R: "[f3,a3]@18 ~@6 [f3,db4]@19 ~@5, c4 a3", // F Db
  S: "[[bb3,d4]@19 ~@5 [bb3,d4]@12 a3@9 ~@3 [f3,a3]@24 bb3@6 a3@6 g3@6 f3@5 ~, f3@24 e3@25 ~@47, ~@36 c4@35 ~ a3 ~@23]/2", // Bb F
  T: "[[a3,bb3,d4]@42 ~@6 [a3,bb3,d4]@43 ~@5, f3@12 ~@2 f3@15 ~@3]/2", // Bbmaj7
  U: "[e3,g3,a3,c4]@31 ~@5 [e3,g3]@12, ~@36 [a3,c4]@7 ~@5", V: "[gb3,c4,d4]@33 ~@3 [gb3,a3,c4,d4]@8 ~@4",
  W: "[f3,a3,bb3,d4]@24 ~@6 [d3,f3,g3,bb3]@5 ~ d3 ~@2 [d3,f3,g3,bb3] ~@2 [d3,f3,bb3]@5 ~, ~@14 g3 ~", // Bbmaj7 Gm7 Bb
  X: "[e3,g3,a3,c4]@12 ~@3 [e3,g3,a3,c4] ~@2 [e3,g3,c4]@6 [f3,d4]@2 ~@4 [f3,a3,bb3,d4]@5 ~ [a3,bb3,d4]@6 ~@3 a3 ~@2, ~@18 a3@3 ~@3 [a3,bb3] ~@11 f3@5 ~ f3@5 ~", // Am7 C Dm Bbmaj7
  Y: "[a3,b3,d4,f4]@17 ~ [a4,b4,d5,f5]@29 ~", Z: "[f3,bb3,c4]@35 ~ c5@12, ~@35 [f4,bb4]@9 ~@4",
  AA: "[bb3,c4,d4,f4]@15 ~", AB: "[[f3,d4]@13 [e3,g3,bb3]@13 ~@22, bb3@19 ~@7 c4@18 ~@52]/2",
  AC: "[~@10 [f3,g3,a3,c4]@12 ~ [f3,c4]@12 ~ [a3,db4,f4]@13 ~ [a3,db4,f4]@13 [bb3,d4,g4]@12 ~@3 [bb3,d4,g4]@10 ~@4 [e4,a4]@29 [g3,a3,c4,f4]@106 ~@13, ~@23 g3@40 ~@177, ~@23 a3@8 ~@61 [bb3,d4]@23 ~@125]/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 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 AO L M N O P Q R S T
  U V W X AP@2 AQ AR@4
>`.pickRestart({
  A: "bb1@44 ~ f1@3", B: "bb1@3 bb2", C: "a2@21 e2@3 a2@17 ~@4 a2@3", D: "d2@12 c2@11 ~ bb1@12 a1@12",
  E: "g1@18 ~@4 g1 ~ g1@24", F: "a1@24 bb1@13 ~@5 bb1@2 ~ bb1@3",
  G: "b1@2 ~ b1@3 b1@2 ~ b1@2 ~ b1@5 ~@2 b1@2 b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1@3",
  H: "f1@12 ~@6 f1@21 ~@3 f1@2 ~ f1@3", I: "g1@6 g2@7 f2 d2 c2", J: "bb1@12 bb2@13 ~@5 bb2@12 c2@6",
  K: "f1@17 ~@4 f1@3 f1@14 ~@4 f1@3 g1@3", L: "bb1@13 ~ bb2@2", M: "bb1@37 ~@5 bb1@6",
  N: "a1@17 ~@4 a1@3 ~ a1@2 ~@3 a1@15 c2@2 ~", O: "d2 c2 bb1 a1",
  P: "g1@11 ~ g1@5 ~ g1 ~@2 g1@3 g1@2 ~ g1@3 g1@2 ~ g1@3 ~ g1@4 ~ g1@3 ab1@2 ~",
  Q: "a1@6 a1@4 ~@2 a1@5 ~ a1@2 ~ a1@3 bb1@6 ~ bb1@4 ~ bb1@4 ~@2 bb1@5 ~",
  R: "b1@2 ~ b1@3 b1@2 ~ b1@2 ~ b1@3 b1@2 ~ b1@2 ~ b1@2 ~ b1@2 b1@3 ~ b1@2 ~ b1@3 b1@3 b1@2 ~ b1@6", S: "f1@17 ~ f1@30",
  T: "g1@12 c2@3 d2@3 g2@18 f2 ~@5 d2 ~@5", U: "bb1@10 ~@2 bb1@10 ~@2 bb1@2 ~@4 bb1@9 ~@3 bb1@3 c2@3",
  V: "f1@12 f2@6 f2 ~@2 f2@3 f2@11 ~ g2@6 a2@6", W: "g2@12 f2@12 e2@12 c2@2 ~@4 e2@3 ~@3",
  X: "f2@6 c2@2 ~ c2@3 a1@2 ~ a1@3 g1@3 a1@3", Y: "bb1@6 bb1 ~@2 bb1@3 bb1@3 ~@3 bb1@5 ~ c2@6 ~@3 c2@2 ~ c2@3 ~@3 c2@6",
  Z: "f1@5 ~ f1@6 g1@6 ab1@6 ~ a1@4 ~ a1@4 ~@2 g1@6 a1@3 f1@2 ~",
  AA: "g1@5 ~ g2@3 g2@2 ~ f2@3 ~@3 f2@3 g2@3 e2@12 c2@6 e2@6", AB: "f2@2 c2@2 a1@2 g1 a1",
  AC: "bb1@15 ~@3 bb1@6 c2@19 ~@5", AD: "f1@12 ~ f1 g1 a1",
  AE: "bb1@10 ~@2 bb1@8 ~ bb1@3 bb1@8 ~ bb1@3 bb1@3 f1@3 g1@3 a1@3",
  AF: "bb1@4 ~@2 bb1@4 ~@2 bb1@5 ~ bb1@6 bb1@5 ~ bb1@2 ~ bb1@3 bb1@2 ~ bb1@9",
  AG: "a1@4 ~@2 a1@5 ~ g1@6 a1@2 ~ a1@2 ~ g1@5 ~ a1@3 g1@3 a1@3 ~@3 a1@3 c2@3",
  AH: "d2@2 ~@4 d2@3 gb2@3 c2@4 ~@2 c2@3 d2@3 b1@4 ~@2 b1@6 a1@4 ~@2 a1@6",
  AI: "g1@4 ~@2 g1@4 ~@2 a1@6 g1@4 ~@2 g1@3 ~@3 g1@2 ~ g1@2 ~ g1@3 g1@2 ~ g1@6",
  AJ: "a1@4 ~@2 a1@4 ~@2 a1@4 ~@2 a1@2 ~ a1@2 ~ bb1@6 bb1@5 ~ bb1@2 ~ bb1@2 ~ bb1@6",
  AK: "b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1@3 b1@2 ~ b1@2 ~ b1@2 ~ b1@2 ~ b1@3 b1@2 ~ b1@3 b1@2 ~ b1@3 b1@3 b1@3",
  AL: "f1@14 ~@4 f1@16 ~@2 f1@4 ~@2 f1@3 gb1@3", AM: "g1@6 g2@7 f2 d2 a1",
  AN: "bb1@8 ~@4 bb1@9 f1@3 bb1@3 ~@3 bb1@12 d2@3 c2@3", AO: "f1@9 ~@2 f1 f1@3 f1@3 g1@3 a1@3",
  AP: "[bb1@6 ~ bb1 ~ bb1@3 ~ bb1@3 ~@3 bb1@6 ~ c2@26 ~@44]/2", AQ: "~@9 f1@12 ~@2 f1@13 a1@11 ~",
  AR: "[~@2 a1@3 ~@3 a1@7 bb1@16 ~@5 bb1@7 ~ c2@10 ~@5 c2@14 f1@48 ~@2 f1 ~ f1 f1@51 ~@15]/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: "~@12 [a3,c4] e4 ~@11 e4@2 [a3,c4] e4 ~@19, ~@8 [a3,c4] ~@7", B: "~@12 [bb3,d4] f4 ~@10 [bb3,d4,g4] ~@23",
  C: "~@19 f4@24 ~@5, ~@18 [a3,c4]@25 ~@5", D: "~@9 [bb3,d4] g4 ~@37", E: "~@12 [e3,a3,c4] ~@11 [a3,c4,e4] ~@23",
  F: "~@12 [f3,c4]@11 ~", // F5
})).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@23 ~@25", D: "~@7 d3, ~@24 d3@13 ~@11, ~@27 f3@7 ~@2 f3@12, ~@30 a3@17 ~",
  E: "~@18 bb2@3 c3@3 d3@6 f3@2 g3@3 ~ g3@3 f3@3 d3@3 c3@3, ~@35 f3@2 ~@11", F: "f2@25 ~@23",
  G: "[~@33 a3 ~@2 a3@24 ~@18 e4@3 ~@3 e4@12, ~@30 [c4,e4]@31 ~@20 c4@15]/2", H: "~@4 f3@2 d3 f3", I: "e3 ~@2",
  J: "~@18 d4@3 ~@3 d4@12 ~@4 f4@2 ~@3 b3@3, ~@4 a4@7 ~ a4@4, ~@15 f4@6 a3@10 ~@11 d4@6", K: "~ [f3,c4]@35 ~@12",
  L: "[~@18 d4@24 c4@18 ~@9 ab3@2 ~ c4@6 a3@2 g3@2 f3@2 g3@4 ~@2 g3@6, ~@71 a3@2 ~@23]/2", M: "~@2 bb4@3 g4@2 f4@9",
  N: "[~@12 bb4@3 g4@3 f4@3 c4@9 f4@3 ~@3 g4@3 f4@3 ~@30 e4@3 a4@3 c5@3 ~@3 a4@2 c5@2 a4@2 e4@4 ~@2, ~@21 c4@17 ~@10]/2",
  O: "e4@30 ~@9 g4@2 ~ g4@2 ~ g4@2 ~", P: "g4@6 bb3@2 ~ bb3@2 ~@4 bb3@2 ~ bb3@17 ~@4 g4@3 a4@2 ~ a4@2 ~",
  Q: "a4@5 ~ c4@2 ~ c4@5 ~ c4 ~@5 c4@3 d4@3 f4@2 g4@3 ~@4 d4@3 f4@3 a4@3 c5@3, ~@42 g4 ~@5",
  R: "d5@3 f5@4 ~@2 f5@2 ~ d5@2 ~ c5@2 ~ d5@2 ~ c5 ~@2 ab4@2 ~@2 f4 ~ g4@3 f4@2 ~ g4@2 ~@2 g4@2 ~@3 f4 g4 ~, ~@3 e5 ~@23 g4@2 ~@19",
  S: "[c4,f4]@47 ~", T: "[~@25 c5@93 ~@26, ~@24 [c4,a4]@107 ~@13, ~@8 a5@31 ~@9]/3",
})).s("gm_overdriven_guitar").gain(0.24).pan(0.6)

// other · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~@6 A B C D E ~ F G ~@2 H@2 I J K L ~ M N ~@8 O P@2 Q R S T U ~@5 H@2 I J K L ~ M N ~@9
>`.pickRestart({
  A: "~@21 gb4@15 d4@11 ~", B: "~@3 bb3", C: "a3@5 ~@7", D: "~@8 d3 f3 a3@2 f3@2 d3@2",
  E: "~@9 [c4,f4]@14 ~, ~@17 a3@27 ~@4", F: "~@18 bb2@3 c3@3 d3@6 f3@2 g3@3 ~ g3@3 f3@3 d3@3 c3@3, ~@36 f3 ~@11",
  G: "f2@5 ~", H: "[~@30 [c4,e4]@9 a3@3 g3@3 gb3@28 ~@5 e4@3 c4@3 e4@12]/2", I: "~@4 f3@2 d3 f3", J: "e3@11 ~@13",
  K: "~@15 f4@3 d4@3 a3@3 d4@9 a3 ~@2 a4@3 f4@3 d4@3 b3@3, ~@12 a4@5 ~@31", L: "~@12 f3@29 ~@7, c4@41 ~@7",
  M: "~@18 d4@19 ~@11", N: "f3@21 ab3 a3@2 c4@6 ~ g3@2 f3@2 ~ g3@4 ~@2 g3@6, ~@15 a3 ~@8", O: "~@2 bb4@3 g4@2 f4 c4@8",
  P: "[~@12 bb4@3 g4@3 f4@3 c4@9 ~ f4@2 ~@3 a3@23 ~@13 e4@3 a4@3 c5@3 ~@3 a4@2 c5@2 a4@2 e4@4 ~@2]/2",
  Q: "e4@31 ~@8 g4@3 g4@2 ~ g4@2 ~", R: "g4@5 ~ bb3@2 ~ bb3@2 ~@4 bb3@2 ~ bb3@15 ~@6 g4@3 a4@2 ~ a4@2 ~",
  S: "a4@5 ~ c4@2 ~ c4@3 ~@3 c4@2 ~@4 c4@3 d4@3 f4@2 g4@3 ~@4 d4@2 ~ f4@2 ~ g4@2 ~ c5@2 ~",
  T: "d5@3 eb5@2 ~@4 f5@2 ~ d5@2 ~ c5@2 ~ d5@2 ~ c5 ~@2 ab4@2 ~@2 f4 ~ g4@3 f4@2 ~ g4@2 ~@2 g4@2 ~@3 f4 g4 ~, ~@27 g4@2 ~@19",
  U: "f4 ~",
})).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@4 ~@4 G D E F@4 ~@3 H I J K L@6 M@2 F@4 ~@4 G D E N@6 O@2 P Q@4
>`.pickRestart({
  A: "f4/2", B: "[e4@73 ~@5 d4@15 e4@3]/2", C: "f4@29 bb3@6 d4@6 f4@7", D: "e4 a4", E: "d5",
  F: "[c5@86 ~@9 bb3@48 a3@46 ~@3]/4", G: "~@29 bb3@6 d4@6 f4@7", H: "~@3 a3", I: "g3", J: "a3", K: "f3 bb3",
  L: "[a3@25 ~@47 a4@23 ~ f4@3 g4@3 f4@3 g4@3 bb4@29 ~ g4@6 [c4,e4]@43 ~@5 gb4@47 ~ [bb3,d4]@48, ~@36 a3@155 [c4,e4]@48 f4@49, ~@16 d4@32 a4@33 ~@15]/6", // C Bb C
  M: "[[c4,e4,g4]@24 [d4,f4]@20 ~@4 [a3,d4,f4]@47 ~, ~@24 a4@71 ~]/2", // C Dm
  N: "[c5@86 ~@9 bb3@48 a3@46 ~@2 d4@24 e4@24 f4@13 g4@11 a4@25]/6", O: "[f4@25 bb4@67 ~@4]/2",
  P: "~@6 [a4,a5] [g4,g5]", Q: "[~@2 [f4,f5]@6 [e4,e5]@7 [d4,d5]@29 [e4,e5]@29 [f4,f5]@106 ~@13]/4",
})).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@7 D@2 E@3 F@3 G H I@3 J@2 K@5 ~@3 C@7 D@2 L@2 M@5>".pickRestart({
  A: "[~@48 a4@47 ~@49 [a3,e4]@24 ~ bb3@12 ~@11 [f3,bb3]@47 e4, a3@139 ~@5 gb3@48 ~@48, [d4,f4]@95 g4@49 ~@96, ~@95 e4@45 ~@28 d4@72, ~@96 c4@73 ~@12 a3@58 ~]/5", // A5 Bb5 Dm
  B: "[c4@24 bb3@23 ~ b3@47 ~@19 g3@17 ~@4 g3@8 ~@24 d4@73 [g3,a3,c4]@48, g3@48 a3@80 ~@3 a3@12 bb3@92 ~@53, a3@5 ~ f4@66, ~@24 d4@72 c4@143 ~@49]/6", // Am7
  C: "[bb3@47 ~ c4@23 ~@25 b3@48 ~@18 g3@19 a3@11 ~@23 d4@73 [g3,a3,c4]@47 bb3, ~@47 e4@24 bb3@24 ~ a3@67 ~@29 bb3@92 ~@52, ~@48 g3@49 ~@239, ~@48 a3@20 ~@3 d4@72 ~ c4@143 ~@49, ~@3 f4@11]/7", // Am7
  D: "[d4@24 a3@12 g3@11 ~@24 db4@24 ~, ~ c4@2 ~, ~@47 a3@49]/2",
  E: "[[bb3,d4]@23 e4@24 g4@13 ~@12 db4@24 [bb3,d4]@24 [c4,e4]@11 ~ d4@12, ~@23 c4@49 ~@72, ~@47 a3@49 ~@35 bb3@12 ~, ~@60 f4@61 ~@23]/3", // Bb C
  F: "[c4@23 db4@24 d4@36 ~@12 a3@25 ~@12 [f3,f4]@12, a3@47 bb3@49 ~@48, ~@7 c4@3 ~@2]/3", G: "[f4,f5]",
  H: "[d4,d5]@2 ~ e5@2 ~ d5@2 ~ e4@3 [f4,f5]@30 [d4,d5]@6, ~@2 e4@3 d4@3 e5@4 ~@36", // D F D
  I: "[[e4,e5]@24 [c4,c5]@23 ~ a3@36 [d4,d5]@9 ~@3 [d5,d6]@36 [f5,f6]@12, ~@47 a4@38 ~@8 [b4,b5]@2 [db5,db6]@2 ~@47, ~@47 [c5,c6] ~@24]/3", // E C D F B Db C
  J: "[[e5,e6]@12 [c5,c6]@12 [a4,a5]@12 [g4,g5]@6 [f4,f5]@4 ~@2 [a5,a6]@45 ~@3, ~@23 f6 ~@24, ~@47 g6@2 ~@47]/2", // E C A G F A
  K: "[a3@18 g3@19 a3@11 ~@23 d4@73 [g3,a3,c4]@48 ~@48, f4@97 ~@23, c4@143 ~@97, ~@12 bb3@23 ~@25]/5", // Am7
  L: "[[bb3,d4]@13 [g3,c4,e4]@33 ~@2]/2", // Bb C
  M: "[~@36 db4@27 ~ g4@28 [e4,a4]@29 [g3,a3,c4,f4]@95 ~@24, ~@9 f3@82 ~@149, ~@9 f4@53 ~@178, ~@9 c4@26 ~@29 d4@57 ~@119, ~@5 a3@27 bb3@26 ~@62]/5", // A5 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]@11 ~ [a3,d4,f4]@6 [c4,e4,g4]@6 [db4,f4,a4]@24, a4 ~@7", // F5 Dm C Dbaug
  C: "~@2 g4 [f4,bb4,d5] [e4,a4,c5]@2 [d4,g4,bb4]@2, ~@11 d4@7 ~@30, ~@11 bb4@4 ~@33", // Bb Am Gm
  D: "[c4,a4]@2 [a3,d4,f4] [c4,e4,g4] [db4,f4,a4]@4, f4@7 ~@41", E: "[~@10 c4@26 a4@27 g4@29 a4@135 ~@13]/5",
})).s("gm_flute").gain(0.33)

// other · alto sax
const alto_sax = note("<A@6 ~@12 B C@2 ~@7 D E ~@18 B C@2 ~@8 F G@4>".pickRestart({
  A: "[~@23 a4@109 ~@12]/6", B: "~@6 d4 f4", C: "[g4@6 e4@18 f4@23 ~ a4@23 ~@25, ~@47 g4@2 ~@47]/2",
  D: "~ f3 a3 c4 db4@4", E: "d4@35 c4@13", F: "~@3 f3", G: "[~ a3@14 g3@29 a3@29 c4@106 ~@13]/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 I J K@2 ~@9 B@2 ~@8 L M@4>".pickRestart({
  A: "[~@23 a4@109 ~@12]/6", B: "[~@18 a3@6 bb3@6 d4@6 f4@6 a4@53 ~]/2", C: "~@3 a4", D: "g4",
  E: "f4@36 g4@5 ~ a4@2 g4@4", F: "~ f4@11 e4@12 d4@12 c4@11 ~, ~ g3@47", G: "[f3,c4] ~", H: "~@12 a3@10 ab3 g3",
  I: "gb3@19 ~@5", J: "~ bb3@47, d4@47 ~", K: "[~ [c4,e4]@23 f4@23 ~@2 a4@47, ~ d4@3]/2", L: "~@36 a4@7 g4@5",
  M: "[~ f4@7 e4@7 d4@14 bb3@15 e4@15 c4@14 f4@107 ~@12]/4",
})).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@2 ~@2 I B@2 ~@5 C ~ D@2 B@2 ~@4 J@2 K@5
>`.pickRestart({
  A: "[~@12 a3@12 bb3@23 ~@37 a3@9 g3@3, ~@47 b3@49]/2", B: "[f3@18 a2@18 a3@9 g3@3 f3@19 g2@29, c4]/2", C: "d2@3 ~",
  D: "[~@12 a3@12 bb3@23 b3@37 a3@9 g3@3]/2", E: "[~@6 a2@3 c3@3 f3@24 e3@10 ~@2]/2", F: "~@9 f2@3 a2@5 c3@6 ~ db3@24",
  G: "~ d3@23 ~@24", H: "[~@24 a3@20 ~ g3@2 gb3@25 ~@24, ~@22 ab3 ~@25]/2", I: "~@12 a3@3 g3", J: "[d4@31 ~]/2",
  K: "[~@9 f2@26 a2@28 bb2@29 c3@28 ~@2 c3@106 ~@12]/5",
})).s("gm_trombone").gain(0.44).pan(0.7)

// other · vibraphone
const vibraphone = note(`<
  ~@56
  [~@25 db5 a4 db5 ~@3 a4 ~ db5 ~ a4 db5 a4 db5 a4 db5 ~ a4 db5 a4 db5 a4 db5, ~@15 db5 ~@8]
  [a4 d5 ~@46]
  ~@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 ~@18 x ~@6 x ~@21", I: "~@3 x ~@8 x ~@3", J: "~@9 x ~@5 x ~@28 x ~@3", K: "~@18 x ~@6 x ~@22",
})).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: "~@9 x!4 ~@35", G: "~@13 x ~@34", H: "~@23 x ~@24", I: "~ x ~@13 x ~@8", J: "~@7 x ~@3 x ~@36",
// … 60 more lines

More by Paul McCartney