Strudelify
Ebony and Ivory cover art

All The Best

Ebony and Ivory

Paul McCartney

KeyE majorTempo81 bpm
0:00/0:00
// Ebony and Ivory — Paul McCartney
// 81 bpm, 4/4, key E 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 78 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(81/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 · epiano2
const epiano2 = note(`<
  ~ A B C D E F G H G I J G K L M N O P Q F R S T U V W X Y Z AA AB AC AB AD AE AF AG AH AI AJ AA AK AL AM AN AO AP AQ
  AR AS@2 AT AU AV AW AX AY AZ AY AQ BA BB U BC BD BC U BC U BC U BE BF BG BH BI BJ
>`.pickRestart({
  A: "~ [c#4,e4,g#4] [b3,d#4,f#4] [b3,d#4,g#4]", B: "[b2,c#4,e4,a4]@3 a3@3 b3@2, ~@3 [b2,c#4,f#4]@5", C: "[g#3,b3,e4]",
  D: "[a3,b3,e4]@10 [c#4,e4,a4]@5 ~", E: "[b3,e4,g#4]@15 ~", F: "[a3,c#4,f#4]", G: "[b3,e4,g#4]",
  H: "[a3,c#4,f#4]@10 [c#4,e4,a4]@5 ~", I: "~ [c#4,e4,g#4] [b3,d#4,f#4] [b3,d#4,g#4], b2",
  J: "[b2,c#4,e4,a4]@3 [b2,a3,c#4,f#4]@5", K: "[c#4,e4,g#4]@7 ~ [b3,d#4,f#4]@7 ~",
  L: "c#4@4 a4@2 b3@5 ~ b3@2 ~@2, [a3,e4]@3 [e4,g#4]@5", M: "~@12 b3@3 ~, [g#3,e4], b3@11 ~@5, ~@8 g#4@7 ~",
  N: "[b3,d#4,f#4]", O: "[d4,f#4,a4]@7 ~ [b3,d4,f4,g#4]@8", P: "g#4 b4 [c#4,f#4,a4]@2, [c#4,f4]@7 ~@9",
  Q: "[a3,c#4,e4]@11 ~ [a3,c#4,e4]@4", R: "[g#3,b3,e4]@11 ~ [b3,e4,g#4]@4", S: "f#4@12 a4@3 ~, [a3,c#4]@15 ~",
  T: "[b3,e4,g#4]@12 [b3,e4]@3 ~", U: "[a3,c#4,e4]@11 ~ [c#4,e4,a4]@3 ~", V: "b3@11 ~ b3@3 ~, [e4,g#4]@15 ~",
  W: "[a3,c#4,e4]@11 ~ [c#4,e4,a4]@4", X: "b3@11 ~ b3@4, [e4,g#4]",
  Y: "[b3,d#4,f#4]@4 [b3,d#4,f#4]@3 ~ [b3,c#4,f4]@8, c#4 ~@15", Z: "[a#3,c#4,f4]@13 [a#3,c#4,f4]@2 ~",
  AA: "[b3,d#4,f#4]@11 ~ [b3,d#4,f#4]@3 ~", AB: "[a#3,c#4,f4]@12 ~ [a#3,c#4,f4]@2 ~",
  AC: "[b3,d#4,f#4]@7 ~ [d#4,f#4,b4]@8", AD: "[b3,d#4,f#4]@11 ~ [d#4,f#4,b4]@3 ~",
  AE: "[a#3,c#4,f4]@11 ~ [a#3,c#4,f4]@3 ~", AF: "[a3,c#4]@8 [a3,c#4]@4 [a3,b3,d#4]@3 ~, b2, e4@3 ~",
  AG: "[b3,e4,g#4]@7 e4, ~@14 b3 ~", AH: "[g#3,c#4,e4] [b3,d#4,f#4]",
  AI: "[c#4,a4]@2 [b3,g#4]@2 [a3,c#4] ~ [b3,e4]@8 e4@2, ~@2 e4 g#3@5, ~@14 b3 ~", // F#m E A E5
  AJ: "[e4,g#4,b4]@10 [e4,g#4,b4]@2 ~ [e4,g#4,b4]@2 ~, f#4 ~@12 f#4 ~@2", AK: "[a3,d4,f#4]@7 ~ [b3,d4,f4]@7 ~",
  AL: "~@4 b4@3 ~ [c#4,f#4,a4]@7 ~, [c#4,f4]@7 ~@9", AM: "~@8 f#4@7 ~, [a3,c#4]@15 ~",
  AN: "[a3,c#4,e4]@11 ~ [a3,c#4,e4]@3 ~", AO: "[b3,e4,g#4]@5 [b3,e4,g#4] b3 [e4,g#4]",
  AP: "[a3,c#4,e4]@3 ~ [a3,c#4,e4] ~ [a3,c#4,e4]@5 ~ [a3,c#4,f#4]@3 ~", AQ: "[b3,e4,g#4]@12 [b3,e4,g#4]@3 ~",
  AR: "[a3,c#4,e4]@5 ~ [a3,c#4,e4]@5 ~ [a3,c#4,f#4]@3 ~", // A F#m
  AS: "[[b3,e4,g#4]@11 ~ [b3,e4,g#4] ~ [a3,c#4,e4]@8 [a3,c#4,e4]@6 [a3,c#4,f#4]@3 ~]/2", // E A F#m
  AT: "[b3,d#4,f#4]@4 [b3,e4,g#4] ~ [b3,e4,g#4]@9 ~", AU: "[c#4,d#4,f#4]@7 ~ [b3,c#4,f4]@7 ~",
  AV: "[a3,c#4,e4]@7 [c#4,e4], ~@14 a3 ~", AW: "[a3,c#4,e4]@7 ~ [a3,c#4,e4]@3 ~ [a3,d#4,f#4]@3 ~",
  AX: "[a3,d#4,f#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4]@9 ~", AY: "[a3,c#4,f#4]@5 ~ [a3,c#4,e4]@9 ~",
  AZ: "~@2 [b3,e4,g#4]@3 ~ [b3,e4,g#4]@9 ~", BA: "[a3,c#4,e4]@11 ~ [a3,e4] ~ [d#4,f#4]@2, ~@12 c#4@2 b3 ~",
  BB: "[b3,e4,g#4]@5 ~ [b3,e4,g#4]@9 ~", BC: "[b3,e4,g#4]@11 ~ [b3,e4,g#4]@3 ~",
  BD: "[a3,c#4,e4]@10 [a3,c#4,e4] ~ [c#4,e4,a4]@3 ~", BE: "[b3,e4,g#4]@9 ~ [b3,e4,g#4] ~@3 [b3,e4,g#4] ~",
  BF: "[a3,c#4,e4]@10 b4@2 [e4,f#4,g#4] ~ [f#4,b4] ~, ~@10 f#4 ~@5", // A E B5
  BG: "[b3,e4,g#4]@7 ~ [b3,e4,g#4] ~ [b3,e4,g#4]@2 ~@2 [b3,e4,g#4]@2", // E
  BH: "[a3,c#4,f#4]@9 ~ [c#4,e4,a4]@2 ~@2 [c#4,f#4,a4]@2, ~@10 f4 ~@5", // F#m A F#m
  BI: "[b3,e4,g#4,b4]@8 ~@2 [b3,e4,g#4]@2 ~@2 [a3,c#4,e4] ~", BJ: "[a3,c#4,e4] ~@7",
})).s("gm_epiano2").gain(0.25).pan(0.6)

// bass · electric bass finger
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 W Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU
  AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW ~
>`.pickRestart({
  A: "b1", B: "b2@3 b1@5", C: "e1@3 g#1", D: "f#1@3 b1", E: "e1@12 g#1@2 b1 ~", F: "f#1@11 ~ b1@4", G: "e1@5 ~ g#1@2",
  H: "f#1 b1", I: "e1!2", J: "b1@15 b1", K: "b1@3 b2@5", L: "e1@11 e1 g#1 ~ b1 ~", M: "c#2@5 ~ c#2 ~ b1@5 ~ b1!2",
  N: "a1@3 a1 c#2@2 e2@8 g#1 [a1,b1]", O: "e1@2 e1 g#1", P: "b1@6 b1@2 b1@4 b1 ~ c#2 ~", Q: "d2@2 d3@2 d2@2 d3 d2",
  R: "c#2@4 f2@4 f#2@7 f#2", S: "f#1@6 f#1@2 f#1@6 c#2 c2", T: "b1@4 b2@4 b1@2 b1 ~ b1 ~ b1 ~",
  U: "e2@4 c#2 ~@5 b1@2 g#1 f#1 e1@2", V: "f#1@6 c#2 c2 b1 ~ b1@2 b2@4", W: "e2@3 e2 c#2 ~@5 b1@2 g#1 f#1 e1@2",
  X: "f#1@3 f#1 ~@2 c#2 c2 b1 ~ b1 ~ b1@3 c#2", Y: "f#1@3 f#1 f#1@2 c#2 c2 b1 ~ b1 ~ b1@3 c#2",
  Z: "e2@3 e2 c#2@3 c#2 b1@3 b1 g#1 f#1 e1@2", AA: "c#3 c#2!3 c#3!4", AB: "f#2@3 f#2 d#2 ~@3 c#2@2 c#2@2 a#1 g#1 f#1@2",
  AC: "g#1@2 g#1 g#2@3 g#1@2 c#2 ~ c#2@2 c#3@4", AD: "f#2@2 f#2!2 d#2 ~@3 c#2 ~ c#2@2 a#1 g#1 f#1@2",
  AE: "g#1@2 g#1!2 g#1@2 g#1!2 c#2 ~ c#2 ~ c#2@2 c#2 d#2", AF: "f#2@2 f#2@5 d#2 ~@2 c#2@2 a#1 g#1 f#1@2",
  AG: "g#1@3 g#1 d#2@2 d2 c#2 ~ c#3 c#2@2 c#3@2 c#2@2", AH: "f#2 ~ f#2@2 d#2@3 d#2 c#2 ~ c#2@2 a#1 g#1 f#1@2",
  AI: "b2@2 b1@2 b1@3 b1 b2@7 b2", AJ: "e2@8 e1@4 g#1 ~ b1 ~", AK: "c#2@6 c#2@2 b1@6 b1!2", AL: "a1@3 a1 c#2@2 e2@9 ~",
  AM: "e1@8 e2@3 c#2 g#1 ~ a1@2", AN: "b1@2 b1@2 b1@2 b1@2 b1@3 b1 b1@2 b1@2", AO: "d2@4 d3@4 d2@2 d2 d3@4 d2",
  AP: "c#2 f2 f#2@2", AQ: "f#1@6 f#2!2 f#1@4 f#1@4", AR: "a1@2 b1@2 b1@4 b1@2 b2@2 b1!2 b2@2",
  AS: "e2@4 c#2 ~@5 b1 ~ g#1 f#1 e1@2", AT: "f#1@3 f#1 f#1@2 c#2 c2 b1@3 ~ b1@4",
  AU: "d2@4 c#2 ~@3 b1 ~ b1@2 g#1 f#1 e1@2", AV: "f#1@3 f#1 f#1@3 f#1 b1@2 b2@6",
  AW: "e2@3 e2 c#2@2 ~@2 b1 ~ b1@2 g#1 f#1 e1@2", AX: "f#1@4 f#1 a1 c#2 c2 b1@2 b1@2 b2@4",
  AY: "e2@2 e2!2 c#2@2 c#2!2 b1@2 b1!2 g#1 a1 a#1 b1", AZ: "c#2@2 c#2 c#3@5",
  BA: "f#2@2 f#2!2 f#2@2 f#2!2 f#2@2 f#2!2 f#2@2 c#2 c2", BB: "b1 b2 b1 b2",
  BC: "e2@2 e2!2 c#2@2 ~@2 b1@2 b1!2 g#1 f#1 e1@2", BD: "f#1@2 f#1!2 f#1@2 c#2 c2 b1!2 b1@2 b1@2 b1 c#2",
  BE: "e2@2 e2!2 c#2 ~@3 b1!4 g#1 f#1 e1@2", BF: "f#1!3 c#2@4 b1@2 b2@4 b2@3",
  BG: "e2@2 e2!2 c#2 ~@3 b1 ~ b1@2 g#1 f#1 e1@2", BH: "f#1@2 f#1 c#2@2 ~@2 c#2 b1 ~ b1@2 b2@3 b2",
  BI: "e2@3 e2 c#2@4 b1@3 b1 g#1 f#1 e1@2", BJ: "f#1@3 c#2@3 c2 b1 ~ b2 ~@2 b2@2 b1@2",
  BK: "e2@2 e2@2 c#2@2 c#2@2 b1@2 b1!2 g#1 f#1 e1@2", BL: "f#1@3 f#1 ~@2 c#2!2 b1@4 b1 c#2 e2 f#2",
  BM: "e2@3 e2 c#2 ~@3 b1@2 b1!2 g#1 f#1 e1@2", BN: "f#1@3 f#1 ~@2 c#2 c2 b1@2 b2 ~@2 b2@3",
  BO: "e2@3 e2 c#2@3 c#2 b1 ~ b1@2 g#1 f#1 e1@2", BP: "f#1@2 f#1 f#1@2 ~ c#2 c2 b1 ~ b1 ~ b1 c#2 e2 f#2",
  BQ: "e2@3 e2 c#2 ~ b1@4 b1@2 g#1 f#1 e1@2", BR: "f#1@2 f#1 f#1@2 ~ c#2 c2 b1 ~ b1@2 b1 c#2 e2 f#2",
  BS: "e2@3 e2 c#2 ~@3 b1 ~ b1@2 g#1 f#1 e1@2", BT: "f#1@3 f#1@2 ~ c#2 c2 b1 ~ b1@3 c#2 e2 f#2",
  BU: "e2@2 e2!2 c#2@2 c#2!2 b1 ~ b1@2 g#1 f#1 e1@2", BV: "f#1@3 f#1@3 c#2 c2 b1 ~ b1@2 b1 c#2 e2 f#2",
  BW: "e2@3 e2 c#2@3 c#2 b1!4 g#1 f#1 e1@2",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · piano
const piano = note("<~ A@2 B C D E B F G H I J K L@2 M N O P Q ~@57>".pickRestart({
  A: "[b1,b2]/2", B: "[g#3,b3,e4]@15 ~", C: "[a3,c#4]", D: "[g#3,b3]@2 ~ [e3,g#3,b3], ~ e2",
  E: "f#2@4 ~@8 e4@3 ~, [a3,c#4]@15 ~", F: "[a3,c#4]@15 ~", G: "~@3 e4, [g#3,b3]",
  H: "~@4 [c#4,e4]@3 ~ [b3,d#4]@3 ~ [b3,d#4]@4, [b1,b2]", I: "[a3,c#4,e4]@2 ~ [a3,c#4,e4]@5, b1, b2@3 ~ b2@12",
  J: "~@3 [g#3,b3], [g#3,b3]@3 ~, ~ e2", K: "[c#3,g#3,c#4,e4] [b2,b3,d#4]",
  L: "[[a3,c#4]@6 ~@4 e3 ~@5 [g#3,b3]@10 ~@4 [g#3,b3,e4]@2, ~@3 [g#3,b3,e4]@5 e4@7 ~, ~@11 e3@5 e3@12 e3@4, ~@3 e2@5, ~@13 [g#3,b3]@2 ~]/2", // A G#m E G#m
  M: "b3@3 b3 [b3,d#4]@2 [b2,f#3,b3]@2, b2@3 ~, d#4 ~", N: "[d3,a3,d4,f#4]@8 [b3,d4,f4]@7 ~",
  O: "[g#3,c#4,f4]@8 [a3,c#4]@4 [a3,c#4]@3 ~, ~@8 f#2@7 ~", P: "[a3,c#4]@2 [a3,c#4] [a3,c#4,e4], f#2",
  Q: "[a3,c#4,e4]@11 ~ c#4@2 ~@2, ~@12 b3 ~@3", // A
})).s("gm_piano").gain(0.28).pan(0.3)

// other · harmonica
const harmonica = note(`<
  ~@4 A B C D@2 E ~@6 F G H@2 I J K L C M@3 ~@9 N O P Q@2 ~@3 R ~ S T U V@3 W X@4 Y ~@8 Z AA AB AC@3 AD@2 AE@2 ~
>`.pickRestart({
  A: "~@6 d#5 e5", B: "e5@2 g#4@2 g#4@2 g#4@3 ~ g#4@5 ~", C: "a4@4 b4@2 c#5@5 ~ d#5@2 e5@2",
  D: "[e5@2 g#4 ~ g#4 ~ g#4@3 ~ b4@2 ~@2 a4@4 b4@3 ~ c#5@4 d#5@3 ~ d#5@2]/2", E: "~@2 e5@3 ~ e5@10",
  F: "~@13 [a#3,b3,c4] ~ b3", G: "b4 b4@2 ~@5",
  H: "[c#5@3 d5 ~ c#5@2 b4 b4@2 a4@2 f#4@2 g#4 a4@3 b4@2 g#4@2 a4@6 ~@2 f#4 g#4]/2",
  I: "a4@2 b4@2 c#5 ~ c#5@3 ~ [c#5,d5] ~@5, ~@10 b4@3 ~@3", J: "~@2 g#4@2 f#4@2 g#4@6 b4@3 ~",
  K: "a4@4 b4@2 e5@5 ~ d#5@2 e5 ~", L: "e5@2 g#4 ~ g#4 ~ g#4@3 ~ g#4@4 ~@2",
  M: "[e5@2 g#4@2 g#4 ~ g#4@4 b4@2 ~@2 a4@4 b4@2 ~@2 c#5@4 d#5@2 ~@2 d#5@4 e5@3 ~ e5@10]/3",
  N: "~@2 g#4@2 g#4 ~ g#4@6 ~@2 b4@2", O: "c#5@2 c#5 ~ d#5@2 e5@2 d#5@4 c#5@2 b4@2",
  P: "c#5@2 b4@2 b4@2 b4@6 ~@2 e4 f#4", Q: "[g4 [e4,f#4] f#4@2 ~@10 e5 d#5@2 ~ c#5 b4@5 ~@8]/2",
  R: "c#5@2 d#5@2 e5@2 e5@9 ~", S: "~@12 d#5@2 e5 ~", T: "e5@2 g#4 ~ g#4 ~ g#4@3 ~ g#4@6",
  U: "a4@4 b4@2 c#5@5 ~ d#5@2 e5 ~",
  V: "[e5@2 g#4@2 g#4@2 g#4@4 b4@2 ~@2 a4@4 b4@3 ~ c#5@4 d#5@3 ~ d#5@4 e5@4 e5@10]/3", W: "~@12 c#5@2 d#5 ~",
  X: "[e5@2 a4 ~ a4 ~ a4@3 ~ b4@2 ~@2 a4@4 b4@2 ~@2 c#5@4 d#5@3 ~ d#5@4 e5@3 ~ e5@8 c#5@4 b4@4 a4@7 ~ a4@2]/4",
  Y: "g#4@11 ~@5", Z: "~@11 g#5@4 a5", AA: "~ b5@7 ~@8", AB: "~@13 [g5,g#5] ~ a5",
  AC: "[b5 ~ c#6@8 b5 b5@10 ~@3 [f#5,g5] e5 f#5 ~ f#5@2 g#5 e5@4 ~@13]/3", // Gmaj7
  AD: "[~@13 g#5 ~ a5@2 c#6@2 b5 ~ b5@5 ~@6]/2", AE: "[~@6 [f#5,g5] e5 f#5@2 f#5 ~ g#5 e5 ~ e5@4 ~@13]/2",
})).s("gm_harmonica").gain(0.5).pan(0.6)

// other · pad poly
const pad_poly = note(`<
  ~ A B C ~@6 D E F ~@4 G H I J K ~@3 L@2 M N O ~@12 P Q@2 ~@5 R@3 N S T U V W X@2 ~@5 Y Z Y Z Y Z AA Z AB AC AD AE
>`.pickRestart({
  A: "~ g#5 f#5 d#5", B: "e5@3 c#5@5", C: "b4", D: "~@4 g#5@4 f#5@4 d#5@3 ~", E: "e5@3 f#5 e5 d#5 c#5@8 b4 c#5",
  F: "b4@15 ~", G: "a4 g#4", H: "g#4 b4 a4@2", I: "~@14 f#4 g#4",
  J: "a4@2 b4 ~ c#5@2 c#5@5 ~ [f#4,g#4] f#4 e4 f#4, ~@4 b4 ~ b4 ~@9", K: "g#4@15 ~, f#4 ~@15",
  L: "[~@14 [a4,c#5]@4 [b4,d#5]@3 ~ [c#5,e5]@3 ~ [d#5,f#5]@3 ~ [d#5,f#5]@2]/2", M: "~@2 [e5,g#5]@4 [e5,g#5]@9 ~",
  N: "[c#5,f#5] [c#5,f5]", O: "[a#4,c#5] ~@15", P: "a4 g#4, g#4 ~@15", Q: "[g#4 b4 a4@6, ~@4 a#4 ~@3 a#4 ~@23]/2",
  R: "[~@14 [a4,c#5]@4 [b4,d#5]@3 ~ [c#5,e5]@3 ~ [d#5,f#5]@3 ~ [d#5,f#5]@4 [e5,g#5]@3 ~ [e5,g#5]@9 ~]/3", // A B C#m D#m E
  S: "~@3 [a4,c#5] ~ [a4,c#5] ~ [a4,c#5]", T: "~@2 [b4,d#5]@3 ~ [c#5,e5]@3 ~ [d#5,f#5]@3 ~ [d#5,f#5]@2",
  U: "~ g#5 f#5 g#5@3 b5@2", V: "a5@2 b5 e6@5", W: "~@2 g#5@2 f#5 ~ g#5@6 b5@3 ~", X: "[a5@2 b5 e6@11 ~@2]/2",
  Y: "d#5@2 e5 d#5 ~@4 d#5@2 e5 d#5 ~@4", Z: "c#5!2 d#5 ~ c#5 ~ d#5 ~ c#5@2 d#5 e5 ~@4",
  AA: "d#5 ~ e5 d#5 ~@4 d#5 ~ e5 d#5 ~@4", AB: "f#5@2 g#5 f#5 ~@4 f#5@2 g#5 f#5 ~@4",
  AC: "e5!2 f#5 ~ e5 ~ f#5 ~ e5 ~ f#5 g#5 ~@4", AD: "f#5@2 g#5 f#5 ~@4 f#5 ~ g#5 f#5 ~@4", AE: "e5 ~@15",
})).s("gm_pad_poly").gain(0.42).pan(0.6)

// other · pad poly
const pad_poly_2 = note(`<
  ~ A B C ~@6 D E F ~@4 G H I J ~@7 K ~@8 L ~@4 M N O ~@5 P@3 Q R@2 S T S U@2 ~@3 V W X Y V Z V Y V AA V W V ~
>`.pickRestart({
  A: "~@4 e5@4 d#5@3 e5 b4@4, ~@12 d#5 ~@3", B: "c#5@3 a4@5", C: "g#4", D: "~@4 e5@3 ~ d#5@4 b4@4",
  E: "c#5@3 d#5 c#5 b4 a4@7 ~ g#4 a4", F: "g#4@15 ~", G: "f#4 f4", H: "f4!2 f#4@2", I: "a4@10 d#4 c#4 b3@2 d#4 c#4",
  J: "[c#4,e4]", K: "[d#4,g#4] [f4,g#4]", L: "e4@15 ~", M: "f#4 f4, f4 ~@15", N: "f4 c#4 f#4@2", O: "a4",
  P: "[~@14 c#4@4 d#4@4 e4@4 f#4@4 f#4@4 g#4@3 ~ g#4@9 ~]/3", Q: "[f#4,b4] [f4,b4]",
  R: "[~@14 c#4@4 d#4@3 ~ e4@4 f#4@4 f#4@2]/2", S: "~@2 g#4@2 f#4@2 g#4@5 ~ b4@3 ~", T: "a4@3 ~ b4 ~ e5@10",
  U: "[a4@3 ~ b4 ~ e5@20 ~@6]/2", V: "b4@2 c#5 b4 ~@4 b4@2 c#5 b4 ~@4", W: "a4!2 b4 ~ a4 ~ b4 ~ a4@2 b4 c#5 ~@4",
  X: "b4@2 c#5 b4 ~@4 b4 ~ c#5 b4 ~@4", Y: "a4!2 b4 ~ a4 ~ b4 ~ a4 ~ b4 c#5 ~@4",
  Z: "a4!2 b4 ~ a4 ~ b4 ~ a4@2 b4 c#5 ~@3 g#4", AA: "a4!2 b4 ~ a4 ~ b4 ~ a4 ~ b4 c#5 ~@3 g#4",
})).s("gm_pad_poly").gain(0.36).pan(0.2)

// other · pad poly
const pad_poly_3 = note("<~ A B C ~@6 A D E ~@6 F G ~@7 H I ~@7 J ~@18 K L M N ~@18>".pickRestart({
  A: "~@4 c#5@4 b4@4 g#4@3 ~", B: "a4@3 f#4@5", C: "e4", D: "a4@2 ~ b4 a4 g#4 f#4@7 ~ e4 f#4", E: "e4@15 ~",
  F: "~@10 g#3 f#3 e3@2 g#3 f#3", G: "e3", H: "[f#4,b4]@8 b4@7 ~", I: "g#4 ~@15", J: "g#4@15 ~",
  K: "~@2 e4@2 e4 ~ e4@5 ~ e4@3 ~", L: "e4@3 ~ e4 ~ e4@10", M: "~@2 e4 ~ e4 ~ e4@5 ~ e4@3 ~", N: "e4@3 ~ e4 ~ e4@8 ~@2",
})).s("gm_pad_poly").gain(0.25)

// other · banjo
const banjo = note("<~@28 A@5 B@3 C D ~@21 E@8 F@2 G@3 H@2 I ~@3>".pickRestart({
  A: "[~@8 c#4 ~ d#4 ~ f#4 d#4 ~ c#4@7 ~@2 g#3 ~ b3 ~ c#4 g#3 ~ f#3@6 ~@3 c#4 ~ f#4 d#4 ~ d#4@2 c#4@6 ~@3 g#3 ~ d#4 c#4 ~ g#3 ~ f#3@6 ~@3 c#4 ~ d#4 ~ f#4 d#4 ~ c#4]/5",
  B: "[c#4@5 ~@3 a#3 ~ b3 ~ c#4 g#3@2 f#3@5 ~@5 c#4 ~ f#4 d#4 d#4@2 c#4@5 ~@4 g#3 ~ g#3 ~ f#3 c#3@2 e3, d#4 ~@47]/3",
  C: "a3@5 g#3 ~ a3 b3@4 b3@4, f#3 ~@15", D: "g#4@7 ~@9, f#4 ~@15",
  E: "[~@8 b3 ~ c#4 ~ e4 c#4 ~ b3@6 ~@3 [f#3,g#3] ~ a3 ~ b3 f#3 ~ e3@6 ~@4 b3 ~ e4 c#4 c#4@2 b3@5 ~@5 a3 ~ a3 f#3@3 e3@7 ~@2 b3 ~ c#4 ~ e4 c#4@2 b3@4 ~@5 b3 ~ a3 f#3 ~ f#3@2 e3@4 ~@5 b3 ~ c#4 ~ e4 c#4 ~ b3@4 ~@5 f#3 ~ c#4 b3 ~ f#3 ~ e3]/8", // F#sus2
  F: "[e3@5 ~@3 b3 ~ c#4 ~@4 d#4@2 c#4@2 b3@2 a3@2 g#3@2 f#3@2 e3@2 d#3@2 [c#3,d#3], f#3 ~@31]/2", // C#sus2
  G: "[c#3@5 ~@3 f#3@2 a3@2 b3 c#4 ~ b3@4 ~@5 f#3 ~ c#4 b3 ~ f#3 ~ e3@5 ~@4 b3@4 b5@3 e5]/3",
  H: "[[e5,f#5] d#5 [d#5,e5] c#5 [c#5,d#5] b4@2 a4@2 g#4@2 f#4@2 e4@2 d#4@2 c#4@2 b3@2 a3@2 g#3@2 f#3@2 e3@2 d#3@2 c#3]/2", // Esus2 Emaj7 C#sus2
  I: "d#3 e3 ~@6",
})).s("gm_banjo").gain(0.42)

// other · flute
const flute = note("<~@20 A B ~@11 C D C E F ~@4 G H I J ~@32>".pickRestart({
  A: "~@12 b5 a5 g#5 a5", B: "b5@7 ~@9", C: "f6@2 f#6 f6 ~@4 f6@2 f#6 f6 ~@4",
  D: "d#6!2 f6 ~ d#6 ~ f6 ~ d#6@2 f6 f#6 ~@4", E: "f#5 c#5", F: "b4@3 ~", G: "f#4 f4", H: "c#4 f4 f#4@2", I: "f#4 e4",
  J: "c#5 d#5 e5 e5@5",
})).s("gm_flute").gain(0.22).pan(0.4)

// other · recorder
const recorder = note("<~@28 A@5 B@3 C D ~@21 E@8 F@2 G@3 H@2 I ~@3>".pickRestart({
  A: "[~@8 c#6 ~ d#6 ~ f#6 d#6 ~ c#6@7 ~@2 g#5 ~ b5 ~ c#6 g#5 ~ f#5@6 ~@3 c#6 ~ f#6 d#6 ~ d#6@2 c#6@6 ~@3 g#5 ~ d#6 c#6 ~ g#5 ~ f#5@6 ~@3 c#6 ~ d#6 ~ f#6 d#6 ~ [c#6,d#6]]/5", // C#sus2
  B: "[c#6@5 ~@3 a#5 ~ b5 ~ c#6 g#5@2 f#5@5 ~@5 c#6 ~ f#6 d#6 d#6@2 c#6@5 ~@4 g#5 ~ g#5 ~ f#5 c#5@2 [e5,f#5]]/3", // Esus2
  C: "a5@5 g#5 ~ a5 b5@4 b5@4", D: "g#6@7 ~@9, f#6 ~@15",
  E: "[~@8 b5 ~ c#6 ~ e6 c#6 ~ b5@6 ~@3 [f#5,g#5] ~ a5 ~ b5 f#5 ~ e5@6 ~@4 b5 ~ e6 c#6 c#6@2 b5@5 ~@5 a5 ~ a5 f#5@3 e5@7 ~@2 b5 ~ c#6 ~ e6 c#6@2 b5@4 ~@5 b5 ~ a5 f#5 ~ f#5@2 e5@4 ~@5 b5 ~ c#6 ~ e6 c#6 ~ b5@4 ~@5 f#5 ~ c#6 b5 ~ f#5 ~ [e5,f#5]]/8", // F#sus2 Esus2
  F: "[e5@5 ~@3 b5 ~ c#6 ~@4 d#6@2 c#6@2 b5@2 a5@2 g#5@2 f#5@2 e5@2 d#5@2 [c#5,d#5], f#5 ~@31]/2", // C#sus2
  G: "[c#5@5 ~@3 f#5@2 a5@2 b5 c#6 ~ b5@4 ~@5 f#5 ~ c#6 b5 ~ f#5 ~ e5@5 ~@4 b5@4 b7@3 [e7,f#7]]/3", // Esus2
  H: "[e7 d#7 [d#7,e7] c#7 [c#7,d#7] b6@2 a6@2 g#6@2 f#6@2 e6@2 d#6@2 c#6@2 b5@2 a5@2 g#5@2 f#5@2 e5@2 d#5@2 c#5]/2", // Emaj7 C#sus2
  I: "d#5 e5 ~@6",
})).s("gm_recorder").gain(0.22).pan(0.6)

// bass · drawbar organ
const bass_2 = note("<~@29 [~@4 d#2 ~@11]!8 ~@19 [~@4 d#2 ~@11]!2 [~ d#2 ~@2]!19 ~>")
  .s("gm_drawbar_organ").gain(0.48).pan(0.9)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@21 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 AP AQ AR AS AT
  AU AV AW AX AY AZ BA BB BC BD ~
>`.pickRestart({
  A: "[g#3,b3,e4]@2 ~@2 [b3,e4,g#4] ~ [b3,e4] [b3,e4,g#4]!2 ~ [b3,e4] e4 [g#3,b3,e4] [a3,b3,e4]!3", // E E5 E E5 E Asus2
  B: "[c#4,e4,a4] ~@2 e4 [c#4,e4,a4] ~ [c#4,e4,a4]!3 ~ [e4,a4] [c#4,e4,a4] [e4,a4,c#5]!4", // A A5 A
  C: "[e4,g#4,b4] g#4 ~@2 [b3,e4,g#4] ~ [b3,e4,g#4] b3 [b3,e4,g#4] ~ [b3,e4,g#4]!3 [b3,e4] [b3,e4,g#4]!2", // E E5 E
// … 213 more lines

More by Paul McCartney