Strudelify
No More Lonely Nights (Ballad reprise) cover art

Give My Regards To Broad Street

No More Lonely Nights (Ballad reprise)

Paul McCartney

KeyD minorTempo85 bpm
0:00/0:00
// No More Lonely Nights (Ballad reprise) — Paul McCartney
// 85 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 7, 4/4 at bar 8, 2/4 at bar 15, ...) 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 93 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: The whole transcription plays 18 ms ahead of the beat; the grid follows it, so its parts stay together.
setcpm(85/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(`<
  A B C D E F G@7 H@8 ~@3 I@2 J K L M N O@8 ~@3 P@4 Q@2 R@3 S@8 ~@4 T U T U V W X Y Z Y X AA AB@8 AC@4 AD@5 ~
>`.pickRestart({
  A: "[c3,g3,e4]@15 ~", B: "[f3,g3,bb3,d4,f4,bb4]", C: "[g3,c4,e4,g4]", D: "[d3,a3,d4,f4,a4]@3 [c3,c4,e4,g4]",
  E: "[bb2,bb3,d4,f4] [c4,e4,g4]", F: "[f3,c4]@6 [e3,db4]@9 ~, a3@15 ~",
  G: "[~@4 c4@3 ~ bb3@16 [g3,c4,e4]@15 ~ f4@16 e4@16 f4@12 [c4,f4,a4]@4 [bb3,f4]@8 [c4,e4,g4]@8 [f3,a3,c4]@5 ~ [e3,a3,db4]@2, a3@9 a3@4 ~, [f3,d4] f3@12 ~, ~ d4@8 d4@2 d4@3, ~@5 [bb4,d5]@4 ~@5]/7", // C F Bb5 C F A Dm Bb
  H: "[~@6 c4 ~ [f3,d4]@56, ~ a3@15, ~ [f3,d4] bb3@2 ~@12]/8", I: "[~ f4@3 [c4,e4]@3 ~, ~ d4@7]/2", J: "[bb3,d4,f4]",
  K: "[g3,c4,e4]", L: "[a3,f4]@3 [c4,f4,a4], d4", M: "[bb3,d4,f4] [c4,e4,g4]",
  N: "[f3,a3,c4]@5 ~ [e3,db4]@8 ~@2, ~@3 a3@5", O: "[~@2 c4 ~ [f3,bb3,d4]@8 ~@52, a3, [f3,d4] ~@15]/8",
  P: "[~ bb3@2 a3@2 g3@2 c3]/4", Q: "[~ [bb3,d4,f4]@2 [g3,c4,e4]]/2",
  R: "[~@8 f4@12 [c4,f4,a4]@4 [bb3,f4]@8 [c4,e4,g4]@8 [f3,a3,c4]@5 ~ [e3,a3,db4]@2, ~ a3@4 ~, ~ d4@2 d4@3]/3", // F Bb5 C F A
  S: "[~@8 f3 ~@3 c4@2 ~@2 [f3,bb3,d4]@16 ~@96, ~ a3@15, ~ d4 ~@14]/8", T: "~@7 [d5,f5]@9, ~@3 bb5@5",
  U: "~@7 [c5,e5]@9, ~@3 g5@5", V: "~@3 bb5@5, ~ f5@7, ~ d5@3", W: "~@3 g5@5, e5, ~ c5@3",
  X: "~@3 bb5@5, bb4, ~ d5@7, ~ f5@3", Y: "~@3 g5@5, g4, ~ e5@7, ~ c5@3", Z: "~@3 bb5@5, bb4, ~ f5@7, ~ d5@3",
  AA: "~@3 e5@5, g4, ~ c5@7, ~ g5@3",
  AB: "[~@26 eb5 db5 ~ db5 ~@13 db5@6 ~ bb5 ab5 eb5@4 db5 ~@5 ab5@16 ~@2 ab4@5 ~@8 db5 ab4 ~ ab4@16 ~@7 ab4 ~@2 bb4@2 db5 eb5 db5@2, ab4@27 ~ ab4@29 ~ db5@20 ~@8 ab4@6 eb5@2 ~ gb4@21 ~ eb5@2 ~@9, ~@2 db5@12 ab5@16 ~@30 ab4@18 ~ db4@41 eb4@8, ~@4 eb5@21 ~@5 eb5@13 ~@14 eb5@21 ~@9 db5 eb5 ab5@21 ~@6 ab5@2 db5@2 ~ ab4@2 ~@5, ~@3 db4@13 eb4@23 ab3@21 ~@4]/8",
  AC: "[ab4@12 ~@2 bb4@10 ~@2 gb4 ~ bb4 ~@3 gb4@2 ~@4 bb4@7 ~ ab4 ~@2 eb5@5 ab4@7 ~@3, db4@15 ab3@3 db4@5 ~@9, ~@12 gb4@2 ~@20 ab4@4 ~@9 bb4@7 ~@10, ~@13 ab4@13 ~ ab4@2 db5@3 ~@16 db5@8 ~@8]/4",
  AD: "[~@4 ab5 ~ db5@2 ~@2 bb4@8 ~@8 gb4 ab4@11 ~ gb4 ~ bb4@16 ~ db5 eb5 gb5 ab5 gb5 ~ bb5@15 ~, ~@2 eb6@2 ~@14 bb5@5 ~@57, ~@3 bb5@2 eb5@2 ~ eb5@10 ~ eb5@6 ~@38 eb5@16 ~, ~@10 db5@2 db4@7 eb4 ~@20, ~@21 ab4@6 ~@13 ab4@2 ~@38]/5",
})).s("gm_epiano1").gain(0.16)

// bass · fretless bass
const bass = note(`<
  ~ A B C D E F@3 G H I J@2 K L M N O P Q P R S T U V W X Y Z AA AB AC@2 AD AE AF AG AF AH AI@8 AJ@3 AK AL@2 AM AN AO
  AP@2 AQ@2 AR AS AT AU AV AW AX AY AZ BA BB BC BD BE@16 BF@2
>`.pickRestart({
  A: "f2@15 ~", B: "c2@15 ~", C: "d2@7 ~ d3@2 ~@2 c3@3 ~", D: "bb2@8 c3@7 ~", E: "f2@6 a2@7 ~ a1@2",
  F: "[d2@2 c2 ~ bb1@5 ~ f2 a2@8 ~ f2@4, ~@22 g2 ~@25]/3", G: "d2@2 f2 ~@3 d2@2 c2@8", H: "g2@4 c2@4 d2@7 ~",
  I: "d2@2 c2 ~ bb1@4", J: "[c2@8 f1@2 g1 ~ ab1 ~ a1@10 d2@4 c2@3 ~]/2", K: "bb1",
  L: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1@2", M: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  N: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ f2 g2 f2 ~", O: "bb1@3 ~ f1 g1 bb1@4 c2 ~ c2@2 f1 ~",
  P: "f1@3 ~ c2 ~ c2@2 a1 ~ a1 ~ f1 ~ f1 ~", Q: "bb1@3 ~ f1 g1 bb1@3 ~ c2 ~ c2@2 f1 ~",
  R: "bb1@3 ~ f1 g1 bb1@4 a1 ~ c2@3 ~", S: "d2@4 c2 d2 g1@4 g1 ~ a1@2 bb1@2", T: "c2 ~ c2 ~ c2@8 ~@2 g2@2",
  U: "b2@13 ~@3, a2 ~@15", V: "f1@7 ~ db2@2 f2 ~@3 d2@2", W: "c2@3 c2 g2@2 c2@2", X: "db2@6 d2@2 d2@4 c2@3 ~",
  Y: "bb1 c2", Z: "f1@2 g1 ~ ab1 ~ a1@10", AA: "d2@4 c2@2 ~@2 bb1 ~@7", AB: "~@4 f2@3 d2 bb1@2 bb1@2 bb1@2 bb1@2",
  AC: "[bb1 ~ bb1@2 ~ a1 g1@2 a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 c2 f1 ~ bb1@2 bb1@2 bb1@2 bb1@2, ~ bb1@5 ~@2]/2",
  AD: "bb1 ~@3 d2 e2 f1 ~@5 f1 ~ bb1@2, ~ bb1@3 bb1@3 ~", AE: "~@2 c2@2 c2 ~ f1 ~ f1@3 ~ c2 ~ c2@2",
  AF: "a1 ~ a1 ~ f1 ~ f1 ~@5 f1 ~ bb1@2, ~@4 bb1@3 ~", AG: "~@2 c2 ~ c2@2 f1 ~ f1@3 ~ c2 ~ c2@2",
  AH: "~@2 c2 ~ c2@3 ~ d2@4 d2 ~ g1@2",
  AI: "[~@2 g1 ~ a1@2 ~@2 c2@4 c2@4 c2 ~ c2@2 c2 ~ g1 a1 c2@4 c2 ~ c2@10 c2@4 c2 ~ c2@10 c2@4 c2 ~ c2@4 c2 ~ c2@4 c2@7 ~ c3 ~ c3 ~ c3@3 ~ f1@6 f1 ~ d2@3 ~ f1 ~ g1 ~ c2@6 c2 ~ g1@4 c2@3 ~ d2@6 d2 ~, ~@3 bb1@61]/8",
  AJ: "[d2@4 c2@3 ~ bb1@6 ~@2 c2@4 c2@3 ~ f1 ~ g1 ~ ab1 ~ a1@4 a1 ~ c2@2 db2@2 d2@4 c2@2 ~@2, ~@7 bb1@17]/3",
  AK: "bb1@10 ~@2 bb2@3 [e2,g2]", // Em
  AL: "[bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 ~ a1 g1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 c2 a1 f1, ~@3 bb1@5]/2",
  AM: "bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 ~@2 bb2@3 g2, ~@5 bb1@3", AN: "bb1@2 bb1@2 bb1@2 bb1@2 bb1 ~ c2@2 c2 ~ f1@2",
  AO: "f1@3 ~ c2 ~ c2@2 a1 ~ a1 ~ f1@2 f1 ~",
  AP: "[~@6 a1@3 ~ c2@2 c2 ~ f1@2 f1@3 ~ c2 ~ c2@2 a1 ~ a1 ~ f1@2 f1 ~, bb1]/2",
  AQ: "[bb1@6 bb1@4 ~@2 c2@3 ~ db2@4 d2 ~ g1@4 g1 ~ a1@2 bb1@2, ~@5 bb1@10 ~]/2", AR: "c2 ~ c2 ~ c2@10 ~@2",
  AS: "c2@3 c2!2 ~ c2@9 ~", AT: "c2@4 c3@2 c2@6 c3@3 ~", AU: "c2@4 c2 ~ c3@3 ~ b1 ~ c2@4",
  AV: "c2@4 c2@2 ~@2 bb2 c3@2 ~ g2 a2@3", AW: "g2@3 c2!2 ~ g2@8 g1 a1", AX: "c2@4 c2 ~ c2@9 ~",
  AY: "c2@2 c3 c2@2 c3 c2@2", AZ: "c2@2 c3 g2 c3@2 g1 a1", BA: "c2@3 c2!2 ~ c2@6 ~@2 g1 ~",
  BB: "c2@3 c2 ~@2 c2@4 ~@2 [g2,a2] ~ a2@2, ~@14 g2 ~", BC: "c2@3 c2!2 ~ c2@6 c2 ~ g1 ~", BD: "c2@4 c3@2 g2 ~ c3@8",
  BE: "ab1@2 ~ ab1 ab1@3 ~", BF: "[ab1@31 ~]/2",
})).s("gm_fretless_bass").gain(0.37).pan(0.4)

// chords · piano
const piano = note("<~@13 A B C D E F@4 G@8 H I@7 J@2 K@8 ~@5 C L M N@4 O@8 P Q@2 R@2 S T ~@18>".pickRestart({
  A: "~@6 db4@2 [f3,a3,d4] ~@3 [e3,g3,c4] ~@3, ~@3 a2@5 ~@8, ~ db3 ~@2, ~@5 a3@3 ~@8", // Dm C
  B: "f3@2 ~ [bb3,d4,f4] [bb3,d4,f4]@4", C: "c4 ~ [c4,e4] ~ [bb2,g3,c4,e4] ~ [bb2,g3,c4,e4]@5 ~ [bb2,g3,c4,e4]@2 ~@2",
  D: "c4 ~ [a2,c4] ~ [a2,a3,c4,f4] ~ [a2,a3,c4,f4]@5 ~ [a2,a3,c4,f4]@2 ~@2", // Am F
  E: "[f3,bb3,d4]@3 ~ [f3,a3,c4] ~ [f3,bb3,d4]@5 ~ [f3,a3,c4]@3 ~", // Bb F Bb F
  F: "[[bb1,bb2]@2 [f3,bb3,d4] ~ [f3,a3,c4]@3 ~ [f3,bb3,d4] ~ [g3,c4,e4]@3 ~@3 [f1,f2]@3 ~ [c2,c3]@2 [g3,c4]@2 [a1,a2]@2 e3@2 ~@2 f3@4 [bb1,bb2,bb3,d4] ~ [bb1,bb2,f3,c4]@4 [bb1,bb2,bb3,d4] ~ [bb1,bb2,g3,c4,e4]@3 ~@3 [f1,f2]@3 ~ [c2,c3]@2 [g3,c4]@2 [a1,a2]@2 e3@2 ~@2 [c3,f3]@2, ~@2 [bb1,bb2]@5 a3@6 a3@5 a3@5 a3@6 a3@3, ~@14 [c4,f4]@4 ~@10 [f1,f2]@5 ~@13 [c4,f4]@4 ~@10 [f1,f2]@4, ~@15 c3 ~ f3 ~@2 f3@11 ~]/4", // Bb F Bb C F C C5 A …
  G: "[~@2 [bb1,bb2,bb3,d4] ~ [bb1,bb2,f3,c4]@4 [bb1,bb2,bb3,d4] ~ [bb1,bb2,g3,c4,e4]@4 ~@2 [d2,d3]@5 ~ [g1,g2,g3,bb3]@8 ~@2 [c2,c3,bb3,f4] ~ [c2,c3,f4] ~ [c2,c3,bb3,d4,f4]@12 [c2,c3,g3,c4,e4]@13 ~@67, ~ f3 a3@5 a3@47 ~@10, ~ f3@15, ~@7 d4@4 d4@5 d4!2 ~@46, ~@14 f4@5 ~@109]/8", // Bb Bbsus2 Bb C7 D Gm Fsus4 F5 …
  H: "~@7 db4, ~@11 a2@5, ~@3 db3, ~@13 a3@3",
  I: "[~@4 [e3,g3,c4] ~@9 [bb3,d4,f4]@2 [bb3,d4,f4]@8 c4 ~ [c4,e4] ~ [bb2,g3,c4,e4] ~ [bb2,g3,c4,e4]@5 ~ [bb2,g3,c4,e4]@2 ~@2 c4 ~ [a2,c4] ~ [a2,c4,f4] ~ [a2,a3,c4,f4]@6 [a2,c4,f4]@2 ~@2 [f3,bb3,d4]@3 ~ [f3,c4] ~ [f3,bb3]@6 c4@3 ~ [bb1,bb2]@2 f3@2 [bb1,f3]@4 bb3 ~ [g3,c4,e4]@3 ~@3 [f1,f2]@3 ~ [c2,c3]@2 [g3,c4]@2 [a1,a2]@2 e3@2 ~@2 f3@4 [bb1,bb2,bb3] ~ [bb1,bb2,f3,a3,c4]@4, a3@20 ~@2 a3 ~@3 a3@4 a3@4 a3@4 [bb2,a3]@5 a3@6 a3@5 ~@2, d4@7 ~@24 d4@6 d4@3 d4@13 d4@3, f3@8 f3@8 ~@52 f3@6 bb3 ~ c4@3 ~ f3@22 c3@2 ~@2 f3@2 ~@4, ~@86 [c4,f4]@4 ~@10 [f1,f2]@5 ~@7]/7", // C Bb C C7 Am F Bb F5 …
  J: "[[bb2,bb3] ~ [bb1,bb2,g3,c4,e4]@3 ~@3 [f1,f2]@3 ~ [c2,c3]@2 [g3,c4]@2 [a1,a2]@2 e3@2 ~@2 f3@4 [bb1,bb2,bb3] ~ [bb1,bb2,f3,a3,c4]@4, d4@13 d4@3, f3@11 c3 ~ f3 ~@2, bb1 ~@2 a3@6 a3@5 ~@2, ~@3 [c4,f4]@2 ~@5 [f1,f2]@2 ~@4]/2", // Bb C7 F C C5 A Bb F …
  K: "[[bb1,bb2,bb3] ~ [bb1,bb2,g3,c4,e4]@4 ~@2 [d2,d3]@5 ~ [g2,g3,bb3]@8 ~@2 [c2,c3,bb3,f4] ~ [c2,c3,f4] ~ [c3,bb3,d4,f4]@12 [d4,f4,a4]@6 [f4,a4]@9 ~ [c4,e4,g4]@5 ~ [c4,e4,g4]@8 ~@2 [d4,f4,a4]@6 [f4,a4]@7 ~@3 [c4,e4,g4]@3 ~ c4@2 c3@2 c5@2 c3@2 a4@3 ~@25, f3, d4@3 a3@33 ~@28, ~@3 d4@4 d4@5 d4!2 ~@9 d4@13 ~@3 d4@21 ~@4, ~@6 f4@5 ~@3 g1@4 ~@10 c2@5 ~@7 c2@16 ~@72]/8", // Bb C7 D Gm Fsus4 F5 Bb Dm …
  L: "c4 ~ [a2,c4] ~ [a2,a3,c4,f4] ~ [a2,a3,c4,f4]@6 [a2,c4,f4]@2 ~@2, ~@3 a3", // Am F
  M: "[f3,bb3,d4]@3 ~ [f3,c4] ~ [f3,bb3]@5 ~ [f3,a3,c4]@4, ~ a3@2 ~, ~@3 d4@5", // Bb F5 Bb5 F
  N: "[[bb1,bb2]@2 [f3,bb3] ~ [f3,c4]@3 ~ [f3,bb3] ~ [g3,c4,e4]@3 ~@3 [f1,f2]@3 ~ [c2,c3]@2 [g3,c4]@2 [a1,a2]@2 e3@2 ~@2 [c3,f3]@2 ~@2 [bb1,bb2,f3,bb3] ~ [bb1,bb2,f3,c4]@3 ~ [bb2,f3,bb3] ~ [bb2,g3,c4,e4]@3 ~@3 [f1,f2]@3 ~ [c2,c3]@2 [g3,c4]@2 a2@2 e3@2 ~@2 [c3,f3]@2, ~ d4@3 d4@13 d4@3 d4@12, ~@2 [bb2,a3]@5 a3@6 a3@5 a3@5 a3@6 a3@3, ~@4 bb1@4 ~@6 [c4,f4]@4 ~@10 [f1,f2]@5 ~@7 bb1@2 bb1@22, ~@46 [c4,f4]@4 ~@6 a1 ~@3 [f1,f2]@4]/4", // Bb Bb5 F5 Bb5 C F C C5 …
  O: "[~@2 [bb2,f3,bb3] ~ [bb1,bb2,f3,c4]@3 ~ [bb2,f3,bb3] ~ [bb1,bb2,g3,c4,e4]@4 ~@2 [d2,d3]@5 ~ [g2,g3,bb3]@8 ~@2 [c2,c3,bb3,f4] ~ [c2,c3,f4] ~ [c3,bb3,d4,f4]@12 [d4,f4,a4]@6 [f4,a4]@9 ~ [c4,e4,g4]@5 ~ [c4,e4,g4]@8 ~@2 [d4,f4,a4]@6 [f4,a4]@7 ~@3 [c4,e4,g4]@3 ~@3 [c4,e4,g4]@9 ~ [d4,f4,a4]@6 [d4,f4,a4]@10, ~ d4@3 d4@3 d4@4 d4@5 d4!2 ~@9 d4@13 ~@3 d4@13 ~@8, ~ bb1 a3@5 a3@57, ~@8 bb1@2 ~@4 f4@5 ~@3 g1@4 ~@10 c2@10 ~@2 c2@15 ~@49 c2@13 ~@3]/8", // Bb5 Bbsus2 Bb5 C7 D Gm Fsus4 F5 …
  P: "[c4,e4,g4]@5 ~ [c4,e4,g4]@8 ~@2", Q: "[[d4,f4,a4]@6 [f4,a4]@7 ~@3 [c4,e4,g4]@3 ~@3 [c4,e4,g4]@10, ~@3 d4@13]/2",
  R: "[[d4,f4,a4]@6 [f4,a4]@9 ~ [c4,e4,g4]@5 ~ [c4,e4]@8 ~@2, c2@6 ~@5 g4@5, ~@3 d4@13]/2", // Dm F C
  S: "[d4,f4,a4]@6 [d4,f4,a4]@7 ~@3", T: "[c4,e4,g4]@3 ~@3 [c4,e4,g4]@10",
})).s("gm_piano").gain(0.26).pan(0.4)

// chords · piano · soft notes
const piano_soft = note("<~@14 A B C ~@7 D ~@6 E F G ~@7 H ~@11 B C ~@7 D ~@30>".pickRestart({
  A: "[d3,bb3] ~@3", B: "[bb2,g3,e4] ~ [bb2,g3] ~@13", C: "[a3,f4] ~ [a3,f4] ~@13", D: "~@2 bb3 ~@13",
  E: "~@2 [d3,bb3] ~", F: "~@8 [bb2,g3,e4] ~ [bb2,g3] ~@5", G: "~@4 a3!2 ~@2, ~@8 f4 ~ f4 ~@5", H: "~@10 bb3 ~@5",
})).s("gm_piano").gain(0.16).pan(0.4)

// chords · piano
const piano_2 = note(`<
  ~@8 A B@2 C@2 ~@5 D@2 E@2 F@3 ~ G@5 ~@4 H I H J@2 K@8 ~@5 L M ~ N@7 O@2 P@2 O@2 P@2 O@2 Q R ~@18
>`.pickRestart({
  A: "~@14 g4 a4", B: "[bb4@2 g4 ~@3 g4 ~ bb4@2 g4@3 ~@17 f4!2, ~@7 a4@25]/2",
  C: "[a4@2 f4 ~@3 f4@6 ~@20, ~@3 a4@23 ~@6]/2", D: "[~ d4 c4@2 d4 e4@2 f4@2 ~@7]/2",
  E: "[~@2 d4@2 c4@4 d4@3 e4@3 c4@4 ~@14]/2",
  F: "[~@2 d4@2 c4@4 d4@2 e4@4 f4@5 ~@3 f4@4 f4@2 d4@2 c4 c4@3 f4@2 d4@12]/3",
  G: "[~@6 g4 a4 bb4@2 g4 ~@3 g4 ~ bb4@2 g4@3 ~@17 f4!2 a4@2 f4 ~@3 f4@10 ~@24, ~@15 a4@25 ~@3 a4@23 ~@14]/5",
  H: "~@5 d4 c4@2", I: "d4 e4@2 f4@2 ~@3", J: "[~@3 e4@3 c4@4 ~@18 c4@4, d4@13 d4@3]/2",
  K: "[~@2 e4@3 ~ f4@5 ~@3 f4@4 f4@2 ~@2 c4 c4@3 f4 ~ d4@12 [bb3,f4,a4]@16 [c4,e4,g4]@15 ~ f4@13 ~@3 [g3,c4]@14 ~@26, d4@5 d4@2 ~@3 d4@8 d4@12 ~@2, ~@88 e4@3 ~@37]/8", // Bbmaj7 C C5
  L: "~@4 d4@2 c4@5 ~@5", M: "~@4 c4@2 c4@5 ~@5",
  N: "[~@2 d4@2 c4@4 ~@2 e4@4 f4@4 ~@18 c4@4 ~@3 e4@3 c4@4 ~@18 c4@4 ~@2 e4@3 ~ f4@5 ~@3 f4@4 f4@2 ~@2 c4 c4@3 f4@2 d4@12, ~@4 d4@13 d4@3 d4@13 d4@3 d4@10 d4@4 ~@6]/7",
  O: "[[bb3,f4,a4]@15 ~ [c4,e4,g4]@15 ~, d4]/2", P: "[f4@13 ~@3 [g3,c4]@15 ~, d4, ~@16 e4@3 ~@13]/2",
  Q: "[d4,f4]@13 ~@3", R: "[g3,c4]@15 ~, e4@3 ~@13",
})).s("gm_piano").gain(0.18).pan(0.6)

// chords · piano · soft notes
const piano_soft_2 = note("<~@43 A@3 ~@18 B@8 C D ~@19>".pickRestart({
  A: "[~ a3@2 [g3,bb3]@2 ~]/3", B: "[~ [g3,bb3] ~@2, a3]/4", C: "a3", D: "[g3,bb3]",
})).s("gm_piano").gain(0.06).pan(0.6)

// other · pad new age
const pad_new_age = note("<~@26 A B C D E@8 ~@25 F@2 ~@2 G ~@25>".pickRestart({
  A: "f5", B: "e5", C: "d5@3 e5", D: "f5 g5", E: "[a5@3 ~@8 f5 d5@52, ~@3 a5@51 ~@10]/8", F: "g5/2", G: "d4 ~@15",
})).s("gm_pad_new_age").gain(0.13).pan(0.4)

// chords · pad warm
const pad_warm = note(`<
  ~ A B C D E F@7 G@8 ~@3 H@2 I J K L M N@8 ~@3 O@4 P@2 Q@3 R@8 ~@4 S T@4 U@4 V W X Y@5 Z@2 AA@8 AB@3
>`.pickRestart({
  A: "[f3,g3,bb3,d4,f4,bb4]", B: "[g3,c4,e4,g4]", C: "[d3,a3,d4,f4,a4]@3 [c3,c4,e4,g4]",
  D: "[bb2,bb3,d4,f4] [c4,e4,g4]", E: "[f3,c4]@6 [e3,db4]@9 ~, a3@15 ~",
  F: "[~@4 c4@3 ~ bb3@16 [g3,c4,e4]@15 ~ f4@16 e4@16 f4@12 [c4,f4,a4]@4 [bb3,f4]@8 [c4,e4,g4]@8 [f3,a3,c4]@5 ~ [e3,a3,db4]@2, a3@9 a3@4 ~, [f3,d4] f3@12 ~, ~ d4@8 d4@2 d4@3, ~@5 [bb4,d5]@4 ~@5]/7", // C F Bb5 C F A Dm Bb
  G: "[~@6 c4 ~ [f3,d4]@56, ~ a3@15, ~ [f3,d4] bb3@2 ~@12]/8", H: "[~ f4@3 [c4,e4]@3 ~, ~ d4@7]/2", I: "[bb3,d4,f4]",
  J: "[g3,c4,e4]", K: "[a3,f4]@3 [c4,f4,a4], d4", L: "[bb3,d4,f4] [c4,e4,g4]",
  M: "[f3,a3,c4]@5 ~ [e3,db4]@8 ~@2, ~@3 a3@5", N: "[~@2 c4 ~ [f3,bb3,d4]@8 ~@52, a3, [f3,d4] ~@15]/8",
  O: "[~ bb3@2 a3@2 g3@2 c3]/4", P: "[~ [bb3,d4,f4]@2 [g3,c4,e4]]/2",
  Q: "[~@8 f4@12 [c4,f4,a4]@4 [bb3,f4]@8 [c4,e4,g4]@8 [f3,a3,c4]@5 ~ [e3,a3,db4]@2, ~ a3@4 ~, ~ d4@2 d4@3]/3", // F Bb5 C F A
  R: "[~@8 f3 ~@3 c4@2 ~@2 [f3,bb3,d4]@16 ~@96, ~ a3@15, ~ d4 ~@14]/8", S: "bb3",
  T: "[~@16 g3@15 ~ c3@9 ~@7 bb3@16, a3]/4", U: "[~@16 g3@15 ~ c3@12 ~@4 bb3@16, a3]/4", V: "a3", W: "g3@15 ~", X: "c3",
  Y: "[~@18 ab4@9 ~@2 eb5@13 ~@20 db4@16 eb5@2, ab3@7 ~@3, eb3@45 ~ eb4@32 ~@2, eb4@23 ~@22 ab4@12 ~@23]/5",
  Z: "[~@13 [db4,db5]@19]/2", // Db
  AA: "[~@48 db5 ~@30 ab4@15 eb5@4 ~@14 eb4@14 db4@2, ~@15 eb4@32 ~ db4@14 ~@7 ab5@16 ~@43, ~@15 ab4@12 ~@27 eb5@26 ~@32 ab4@6 ~@10, ~ eb3@7]/8",
  AB: "[~@2 db4, ~@14 eb4@33 ~, ~@16 eb5@7 ~]/3",
})).s("gm_pad_warm").gain(0.13).pan(0.8)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A@2 B C D E@6 F G@8 H I@8 J K@4 L@5 M@7 N@5 O@2 P Q@8 R@4 S@7 T ~@18
>`.pickRestart({
  A: "[[bb3,d4]@14 ~@2 [g3,c4,e4]@13 ~@3, f3@12 ~@3 c3@14 ~@3]/2", B: "[d3,a3,d4,f4]@11 ~ [g3,c4]@2 ~@2",
  C: "[bb2,f3,bb3,d4]@7 ~ [g3,c4,e4]@6 ~@2", D: "~ c3 a3 ~@3 db4 a2, f2@6 a2@7 ~@3, ~ e3, ~@10 g3@5 ~",
  E: "[d3@2 ~@2 c3@2 ~@3 g4@9 ~@2 [bb3,d4] ~@3 [g3,c4,e4]@14 ~@2 bb3@4 ~@2 [bb3,d4]@6 [bb3,d4]@2 ~@2 [g3,c4,e4]@4 c3 ~ e4@6 [g3,c4] ~@3 [d3,a3,d4,f4]@4 ~@2 [d3,a3]@4 d3 ~ [g3,c4,e4]@2 ~@2 [bb3,d4]@4 bb3@2 ~@2, ~@8 bb2@71 ~@17, ~@4 f3@16 ~@11 c3@2 ~@15, ~@4 [bb3,d4]@5 ~@22 c4 ~@7 [d4,f4]@3 ~@6]/6", // Bb C Bb C C5 Dm D5 C …
  F: "[c3,c4,e4]@4 c3@2 ~@2 f2@2 a2 ~ c3 ~ db3@2, g3@7 ~@9", // C
  G: "[~@12 e3@2 ~@3 d4@12 ~@3 bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ a3@2 ~@2 a3@2 a3@2 a3@2 ~@2 a3@2 ~@2 bb3 ~@5 bb3 ~ bb3 ~ bb3 ~ a3@2 ~@6 f2 ~@5 c3 ~ c3@2 f2 ~ f2@4 c3 ~ c3@2 a2 ~ a2@2 f2 ~ f2 ~ bb2@4 f2 ~@5 c3 ~ c3@2 f2 ~, ~ d3@15, ~ f3@7, ~@8 bb3@6 ~@17 a3@3 a3@4 ~ a3@25, ~@40 bb2@3 bb2@13 ~@3 bb2@5]/8",
  H: "f2@4 c3 ~ c3@2 a2 ~ a2@2 f2 ~ f2 ~",
  I: "[~@4 f2 ~@5 a2@2 c3@3 ~@7 g2@8 ~@2 c3 ~ c3 ~ c3@25 ~@7 bb3@8 bb3@4 ~@4 [c3,g3,c4,e4] ~@7 [g3,c4,e4] ~@3 a3@6 d4@2 d4@2 ~@2 [g3,c4]@2 ~@2 bb3@8 [c3,g3,c4,e4]@6 ~@2, bb2@3 bb2@61, ~ d3@5 d3@2, ~@17 f3 ~ f3@9 f3@4, ~@68 d4 ~@7 d4 ~@25 [a3,f4]@6 ~@4 d4@6 ~@10]/8", // C C5 C Dm
  J: "f2@2 a2 ~ c3 ~ db3@9 ~",
  K: "[~@4 e3 ~@3 bb3@16 bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ a3@2 ~@2 a3@2 a3@2 a3@2 a3@2 a3@2 ~@2 bb3 ~ bb3 ~@3 bb3 ~, d3, ~@2 bb2@7 ~@7, ~@4 f3@4 ~@19 a3@3 a3@2]/4",
  L: "[bb3@2 bb3 ~ a3@2 ~@6 f2 ~@5 c3 ~ c3@2 f2 ~ f2@4 c3 ~ c3@2 a2 ~ a2@2 f2 ~ f2 ~@5 f2 ~ bb2@3 ~ c3 ~ c3@2 f2 ~ f2@4 c3 ~ c3@2 a2@2 a2@2 f2 ~ f2 ~ bb2@3 ~ f2 ~ bb2@2, ~@3 a3@37, ~@4 bb2@3 bb2@4 ~@9 bb2@3 ~@17]/5",
  M: "[~@2 a2@2 c3@3 ~@7 g2@8 ~@2 c3 ~ c3 ~ c3@11 ~ bb3@15 ~ [g3,c4,e4]@14 ~@2 [c3,bb3]@15 ~ [g3,c4]@14 ~@2 [f3,bb3]@4 [bb3,g4] ~@3, ~ d3@13, ~@39 c3@15 ~ c3@14 ~@3 f3@32 ~@4 f3@2 ~@2, ~@10 [f3,d4]@8 d4@9 d4, ~@87 c3 e4@12 ~@12]/7", // C C7 C5 Bb5 Eb Dm
  N: "[~@4 d4@4 g3@4 [g3,c4,e4] ~ [g3,c4]@6 [g3,c4,e4]@4 [d3,a3,d4,f4]@4 ~@2 d3@4 d3@2 [g3,c4,e4]@2 c4 ~ [f3,bb3]@4 bb3 ~ [g3,c4]@2 [g3,c4,e4]@4 [g3,e4]@2 ~@2 f2@2 a2@2 c3 ~ db3@8 ~@2 d3 ~@3 e3 ~@3, ~@4 f3@36 ~@4 f3@17 ~@19, ~@4 bb3 ~@9 c3@4 ~@12 a3@31 ~@19, ~@15 d4@5 d4@4 ~@2 c4@2 ~@12, ~@46 c3@6 a4 ~@27]/5", // C C5 C Dm C Bb5 C5 C
  O: "[bb3@14 bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~, bb2@19 ~@13, f3 ~]/2",
  P: "a3 ~ a3 ~ a3 ~ a3 ~ a3@2 a3@2 a3@2 a3@2",
  Q: "[bb3 ~ bb3 ~@3 bb3 ~ bb3@2 bb3 ~ a3@2 ~@4 bb2@2 bb2@4 ~@2 c3@4 f2 ~ f2@4 c3 ~ c3@2 a2 ~ a2@2 f2 ~ f2 ~ bb2@9 ~ c3 ~ c3@2 f2 ~ f2@4 c3 ~ c3@2 a2 ~ a2@2 f2 ~ f2 ~ bb2@8 ~@2 c3 ~ c3 ~ d3@2 ~@6 g2@2 g2@6 ~@2 c3 ~ c3 ~ c3@11 ~, ~@2 a3@4 ~ a3@57, ~@3 bb2@3 ~@10]/8",
  R: "[~@6 bb3@10 ~@6 [c4,e4]@8 ~@8 bb3@9 ~@7 [g3,c4,e4]@9 ~, ~@3 d4@16 d4@13, ~@6 f3@3 ~@13 g3@10 ~@6 f3@3 ~@23]/4", // C
  S: "[~@6 bb3@10 ~@6 [c4,e4]@8 ~@8 f4@7 ~@11 c5@5 ~@3 bb4@2 ~@4 f4@9 ~@9 c5@8 ~@6 f4@7 ~@3, ~@6 d4@103 ~@3, ~@6 f3@3 ~@12 g3@8 ~@3 bb4@4 bb4@12 g4@6 g4@10 ~@4 bb4@12 g4@6 g4@10 ~@2 d5@14, ~@17 d5@7 ~ c5@3 ~@5 d5@7 ~ c5@3 ~@4 bb4@2 bb4@6]/7", // C
  T: "~ c5, g4@3 g4@5, ~ c5@3 ~@4",
})).s("gm_electric_guitar_clean").gain(0.2).pan(0.4)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note("<~@7 A B C@2 D@7 ~@8 E F G ~@4 H ~@12 I@4 ~@2 J ~@40>".pickRestart({
  A: "~@4 f4 ~@11", B: "~ f3, ~@2 d4 ~", C: "[~@8 c3@4 c4 ~@5 c3@3 ~@11, ~ f3@15, ~@7 g3@3 ~@6]/2",
  D: "[~@2 a3 ~@17 c4@2 ~@60 a3@2 ~@6 a3@2 ~@6 bb3 ~@13, ~@8 f3@21 ~@83, ~ bb2@7]/7", E: "[f3,bb3] ~ f3 ~",
  F: "c3 ~ g3 ~, ~@4 c3 ~@3", G: "d4@2 ~@4 e4 ~", H: "~@5 a3 ~@2",
  I: "[~@14 f3@6 ~@4 c3@4 ab4 ~ e4@6 ab4 ~@9 f4@6 ~@12, ~@12 c4 ~@19]/4", J: "d4",
})).s("gm_electric_guitar_clean").gain(0.12).pan(0.4)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@15 A B C@8 D ~@13 E F@4 ~@2 G@2 H I@8 ~@5 J@3 ~ K@3 ~@2 L M N@2 O@2 P@2 Q R@5 S@3 T U@3 V
>`.pickRestart({
  A: "bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~", B: "a3!8",
  C: "[bb3 ~ bb3 ~@3 bb3 ~ bb3 ~ bb3 ~ a3@2 ~@54 c5@2 a4 c5 d5 c5@2 ~ g4!2 f4 g4 f4@7 ~ f4@2 g4@2 ~@10 bb4@4 ~@2 bb4@2 ~@2 bb4@2 c5 ~ b4@8 a4 ~ g4 f4, ~@2 a3@4 ~ a3@57, ~@94 a4@12 a4@4 a4@14 ~ a4@3]/8",
  D: "e4@3 ~", E: "~@8 f4@7 ~",
  F: "[f4@2 g4@2 ~@10 bb4@4 ~@2 bb4@2 ~@2 bb4@2 c5 ~ b4@8 a4 ~ g4 f4 e4 d4 c4@8 ~@14, ~@6 a4@12 a4@4 a4@14 ~ a4@18 ~@9]/4",
  G: "[~@6 e5@16 d5 ~ c5@4 d5 ~ b4@2, ~@30 d5 ~]/2", H: "~@2 d5 ~ f5@3 ~ f5@5 ~@2 f5",
  I: "[e5@2 f5 ~ c5@2 ~@8 f5 e5 e5@2 f5 ~ gb5 ~ a5@4 a5@4 a5@4 g5@3 ~@7 c6 ~ db6@7 ~@75, ~@3 d5@61, ~@38 f5@71 ~@19, ~@21 a5@41 ~@2]/8",
  J: "[f4 g4 g4@12 g5@10]/3", K: "[~@14 g4@33 ~]/3", L: "e5@14 ~ d5", M: "b4@4 d5 ~@7 f5@4, ~@3 c5@5",
  N: "[f5@6 f5 ~ e5@2 ~@2 db5 c5@18 ~, ~@7 f5@3 f5@6 ~@16]/2",
  O: "[~@18 ab4 ~ ab4 ab4@5 ab4 ~ eb5 b4 ab4 ~, ab5@15 ~]/2",
  P: "[ab4 ~ b4@2 ~@6 [db5,d5,gb5] db5 [d5,gb5] db5 d5@12 [db5,d5,gb5] ~ [db5,d5,gb5] ~ [db5,d5,gb5] ~, ~@13 gb5@7 ~@12]/2", // Dmaj7 D Dmaj7
  Q: "[db5,d5,gb5]@4 [db5,d5,gb5]@3 ~ [db5,d5,gb5]@4 [d5,gb5]@4, ~@7 f5@3 ~@2 db5@2 ~@2", // Dmaj7 D
  R: "[[d5,gb5]@4 gb5@3 ~ db5 ~ db5 b4 db5 b4 ab4@2 b4 ~ db5 ~ db5 ~ b4 ~ db5 b4 db5 ~ db5 b4 ab4@2 ~@2 b4 ~@7 db6@8 b5 g5 c6 b5 g5 gb5 ab5@2 ~@2 ab5@2 gb5 ~ g5@2 eb5@4 ~@3 db5@2 b4 [b3,db5] ~ db5 ~, db5 ~@3 d5@73 d5@3, ~@4 db5 ~@75]/5", // D Bsus2
  S: "[b4@10 ~@2 ab4 gb4 ~ b4@2 ab4@3 ~@6 gb5@2 ab5 gb5 ~@2 gb5 ~ gb5 ~@2 [gb5,g5] ab5 bb5 ~ bb5@5 ~@2, ~@31 ab5@2 ab5@3 ab5@2 ~@10]/3", // Gmaj7
  T: "~@5 b5@2 [gb5,ab5] ab5 gb5 ~ gb5@2 eb5 db5 ~", // Gbsus2
  U: "[b4@5 ~ ab4 gb4 ab4@2 ~ b4@2 ~@12 db5@2 b4 db5 ~ db5 ~ db5@10 ~@2 b4@4, ~@13 ab4@35]/3", V: "ab4 ~@15",
})).s("gm_distortion_guitar").gain(0.37).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@4 B C D E F E G@2 E G H@2 I J K J L J A M N A@4 J A O P Q R S T S G U V E@3 W E G@4 X N H@2 Y Z AA AB AA AB J AC
  J@7 AD C@3 AE L@16 N ~
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x ~@3 x", C: "x ~@2 x!2 ~@2 x", D: "~@3 x!2 ~@3", E: "~@4 x ~@2 x", F: "~@3 x!2 ~@2 x",
// … 79 more lines

More by Paul McCartney