Strudelify

Congratulations

Cliff Richard

KeyC♯ minorTempo186 bpm
0:00/0:00
// Congratulations — Richard Cliff
// 186 bpm, 4/4, key C# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(186/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 · fretless bass
const bass = note(`<
  A@2 B C D E F G H I J K L K M G H I J K N@8 O@7 P Q R@2 S T U V W X T Y T@2 U V W X T Z AA AB AC AD AA AB AC AD AE AF
  AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AP AU@2 AP AQ AR AS AT AV AW AX AY@8 AZ BA@2 BB BC BD BE BF BG BH@8 BI@3 BJ
  BK
>`.pickRestart({
  A: "[~@8 e2@2 ~@3 e2 ~ e2@2 ~@2 e2 ~ e2@2 ~@2 e2@2 ~@2 e2 ~@2]/2", B: "e2@2 ~@2 e2 ~ e2@2 ~@2 e2@2 ~@2 g2@2",
  C: "e2 ~ g2@2 ~ e2 ~ g2@2 e2 ~ g2@2 ~@3", D: "~@3 a2", E: "~@2 a2@2 e2@5 ~ e2@2 a2@4", F: "~@2 a2@2 e2@6 ~ e2@2 b2@3",
  G: "~@3 b2@2 f#2@5 ~ f#2 ~ b2@3", H: "~@3 b2@2 f#2@5 ~ f#2@2 b2@3", I: "~@3 b2@2 e2@5 ~ e2 ~ b2@3",
  J: "~@3 b2@2 e2@5 ~ e2@2 a2@3", K: "~@3 a2@2 e2@5 ~ e2@2 a2@3", L: "~ e2@3 ~ f#2@4 g#2@3 ~ a2@3",
  M: "~@3 a2@2 e2@5 ~ e2@2 b2@3",
  N: "[~ a2@3 ~ g#2@4 f#2@3 ~ e2@5 ~ e2 ~ e2@6 ~@2 e2@5 ~ e2 ~ e2@7 ~ a1@6 a1 ~ a1@7 ~ a1@5 ~ a1 ~ a1@7 ~ e2@5 ~ e2 ~ e2@6 ~@2 e2@5 ~ e2 ~ e2@7 ~ a1@6 a1 ~ a1@7 ~ a1@3]/8",
  O: "[~@3 a1 ~ a1@7 ~ f#2@5 ~ f#2 ~ f#2@6 ~@2 f#2@5 ~ f#2 ~ f#2@7 ~ b1@6 b1 ~ b1@7 ~ b1@5 ~ b1 ~ b1@7 ~ b1@5 ~ b1 ~ b1@6 ~@2 b1@5 ~ b1 ~ b1@4 b1@4 e2@2 ~]/7",
  P: "~ e2 ~ e2@2 ~@2 e2 ~ e2@2 ~@2 e2@2 ~", Q: "~@2 e2 ~ e2@2 ~@2 e2 ~ e2@2 ~@2 e2@2",
  R: "[~@2 g2@2 e2 ~@2 g2@2 e2 ~ g2@2 e2 ~ g2@2 ~@15]/2", S: "a2@5 ~ a2@2 e2@5 ~ e2@2", T: "a2@4 ~@2 a2@2 e2@5 ~ e2@2",
  U: "b2@4 ~@2 b2@2 f#2@5 ~ f#2 ~", V: "b2@4 ~@2 b2@2 f#2@5 ~ f#2@2", W: "b2@4 ~@2 b2@2 e2@5 ~ e2 ~",
  X: "b2@4 ~@2 b2@2 e2@5 ~ e2@2", Y: "a2@4 e2@3 ~ f#2@4 g#2@3 ~", Z: "a2@3 ~ a2@3 ~ g#2@4 f#2@3 ~",
  AA: "e2@5 ~ e2 ~ e2@6 ~@2", AB: "e2@5 ~ e2 ~ e2@7 ~", AC: "a1@6 a1 ~ a1@7 ~", AD: "a1@5 ~ a1 ~ a1@7 ~",
  AE: "f#2@5 ~ f#2 ~ f#2@6 ~@2", AF: "f#2@5 ~ f#2 ~ f#2@7 ~", AG: "b1@6 b1 ~ b1@7 ~", AH: "b1@5 ~ b1 ~ b1@7 ~",
  AI: "b1@5 ~ b1 ~ b1@6 ~@2", AJ: "b1@5 ~ b1 ~ b1@4 b1@4", AK: "e2@2 ~@2 e2 ~ e2@2 ~@2 e2 ~@2 e2@2 ~",
  AL: "~ e2@2 ~@2 e2 ~ e2@2 ~@2 e2 ~ e2@2 ~", AM: "~ e2@2 ~@3 g2@2 e2 ~ g2@2 e2 ~ g2@2", AN: "e2 ~ g2@2 ~@12",
  AO: "~@3 a2@5 ~ a2@2 e2@5", AP: "~ e2@2 a2@4 ~@2 a2@2 e2@5", AQ: "~ e2@2 b2@4 ~@2 b2@2 f#2@5",
  AR: "~ f#2 ~ b2@4 ~@2 b2@2 f#2@5", AS: "~ f#2@2 b2@4 ~@2 b2@2 e2@5", AT: "~ e2 ~ b2@4 ~@2 b2@2 e2@5",
  AU: "[~ e2@2 a2@4 e2@3 ~ f#2@4 g#2@3 ~ a2@4 ~@2 a2@2 e2@5]/2", AV: "~ e2@2 a2@5 ~ a2@2 e2@5", AW: "~ e2@2 ~ a2@3 ~@9",
  AX: "f2", AY: "[~@2 g2@17 a2@16 ~@5 a#2@11 ~@7 f2@10 ~@6 a#2@10 ~@6 f2@10 ~@6 c3@10 ~@5 g2@7]/8", AZ: "~@7 c3@7 ~@2",
  BA: "[~@3 g2@7 ~@4 c3@7 ~@3 f2@6 ~@2]/2", BB: "~@2 c3@6 ~@3 f2@5", BC: "~@3 a#2@5 ~@3 f2@5",
  BD: "~@4 a#2@3 ~ f2@3 ~ g2@3 ~", BE: "a2@3 ~ a#2@4 ~@2 a#2@2 f2@4", BF: "~ f2 a#2@2 ~ a#2 f2@2",
  BG: "~ f2 c3@2 ~ c3 g2@2",
  BH: "[~@2 g2 ~ c3@4 ~@3 c3@2 g2@5 ~ g2@2 c3@4 ~@2 c3@2 f2@5 ~ f2 ~ c3@4 ~@2 c3@2 f2@5 ~ f2@2 a#2@4 ~@2 a#2@2 f2@5 ~ f2@2 a#2@5 ~ a#2@2 f2@5 ~@3 g2@4 ~@2 g2@2 c2@5 ~ c2@2 ~ g2@5 ~ g2@2 c2@5 ~@3 f2@5 ~@5]/8",
  BI: "[~@6 a#1@5 ~ a#1 ~ f2@4 ~@2 f2@2 a#1@5 ~ a#1@2 f2@5 ~ f2 ~ a#1@5 ~@5]/3", BJ: "~@3 a1", BK: "a#1@3 ~@13",
})).s("gm_fretless_bass").gain(0.45)

// other · brass section
const brass_section = note("<A@2 B ~@86 C D E@8 F@2 G@3 ~@11 H I J K L>".pickRestart({
  A: "[~@8 [e4,e5]@2 ~@3 [e4,e5]@2 [e4,e5]@2 ~@2 [e4,e5]@2 [e4,e5]@2 ~@2 [e4,e5]@2 ~@2 [e4,e5]@2 ~]/2", // E
  B: "[e4,e5]@2 ~@2 [e4,e5] ~ [e4,e5]@2 ~@2 [e4,e5]@2 ~@4", C: "f3", D: "~ g3@7",
  E: "[~@3 a3@21 a#2@15 ~@3 f2@14 ~@2 a#2@14 ~@2 f2@14 ~@2 c3@14 ~ g2@12 ~@2 c3@9]/8", F: "[~@3 g2@10 ~ c3@9 ~ f2@8]/2",
  G: "[~@2 c3@8 ~ f2@7 ~ a#2@7 ~ f2@7 ~@2 a#2@3 ~@9]/3", H: "~@5 f4 [f4,f5] ~, ~@10 f5 ~@5",
  I: "[f4,f5]!2 ~ [f4,f5] ~ [f4,f5]!2 ~", J: "[f4,f5] ~ [f4,f5]@2 ~@2 [f4,f5]@2 ~@8", K: "~@3 [c#5,a5]",
  L: "[d5,a#5]@3 ~@13", // Gm
})).s("gm_brass_section").gain(0.45).pan(0.7)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@35 A B ~@2 C D E F ~@2 G D H I H J ~@2 K L M@8 N@6 O P Q ~ R S T U ~@2 V S W X W Y ~@2 Z@2 ~@3 AA AB AC AD AE AF AG
  AH AI AJ AK AL AM AN@2 AO@2 ~ AP@2 ~@8
>`.pickRestart({
  A: "~ e5@2 [e5,e6]@2 ~@2 [e5,e6]@2 [e5,e6]@2 ~@2 [e5,e6]@2 ~, ~ e6 ~@14", // E
  B: "~@2 [e5,e6]@2 [e5,e6]@2 ~@2 [e5,e6] ~ [e5,e6]@2 ~@2 [e5,e6]@2", C: "~@11 g#5 a5 ~@3", D: "e5@7 ~",
  E: "~@11 a#5 b5 ~@3", F: "f#5@7 ~", G: "~@3 g#5 a5 ~@3 g#5 ~@3 f#5 ~@3", H: "~@11 c6 c#6 ~@3", I: "a5@7 ~",
  J: "b5@7 ~", K: "~@4 e6 ~ f#6 ~@3 e6 ~ c#6 ~@3", L: "a5@5 ~@3", M: "[g#3 a3 g#3 a3, e4]/8",
  N: "[c#4@8 d4@8 d#4@7 ~, f#4@23 ~]/6", O: "~@4 [e5,e6]@2 [e5,e6]@2 ~@2 [e5,e6]@2 ~ [e5,e6]@2 ~",
  P: "~ [e5,e6]@2 ~@2 [e5,e6]@2 [e5,e6]@2 ~@2 [e5,e6] ~ [e5,e6]@2 ~", Q: "~ [e5,e6]@2 ~@13", R: "~@14 g#5 a5",
  S: "~@3 e5@13", T: "~@14 a#5 b5", U: "~@3 f#5@13", V: "~@6 g#5 a5 ~@3 g#5 ~@3 f#5", W: "~@14 c6 c#6", X: "~@3 a5@13",
  Y: "~@3 b5@13", Z: "[~@7 e6 ~ f#6 ~@3 e6@2 c#6@2 ~@3 a5@2 ~@10]/2", AA: "~@8 a#5@3 ~@2 c6@2 ~",
  AB: "~ d6@2 ~@2 c6@2 ~@3 a#5@2 ~@2 a5@2", AC: "~ g5 ~ f5 ~ a#5 ~ c6", AD: "~ d6 ~ c6 ~ a#5 ~ a5",
  AE: "~ g5 ~ f5 ~ c6 ~ d6", AF: "~ e6@2 ~@2 d6@2 ~@2 c6@2 ~@2 a#5@2 ~", AG: "~ a5 ~@2 g5 ~@2 c6@2 ~ d6 ~@2 e6 ~@2",
  AH: "d6@2 ~ c6 ~@2 a#5 ~@2 a5 ~ g5 ~@2 c6 ~", AI: "~ d6 ~@2 e6 ~ d6 ~ c6 ~@2 a5 ~ g5 ~ f5",
  AJ: "~@2 c6 ~ d6 ~ c6 ~@2 a#5 ~ a5 ~ a#5 ~ a5", AK: "~ g5 ~ a#5 ~ a5 ~ a#5 ~ c6 ~ d6 ~@2 c6 ~",
  AL: "d6 ~ d#6 ~ f6 ~@11", AM: "~@15 c#6", AN: "[d6 ~@3 a#5@14 ~@13 c#6]/2", AO: "[d6 ~@3 c6@14 ~@14]/2",
  AP: "[~@9 f6 ~ g6 ~@3 f6@2 d6@2 ~@2 a#5@10 ~]/2",
})).s("gm_string_ensemble_1").gain(0.31).pan(0.7)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@4 A@5 B@8 C@8 D@2 E@2 F@8 ~@2 G@2 H@4 I@8 J@8 K@2 L@2 M@8 N@7 O@7 P@8 Q@2 R S T U V W X Y@8 Z@3 AA@5
>`.pickRestart({
  A: "[~@22 c4@2 ~@2 e4@6 e4@2 ~@2 c#4@2 ~ c#4@2 ~@2 a3@2 ~@10 d4@2 ~@12 d#4@2 e4@2 ~@2 g3@2 g#3@3, ~@12 a3@8 a3@12 ~@2 f#4@3 ~@5 c#4@2 ~@5 d#4@6 ~@2 d#4@12 ~@4 c#4@4 ~@3, ~@16 [e4,a4]@10 a4@16 ~@7 [f#4,b4]@10 b4@16 ~@5, ~@16 c#4@6 ~@2 c#4@11 e4@3 e4@3 b3@2 ~@2 b3@8 b3@10 g#4@4 f#4@4 ~@9, ~@59 f#4@6 e4@4 ~@11]/5", // A5 B5
  B: "[~@17 d4@5 ~@3 [g#3,b3]@4 ~@4 c#5@2 b4 ~@2 g4 f#4 ~ e4 c#4 b3 ~@9 e4@2 [b3,d4]@6 ~@10 c4@2 ~@16 c#4@4 ~@10 d4@2 ~@12 d#4@2 ~@4 g3@2 g#3@3, ~ g#3@10 g#3@14 ~@4 a3@15 ~ a3@11 ~@5 a3@8 a3@7 ~ a3@15 ~@5 d#4@6 ~@2 d#4@9 ~@7 c#4@4 ~@3, ~ b3@6 b3@17 ~@41 c#4@6 ~@2 c#4@8 f#4@2 c#4@4 b3@6 b3@8 b3@10 g#4@4 f#4@4 ~@9, ~@5 e4@5 ~@5 e4@4 ~@4 e4@5 ~@9 g#4@2 ~@36 a4@15 ~@17 b4@16 ~@5, ~@7 d4@7 ~@15 c#4@12 ~@8 c#4@6 ~@10 [e4,a4]@10 e4@4 e4@6 e4@6 ~@6 [f#4,b4]@10 f#4@6 e4@4 ~@2 e4@4 ~@5]/8", // G#m Bm A5 B5
  C: "[~@25 [g#3,b3]@4 ~@4 c#5@2 b4 ~@2 g4 f#4 ~ e4 c#4 b3 ~ a3@15 ~@11 g3@2 ~@2 [b3,e4]@4 ~@4 e4@2 ~@2 c#4@2 ~@2 g#3@2 ~@10 c4@2 ~@2 e4@6 ~@2 e4@2 ~@2 c#4@2 ~@4 e3@3, ~ g#3@10 g#3@14 ~@4 a3@15 ~@17 e3@8 e3@23 ~@21 e4 f#4@2 ~@2 e4@2 ~@2 c#4@4 ~@2, ~ b3@6 b3@17 ~@41 [b3,e4]@10 ~@4 b3@9 ~ b3@2 ~@6 c#4@6 ~@2 c#4@11 ~ c#4@2 ~@2 b3@3 ~@4, ~@5 e4@6 ~@4 e4@4 ~@4 e4@5 ~@9 g#4@2 ~@42 e4 f#4@2 ~ c#4 e4@2 ~@2 c#4@2 ~@5 [e4,a4]@10 a4@15 ~@6, ~@7 d4@9 ~ d4@9 ~@3 c#4@12 ~@24 g#3@6 ~@2 g#3@11 ~ g#3@6 ~@2 a3@8 a3@22 a3@4 ~]/8", // G#m E5 A5
  D: "[~@7 g3@2 ~@2 e4@5 ~@3 e4@2 ~@2 c#4@2 ~@2 g#3@2 a3@3, ~ [b3,e4]@10 b3@14 b3@2 ~@5, ~ g#3@6 ~@2 g#3@11 ~ g#3@6 ~@5, ~@5 e3@23 ~@4, ~@17 e4 f#4@2 ~ c#4 e4@2 ~@2 c#4@2 ~@4]/2", // E5
  E: "[~@7 c4@2 ~@2 e4@3 ~@9 c#4@4 a3@2 f#3@3, ~ [e4,a4]@10 a4@17 ~@4, ~ c#4@6 ~@2 c#4@13 ~@10, ~@5 a3@21 ~@6, ~@15 e4@4 f#4@8 ~@5]/2", // A5
  F: "[~@3 c#4@4 c#4@2 ~@18 a#3@2 ~@10 c#4@2 ~@14 c#4@6 ~@10 g#3@2 ~@14 d#4@6 [g#3,b3,e4]@27 ~@8, ~ a#3@8 a#3@6 a#3@12 ~@2 b3@8 b3@6 b3@6 b3@11 ~ b3@21 ~ b3@10 ~@35, ~@3 f#4@7 ~ f#4@17 ~@5 f#4@26 ~@6 f#4@14 f#4@14 ~@35, ~@7 f#3@16 f#3@22 ~@2 f#3@13 ~@13 a3@20 ~@35, ~@11 c#4@8 c#4@9 ~@5 d4@6 ~@2 d4@9 ~ d4@6 ~@10 d#4@18 ~@43]/8", // E
  G: "[~@5 c4 ~ e4@2 ~@5 a3@2, a3@8 a3@12 ~@2 f#4@9 ~, ~@3 c#4@6 ~@3 c#4@13 ~ c#4@6, ~@4 [e4,a4]@10 a4@15 ~@3, ~@18 e4@11 ~@3]/2", // A5
  H: "[~@5 d4 ~@6 d#4 ~@2 g3 g#3@2 ~@12 [g#3,b3]@2, b3@8 b3@10 g#4@4 f#4@4 ~@10 b3@6 b3@16 e4@5 ~, ~@4 [f#4,b4]@10 b4@16 ~@10 e4@2 d4@7 ~ e4@2 d4@9 ~@3, ~@2 d#4@3 ~ d#4@6 ~@2 c#4@18, ~@7 f#4@3 e4@2 ~ e4@2 ~@3 g#3@5 g#3@7 ~@2]/4", // G#m B5
  I: "[~@4 c#5@2 ~ b4 ~ g4 ~ f#4 e4 ~@2 b3 ~@8 e4@2 [b3,d4]@6 ~@10 c4@2 ~@30 d4@2 ~@12 d#4@2 ~@4 g3@2 g#3@4 ~@4 e4@2 ~@8 e4@2 d4@5 ~@3 [g#3,b3]@4, a3@15 ~ a3@11 ~@5 a3@8 a3@6 e4@4 e4@4 c#4@4 b3@6 b3@8 b3@6 f#4@4 g#4@4 f#4@4 ~@10 b3@6 b3@17 ~@5, c#4@13 c#4@7 c#4@16 [e4,a4]@10 a4@14 c#4@32 c#4@36, ~@8 g#4@2 ~@26 c#4@8 c#4@8 f#4@4 e4@6 ~@6 [f#4,b4]@10 b4@16 ~@12 d4@7 ~@9 e4@5 ~, ~@48 a3@15 ~@5 d#4@6 ~@2 d#4@8 e4@4 ~@2 e4@4 ~@6 g#3@10 g#3@14 ~@4]/8", // Bm G#m A5 B5
  J: "[~@4 c#5@2 ~ b4 ~ g4 ~ f#4 e4 ~@2 b3 a3@15 ~@11 g3@2 ~@2 [b3,e4]@4 ~@3 f#4@2 ~@2 e4@2 ~@15 c4@2 ~@2 e4@6 ~ f#4@2 ~@2 e4@2 ~@15 g3@2 ~@2 e4@5 ~@2 f#4@2 ~@2 e4@2 ~@2 c#4@2 g#3, a3@15 ~@17 e3@8 e3@23 ~@21 e4@2 ~ e4@2 ~@3 b3@3 ~ e3@8 e3@23 ~, c#4@13 c#4@43 g#3@6 ~ g#3@2 ~@3 c#4@8 c#4@12 c#4@3 c#4@2 c#4@27 g#3@6 ~@2, ~@8 g#4@2 ~@26 [b3,e4]@10 ~@4 b3@9 ~ b3@2 ~@2 a3@8 a3@22 ~ a3@4 ~ [b3,e4]@10 b3@14 b3@2 ~@2, ~@36 g#3@6 ~@2 g#3@8 e4@2 ~ e4 c#4@3 c#4@2 c#4@7 [e4,a4]@10 a4@15 ~@7 g#3@6 ~@2 g#3@8 e4@2 ~ e4 c#4@3 c#4@2 ~@3]/8", // E5 A5
  K: "[~@10 c4@2 ~@2 e4@3 ~@13 a3@2, a3@8 a3@21 ~@3, ~@4 [e4,a4]@10 a4@17 ~, ~@2 c#4@4 c#4@7 c#4@3, ~@9 e4@2 f#4@4 ~]/2", // A5
  L: "[~@3 c#4@2 ~@10 a#3, f#3@5 f#3@8 f#3@3, ~@2 a#3@4 a#3@3 a#3@6 ~, ~@6 f#4@7 ~ f#4@17 ~, ~@5 c#4@2 c#4@4 c#4@5]/2",
  M: "[~@42 g#3@2 ~@14 d#4@6 [g#3,b3,e4]@27 ~@37, b3@8 b3@6 b3@4 f#3@13 ~@7 d#4@16 b3@10 ~@64, ~@2 f#4@13 ~@3 f#4@4 a3@10 ~@32, ~@2 d4@3 c#4@6 d4@2 c#4@51, ~@12 d4@8 b3@11 ~ b3@18 f#4@14 ~@64]/8", // E
  N: "[~@13 c4@2 ~@2 e4@4 ~@10 a3@4 ~@10 d4@2 ~@12 d#4@2 ~@4 g3@2 g#3@4 ~@24 [g#3,b3]@4 ~@4 c#5@2 b4 ~@2 g4 ~ f#4 e4, ~@3 a3@8 a3@12 ~@2 f#4@9 ~@5 [f#4,b4]@10 b4@16 ~@10 e4@2 d4@7 ~ e4@2 d4@9 ~@16, ~@6 c#4@9 c#4@14 c#4@34 c#4@36 ~@13, ~@7 [e4,a4]@10 a4@15 ~@7 d#4@6 ~@2 d#4@10 f#4@4 ~@10 b3@6 b3@16 e4@5 ~@9 g#4@2 ~@3, ~@21 e4@11 ~@3 b3@8 b3@6 f#4@4 g#4@2 e4@4 ~@2 e4@4 ~@6 g#3@10 g#3@14 ~@4 [a3,c#4]@13]/7", // G#m B5 A5 A
  O: "[~@2 b3 ~@8 e4@2 [b3,d4]@6 ~@10 c4@2 ~@30 d4@2 ~@12 d#4@2 ~@4 g3@2 g#3@4 ~@4 e4@2 ~@8 e4@2 d4@5 ~ e4@2 [g#3,b3], c#4@7 c#4@16 [e4,a4]@10 a4@14 c#4@32 c#4@33, ~@3 a3@11 ~@5 a3@8 a3@6 e4@4 e4@4 c#4@4 b3@6 b3@8 b3@6 f#4@4 g#4@4 f#4@4 ~@10 b3@6 b3@17 ~@2, ~@23 c#4@8 c#4@8 f#4@4 e4@6 ~@6 [f#4,b4]@10 b4@16 ~@12 d4@7 ~@12, ~@35 a3@15 ~@5 d#4@6 ~@2 d#4@8 e4@4 ~@2 e4@4 ~@6 g#3@10 g#3@14 ~]/7", // Bm G#m A5 B5
  P: "[~@3 a3@4 ~@8 e4@5 a4 ~@77 a#4@3 ~@13 [d4,f4,a#4]@3 ~@11, ~@3 c#4@10 c#4@115, ~@7 g#3@13 ~@108, ~@9 a3@9 ~@79 [d4,f4]@3 ~@28]/8", // A# Dm
  Q: "~@2 [d4,f4,a#4]@3 ~@11", R: "~@2 c5@3 ~@11, ~ [e4,g4]@3 ~@12", S: "~ [e4,g4,c5]@2 ~@10 [e4,g4,c5]@2 ~",
  T: "~@9 [g4,c5]@2 ~@5, ~@4 e4 ~@3", U: "~@4 [a4,c5]@2 ~@7 [f4,a4,c5]@2 ~, ~@3 f4@2 ~@11",
  V: "~@6 [f4,a4,c5]@2 ~@7 [f4,a4,c5]", W: "~@7 [d4,f4,a#4] ~@7 d4",
  X: "[f4,a#4] ~@3 [d4,f4,a#4] ~@3 d4@2 d4@2 d4@2 d4@2, ~@2 [a#3,f4]!2", // A#5 A# A#5
  Y: "[[d4,f4]@2 [d4,f4]@2 ~@28 d4@4 ~@10 d#4@2 ~@6 a4@3 ~@4 e4@2 f4@2 ~@2 g#3@2 a3@3 ~@5 f4@2 ~@8 f4@2 d#4@6 ~@2 c4@3 ~@15 f4@6 ~@4 d4@2 [f4,a#4], a#3@4 a#3@8 a#3@6 f4@2 a#3@15 ~@5 e4@6 ~@2 e4@9 f4@4 ~@4 d4@4 ~@3 a3@10 ~ a3@18 a#3@8 a#3@12 a#3@7, ~@8 [f4,a#4]@10 a#4@12 c4@6 c4@8 c4@7 c5@16 ~@12 d#4@7 ~@9 f4@5 ~@5 [f4,a#4]@10 ~@13, ~@4 d4@3 c#4@57, ~@16 d4@6 f4@2 g4@2 d4@2 f4@6 ~@6 [g4,c5]@10 g4@6 ~@3 g4@4 ~@10 c4@6 c4@17 ~@9 d4@6 ~@2 d4@9 ~@6]/8", // Dm A#5 C5
  Z: "[~@15 d#4@2 ~@7 g4@6 ~@2 [e4,g4]@5 ~ [a3,c4,f4]@3 ~@7, ~@5 c4@8 c4@16 ~ c4@7 ~@11, ~@9 g4@10 g4@4 ~@25, ~@9 e4@6 ~@2 e4@11 ~@20, ~@10 c5@7 ~@7]/3", // Em F
  AA: "[~@6 [d4,f4]@3 [d4,f4]@3 [d4,f4]@4 [d4,f4]@2 [a#3,d4,f4]@4 [d4,f4]@4 [d4,f4]@2 [a#3,d4,f4]@6 [a#3,f4]@4 [a#3,f4]@3 ~@19 e4@4 [f3,a#3,f4]@4 ~@12, ~@3 a#3@3 a#3@3 ~@2 a#3@3 ~@3 d4@17 ~@6, ~@59 [e3,a3]@4 ~@17]/5", // Dm A# Dm A# A#5 A5
})).s("gm_electric_guitar_clean").gain(0.37).pan(0.3)

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

// drums · clap
const clap = s("cp").struct("<A B C ~@31 D E F ~@32 G H I ~@21 I J@3 I K L M N O P ~@11 Q R S ~@2>".pickRestart({
  A: "~@8 x ~@4 x ~ x", B: "~@3 x ~ x ~@3 x ~@3 x ~@2", C: "x ~ x!2 ~ x ~@2", D: "~@13 x ~@2",
  E: "~ x ~ x ~@3 x ~ x ~@3 x ~@2", F: "~ x!2 ~ x!2 ~ x", G: "x ~@3 x ~ x ~@3 x ~@2 x ~@2",
  H: "~ x ~@3 x ~ x ~@3 x ~ x ~@2", I: "~ x ~@14", J: "~ x ~@6", K: "~ x ~@11 x ~@2", L: "~@9 x ~@6",
  M: "~@4 x ~@8 x ~@2", N: "~@6 x ~@8 x", O: "~@7 x ~@8", P: "x!2 ~@2", Q: "~@3 x ~ x!2 ~", R: "x!2 ~ x ~ x!2 ~",
  S: "x!2 ~ x ~@4",
})).gain(0.41)

// drums · snare
const snare = s("sd").struct(`<
  A B C ~@2 D E F@13 G F@13 H I J ~@2 K@15 L K@14 M N O ~ P@14 Q R ~@4 O S@3 O T G U V W X Y D@2 E F@5 Z AA AB AC AD L
  AE
>`.pickRestart({
  A: "~@8 x ~@4 x ~ x", B: "~@3 x ~ x ~@3 x ~@3 x ~@2", C: "x ~ x!2 ~ x ~@2", D: "x!2", E: "x ~@8 x ~@6",
  F: "~ x ~@7 x ~@6", G: "~@9 x ~@6", H: "~ x ~@7 x ~@3 x ~@2", I: "~ x ~ x ~@3 x ~ x ~@3 x ~@2", J: "~ x!2 ~ x!2 ~ x",
  K: "~ x ~ x", L: "~@3 x", M: "x ~@3 x ~ x ~@3 x ~@2 x ~@2", N: "~ x ~@3 x ~ x ~@3 x ~ x ~@2", O: "~ x ~@14",
  P: "~@7 x ~@7 x", Q: "~@7 x ~ x ~@3 x ~ x", R: "~ x ~@2", S: "~ x ~@6", T: "~ x ~@11 x ~@2", U: "~@4 x ~@8 x ~@2",
  V: "~@6 x ~@8 x", W: "~@7 x ~@8", X: "x!2 ~@2", Y: "~ x", Z: "~ x ~@8 x ~@5", AA: "~ x ~ x ~@4", AB: "~@3 x ~ x!2 ~",
  AC: "x!2 ~ x ~ x!2 ~", AD: "x!2 ~ x ~@4", AE: "x",
})).gain(0.48)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@89 [~ x!14 ~] [~@3 x!13] [x ~@3 x!12] [x!8 ~@8] ~@25 [~@13 x!3] ~>").gain(0.21)

// drums · low tom
const low_tom = s("lt").struct("<~@2 A B ~@33 C ~@33 D E ~@44 F G ~>".pickRestart({
  A: "~@7 x", B: "~@2 x ~@4 x ~@3 x ~@4", C: "~@2 x ~@4 x ~@3 x ~@3 x", D: "~@3 x ~ x ~ x", E: "~ x ~@6",
  F: "~@11 x ~@3 x", G: "~@3 x ~@3 x ~@8",
})).gain(0.55)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C ~ D E F G H G H G H G H G H G H I ~@14 J K L ~@2 M N M N M N M N M N M N M N M ~@15 O P Q ~ R@2 S R S R S R S R
  S R S R T ~@5 Q U@3 Q V W X Y Z AA AB AC AD AE AF AG AF AG AF AH AI AJ AK AI ~@2
>`.pickRestart({
  A: "~@8 x ~@4 x ~ x", B: "~@3 x ~ x ~@3 x ~@3 x ~@2", C: "x ~ x!2 ~ x ~@2", D: "~@6 x!2", E: "~ x!4 ~ x!2",
  F: "~@2 x ~ x ~@2 x ~ x ~ x ~ x ~ x", G: "~@3 x ~ x ~ x ~ x ~@3 x ~ x", H: "~@3 x ~ x ~ x ~ x ~ x ~ x ~ x",
  I: "~@3 x ~ x ~ x ~ x ~@6", J: "~@13 x ~@2", K: "~ x ~ x ~@3 x ~ x ~@3 x ~@2", L: "~ x!2 ~ x!2 ~ x", M: "x!2 ~ x!4 ~",
  N: "x!2 ~ x!5", O: "x ~@3 x ~ x ~@3 x ~@2 x ~@2", P: "~ x ~@3 x ~ x ~@3 x ~ x ~@2", Q: "~ x ~@14",
  R: "~@3 x ~ x ~@3 x ~ x ~ x ~ x", S: "~ x ~ x ~ x ~@3 x ~ x ~ x ~ x", T: "~ x ~ x ~@5 x ~@3 x ~ x", U: "~ x ~@6",
  V: "~ x ~@11 x ~@2", W: "~@9 x ~@6", X: "~@4 x ~@8 x ~@2", Y: "~@6 x ~@8 x", Z: "~@7 x ~@8", AA: "x!2 ~@2",
  AB: "~@2 x!2 ~ x!3", AC: "x ~ x!2 ~ x!3", AD: "x!4 ~ x!3", AE: "x ~@3 x ~ x ~@4 x ~ x ~ x",
  AF: "~ x ~ x ~ x ~ x ~@3 x ~ x ~ x", AG: "~ x ~@3 x ~ x ~@3 x ~ x ~ x", AH: "~ x ~ x ~@2 x ~ x ~@3 x ~ x ~",
  AI: "x!2 ~ x ~@4", AJ: "~@3 x ~ x!2 ~", AK: "x!2 ~ x ~ x!2 ~",
})).gain(0.35)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@5 A B C D C D C D C D C D C D C ~@19 E F E F E F E F E F E F E F E ~@19 G H G H G H G H G H G H G H G ~@16 I J I K L
  M L M L N F ~@5
>`.pickRestart({
  A: "x ~@4 x ~@2", B: "x", C: "~ x ~@9 x ~@4", D: "~ x ~@14", E: "~@2 x ~@4 x", F: "~ x ~@2", G: "~@7 x ~@8",
  H: "~ x ~@5 x ~@8", I: "~ x", J: "~ x ~@2 x ~@3", K: "~@2 x ~@6 x ~@6", L: "~@9 x ~@6", M: "~@3 x ~@5 x ~@6",
  N: "~@5 x ~@2",
})).gain(0.21)

// drums · crash
const crash = s("cr").struct("<~@89 x [~ x ~@6] [~@3 x ~@12] ~@23 [~@3 x ~@4] ~@4>").gain(0.35)

// drums · tambourine
const tambourine = s("tb").struct("<~@93 A B@3 A C D E F G H ~@16>".pickRestart({
  A: "~ x ~@14", B: "~ x ~@6", C: "~ x ~@11 x ~@2", D: "~@9 x ~@6", E: "~@4 x ~@8 x ~@2", F: "~@6 x ~@8 x",
  G: "~@7 x ~@8", H: "x!2 ~@2",
})).gain(0.48)

// drums · ride
const ride = s("rd").struct(`<
  ~@20
  [~@13 x ~ x]
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!13
  [~ x ~ x ~ x ~ x ~ x ~ x ~@4]
  ~@20
  [x!8]!14
  ~@51
>`).gain(0.41)

stack(
  bass, brass_section, string_ensemble_1, electric_guitar_clean, kick, clap, snare, snare_soft, low_tom, hihat,
  hihat_soft, crash, tambourine, ride
)

More by Cliff Richard