Strudelify

I Go to Extremes

Billy Joel

KeyC majorTempo130 bpm
0:00/0:00
// I Go to Extremes — Billy Joel
// 130 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 137 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B C D E B F G H I H J K L@2 J M N O P Q R A B C D E B F G S N T U V W X Y H I H J K L@2 J M N O P Q R A B C D E B
  F G S N T U V W X Y Z AA AB AC Z AA AD@2 AE AF AC AG AH AA AI R A B C D E B F G S N T U V W X Y V W X Y V W X Y S N T
  U V W X R A B C D E B F G S N T U V W X Y AJ@4
>`.pickRestart({
  A: "a#1@3 a#1 a#2@2 a#1@2 a#2@4 a#1@2 a#2@2", B: "a1@2 ~ a1 a2@2 a1@2 a2@2 a1@2 a2!2 a1@2",
  C: "c2@3 c2!2 ~ c2 ~ c2@6 g1@2", D: "c2@3 g1 c2 ~ c2 ~ c2@2 g1@2 c2@4",
  E: "a#1@2 ~ a#1 a#2@2 a#1@2 a#2@4 a#1@2 a#2@2", F: "c2@3 g1 c2 ~ c2 ~ c2@6 g1@2",
  G: "c2@3 g1 c2 ~ c2 ~ c2@2 g1@2 c2@3 ~", H: "c2@5 ~ c2 ~ c2@6 c3@2", I: "c2@5 ~ c2 ~ c2@7 ~",
  J: "c2@5 ~ c2 ~ c2@6 ~@2", K: "c2@5 ~ c2 ~ e2@5 ~ e2 ~", L: "f2@4 ~@2 f2 ~ f2@5 ~ f2 ~", M: "a#1@4 ~@2 a#1 ~ a#1@7 ~",
  N: "a1@5 ~ a1 ~ a1@7 ~", O: "g1@5 ~ g1 ~ g1@7 ~", P: "f#1@5 ~ f#1 ~ f#1@7 ~", Q: "g1@5 ~ g1 ~ g1@4 ~@2 g1@2",
  R: "c2 ~ c2 ~@5", S: "a#1@5 ~ a#1 ~ a#1@5 ~ a#1 ~", T: "d2@5 ~ d2 ~ d2@6 e2@2", U: "f2@5 ~ f2 ~ f2@5 ~@3",
  V: "a#1@4 ~@2 a#1 ~ a#1@5 ~ a#1 ~", W: "a1@5 ~ a1 ~ a1@5 ~ a1@2", X: "c2@4 ~@2 c2 ~ c2 ~ c2@4 g1@2",
  Y: "c2@4 ~@2 c2 ~ c2@6 ~@2", Z: "d2@3 ~ d2@3 ~ d2@3 ~ d2@4", AA: "a#1@3 ~ a#1@3 ~ a#1@3 ~ a#1@3 ~",
  AB: "f2@3 ~ f2@3 ~ f2@3 ~ f2@4", AC: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~", AD: "f2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~",
  AE: "a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~", AF: "f1@3 ~ f1@3 ~ f1@3 ~ f1@3 ~", AG: "g1@3 ~ g1@3 ~ g1@3 ~ g1@3 ~",
  AH: "d2@3 ~ d2@3 ~ d2@3 ~ d2@3 ~", AI: "f2@3 ~ f2@3 ~ f2@3 ~ f2@2 ~@2", AJ: "[c2@13 ~@3]/4",
})).s("gm_acoustic_bass").gain(0.64)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A B C D@2 B C E@2 F G H F I G J F K L M N O P B C D@2 B C E@2 Q R S T U V W@2 F G H F I G J F K L M N O P B C D@2 B C
  E@2 Q R S T U V W@2 X Y Z AA AB AC AD@2 AE AF AG AH AI AJ AK AL AM AN AO@2 AM AP AQ@2 Q R S T U V W@2 U V W@2 U V W@2
  AR AS AT AU U AV AW AX AM AN AO@2 AM AP AQ@2 AY AZ BA BB BC BD BE@2 BF@4
>`.pickRestart({
  A: "~@8 [c4,c5]@2 ~ [d4,d5] ~ [e4,e5] ~@2", B: "f4@5 ~ e4@6 c4@4, [a#2,d3,f3,a#3]@15 ~, c4@3 ~",
  C: "f4@5 ~ e4@5 ~ d4@3 ~, [a2,f3,a3,c4]@15 ~", // F
  D: "[[e4,g4,c5]@9 ~ [e4,g4,c5] ~@3 [c3,g3,e4,g4,c5]@10 c4 ~@2 d4 ~@2 e4 ~, c4@5 ~@3, [c3,g3]@13 ~@19]/2", // C C5
  E: "[[g3,c4,e4]@4 ~@10 c4 ~, [g4,c5]@15 ~, c3@20 c4 c3 c4 c3 c4 c3 c4 c3@3 ~@2, ~@4 e4@2 e4@9 ~, ~@5 g3@2 g3@8 ~]/2", // C C5
  F: "[g3,c4,e4]@15 ~", G: "[a3,c4,f4]", H: "[a3,c4,g4]@3 [a3,c4,d4,g4]", I: "[g3,c4,e4]", J: "[a3,c4,d4,g4]",
  K: "[a#3,d4,f4]!2, a#2", L: "c4@4 ~ [f4,a4,c5] [f4,a4,c5]@2, [f3,a3], [f4,a4]@5 ~@3, ~ c4",
  M: "~@3 [d4,g4], [c3,e4], g4@3 ~, c4@5 c4@3, ~ g3", N: "[f#3,a3,d4]!2", O: "[c3,g3,c4,e4,g4] [g2,g3,b3,d4]",
  P: "[c4,e4,g4] ~ [c3,g3,c4,e4,g4] ~@5, [c3,g3] ~@3 c2@11 ~", // C C5
  Q: "[g3,a#3,d4,g4]@5 ~ [g3,g4]@8 ~@2, ~@3 [a#3,d4]@3 ~@2", R: "[a3,c#4,g4]@5 ~ [a3,c#4,g4]@7 ~@3",
  S: "[d4,f4,a4]@3 [d4,f4,a4] ~@3 g#4, d3, a3@5 a3@3, f3 ~@7 [d4,f4,a4]@4 [d4,f4,a4]@4", // Dm
  T: "[c4,f4,g#4,c5]@3 ~ [f4,g#4,c5]@2 ~@4 [f4,g#4,c5]@4 ~@2, f3@4 [f3,c4]@3 ~, ~@3 c4@5 ~@8, ~@3 [f4,g#4,c5]@2 ~@3", // Fm F5 Fm
  U: "[a#3,c4,f4]@5 ~ [a#3,c4,e4]@5 ~ [a#3,c4,d4]@3 ~", V: "[a3,c4,f4]@5 ~ [a3,c4,e4]@5 ~ [a3,c4,d4]@2 ~@2",
  W: "[[c3,g3,c4,e4,g4]@3 ~ [c4,e4,g4]@2 ~@8 [c3,g3]@2 ~@2 [g4,c5]!2 [g4,c5]@2 [g4,c5]@2 ~@2 [c3,e3,g3]@5 ~, ~@3 [c3,g3]@6 [c3,g3]@5 ~@2 [c3,g3]@10 ~@6, ~@6 [c4,e4,g4]@6 [c4,e4]@19 ~, ~@12 g4@6 ~@6 [g4,c5]@7 ~]/2", // C C5 C C5 C C5
  X: "[d3,a3,d4,f4,a4]@3 ~ [d4,f4,a4]@2 [d4,f4,a4] ~@5 [d4,f4,a4]@4, ~@3 [d3,a3]@3 ~@2 [d4,f4,a4]@2 [d4,f4,a4]@2 ~@4, ~@9 [d3,a3]@2 [d3,a3]@5", // Dm D5 Dm D5
  Y: "[a#3,d4,f4]@3 ~ [a#3,d4,f4]@2 [a#3,d4,f4]@2 ~@4 [a#3,d4,f4]@4, ~@3 a#2@7 a#2@6, ~@2 [a#3,d4,f4] ~", // A#
  Z: "c4@3 ~ [g3,c4]@2 c4@3 ~ c4@2 c4@2 [f3,c4]@2, f2, f3@3 g3, a3@9 c3@7, ~@3 c3@3 g3@4 a3@6", // C5 F5
  AA: "~@2 [c4,e4,g4] ~@2 [c4,e4,g4] [c4,e4,g4]@2, c3, ~@3 g3@3 [c4,e4,g4]@4 ~@6, ~ g3", // C
  AB: "[a3,c4,f#4,a4]@3 ~ [c4,f#4,a4]@2 [c4,f#4,a4]@2 ~@6 c#4@2, d3@5 [d3,a3]@3, ~@3 a3@7 ~@6, ~@2 [c4,f#4,a4]!2", // F#dim D5 F#dim
  AC: "[a#2,a#3,d4,f4]@3 ~ [a#3,d4,f4]@2 [a#3,d4,f4]@2 ~@6 a#2@2, ~@3 a#2@5 a#2@2 a#2@4 ~@2, ~@9 [a#3,d4,f4]@3 [a#3,d4,f4]@4", // A#
  AD: "[c4@3 ~ [g3,c4]@2 c4@2 ~@4 [g3,c4]@2 ~ c4@2 ~ [g3,c4]@2 f2 c4@2 ~ c4@2 ~ [a3,c4]@2 f2 [g3,c4] ~, f3@15 ~@17, a3@9 a3@6 a3@6 a3@6 ~@5, ~@3 f2@5 f2 c4 f2@4 f2@2 ~ f2@3 ~@3 f2@3 f2@3 ~@3, ~@3 g3@3 ~@6 g3@3 ~]/2", // C5 Am C5
  AE: "~@6 e4@3 [e3,e4]@3 [e3,a3,e4]@4, a2, a3@3 ~, c4@3 b3@5, e4@4 e3@5 c4@7", // E A5
  AF: "[f3,a3,c4]@3 ~ [f3,a3,c4]@2 [f3,a3,c4]@2 ~ [f3,a3,c4]@2 ~ [f3,a3,c4]@4, ~@3 f2@4 ~ f2@3 f2@5", // F
  AG: "~@4 [d4,g4]@2 g4@2 ~ g4@2 ~@3 b3@2, c4@3 [d4,g4], e4@8 g3 e4@7, g4@4 ~@2 d4@5 g3@5, ~ c3@7", // G5
  AH: "[g3,b3,d4]@2 ~ [g3,d4]@2 ~ d4 ~@2 d4@3 [g3,d4]@2 [d3,g3,d4]@2, ~ g2@7, ~@3 b3@4 d4 d3@6 ~@2, ~@5 d3@2 a3@9, ~@6 g3@3 b3@7", // G G5
  AI: "[d4,f4,a4] ~@2 [f4,a4], [d3,a3]@3 [d3,a3] a4 [d3,a3]@3, ~ d4@3, ~ f4@2 ~, ~ a4 e4@2", // Dm F D5
  AJ: "[a#2,a#3,d4,f4]@3 ~ [a#3,d4,f4]@2 [a#3,d4,f4]@2 ~ [a#3,d4,f4]@2 ~ [a#3,d4,f4]@4, ~@3 a#2@5 a#2@3 a#2@5", // A#
  AK: "c4@3 ~ c4@2 c4@2 ~ c4@3 [g3,c4]@3 ~, f3@9 f3@6 ~, a3@6 a3@9 ~, ~@3 f2@5 f2@7 ~, ~ g3@2 ~", // C5
  AL: "[c4,e4,g4]@2 ~@2 [c4,e4,g4]@2 ~@2 [c4,e5]@2 ~ [d4,f5] ~@2 [e4,g5] ~, [c3,g3] ~@3 [c3,g3] ~@11", // C Dm Em C5
  AM: "[f4,a5]@5 ~ e4@6 [c4,e5]@4, [a#2,d3,f3,a#3]@15 ~, c4@3 ~, ~@3 g5@2 ~@3", // F C A#
  AN: "[f4,a5]@5 ~ [e4,g5]@5 ~ [d4,f5]@3 ~, [a2,f3,a3,c4]@15 ~", // F Em Dm F
  AO: "[[c4,c5]@4 [a4,c5,f5]!2 [a4,f5] ~@2 [g4,c5] [e4,c5] c4 [g4,c5]@2 c5@2 [a4,c5,f5]!2 ~ [a4,c5,f5] ~ [a4,c5,f5]!2 [a4,c5] e5@2 c4 [d4,f5] [g4,c5,e5] ~ [e4,g5] ~, [c3,g3]@13 ~ [c3,g3,e4]@10 ~@8, [e4,g4,e5]@9 ~ g4@2 ~@2 g4@4 ~@14, ~@6 c5@2 ~ e5@3 e5@6 ~@5 f5@2 ~@7, ~@14 c4 ~@9 c4 ~@7]/2", // C F Dm C5 C C5 F Am …
  AP: "[c5,f5,a5] [c5,f5,a5]@2 [c5,f5,a5]@2 [c5,f5,a5] [c5,f5,a5]@2 [c5,f5,a5]@2 ~@2 [d5,g5,b5]@2 [d5,g5,b5]@2, [a2,f3,a3,c4,f4], ~@3 e4@5, ~@5 [c5,f5,a5]@3, ~@3 d4", // F G F
  AQ: "[[e5,g5,c6] [e5,g5,c6]@2 [e5,g5,c6]@2 [e5,g5,c6] [e5,g5,c6]@2 c6!2 ~@2 [e5,g5,c6] a#5 ~@2 a5 [e5,g5] g5!2 ~@2 f5 ~@2 d#5 [c4,d#5,e5,g5,c6] [c3,e5,g5,c6] [c4,d5] ~ c5 ~, [g4,c5]@18 [e5,c6]@2 [c4,e5,g5,c6] c3 [c4,e5,g5,c6] [c3,f5] [c4,e5,g5,c6] c3@2 ~@5, [c3,c4]@15 [e5,g5,d6]@2 [a5,d6]@10 ~@5, g3@8 [e5,g5]@2 g3@3 [e5,g5,c6] [g3,a#5]@13 ~@5, e4@8 e4@2 [e5,g5,c6] a#5 e4@15 ~@5]/2", // C Em C Csus2 C5 C F5 C …
  AR: "[g3,a#3,d4,g4]@3 [g3,a#3,d4,g4]@4 ~", AS: "[a3,c#4,g4]@5 ~ [a3,c#4,g4]@8 ~@2",
  AT: "[f3,d4,f4,a4]@4 ~@2 [d4,f4,a4]@2 [d4,f4,a4]@2 a3 ~ [d4,f4,a4]@2 g#4 ~, [d3,a3]@11 ~@5", // Dm D5
  AU: "[c4,f4,g#4,c5]@3 ~ [f4,g#4,c5]@2 ~@2 [f3,c4]@2 [f4,g#4,c5] ~@5, f3@3 ~@5, ~@3 c4@3 [f4,g#4,c5]@4 ~@6", // Fm F5 Fm
  AV: "[a3,c4,f4]@5 ~ [a3,c4,e4]@5 ~ [a3,c4,d4]@3 ~", // F Am D7
  AW: "[c3,g3,c4,e4,g4]@3 ~ [c4,e4,g4] ~@7 [c4,e4,g4]@2 [c3,g3] ~, ~@3 [c3,g3]@2 ~ [c4,e4,g4]@6 ~@4, ~@9 [c3,g3]@5 ~@2", // C C5 C C5
  AX: "[c3,g3,c4,e4,g4]@2 ~@2 [c3,g3,c4,e4,g4]@2 ~@2 [c5,c6] ~@2 [a#4,a#5] ~@2 [a4,a5]@2, ~@9 [c5,c6]@7, ~@3 [a#4,a#5]", // C A# A C A#
  AY: "[a5,c6]!2 ~ [a5,c6]!2 ~ [a5,c6]!2 ~ [g5,c6]!2 ~ [g5,c6]!2 ~ [g5,c6], [g3,a#3,d4,g4]@5 ~ [g3,g4]@8 ~@2, ~@3 [a#3,d4]@3 ~@2", // Am C5 Gm G A#
  AZ: "[g5,c6] ~ [g5,c6]!2 ~ [a5,c6]!2 ~ [a5,c6]!2 ~ [g5,c6]!2 ~ [g5,c6] ~, [a3,c#4,g4]@5 ~ [a3,c#4,g4]@7 ~@3", // C5 Am C5 A7
  BA: "[f3,g6] c6 ~@2 g6@2 ~@4 g6@2 ~@2 [g#4,c6]@2, d3, a3@9 c6@5 ~@2, [d4,f4,a4]@3 g6@2 a3@3, ~@3 c6@3 [d4,f4,a4] c6 [d4,f4,a4]@4 [d4,f4,a4,g6]@4", // Fsus2 G# Dm
  BB: "[c6,f6,g#6]!2 ~ [c6,f6,g#6] [f4,g#4,c5,c6,f6,g#6]@2 [c6,f6,g#6] ~@3 e6 ~ [f5,g5,a5] [a4,b4,c5,d5,e5] [d4,e4,f4,g4] [a3,b3,c4], f3@7 [c6,f6,g#6]@2 g#6@3 b5@2 ~@2, [c4,f4,g#4,c5]@3 c4@5 [f3,c4]@5 ~@3, ~@6 [f4,g#4,c5]@3 [c6,f6]@2 [c6,d6,e6,f6]@3 ~@2, ~@10 [f4,g#4,c5,g6,a6]@3 ~@3", // Fm F Am Em7 Am Fm F5 Fm …
  BC: "[a#3,c4,f4,f5,a5]@5 ~ [a#3,c4,e4,e5,g5]@5 ~ [a#3,c4,d4,c5,e5]@3 ~", // F C7
  BD: "[a3,c4,f4,f5,a5]@5 ~ [a3,c4,e4,e5,g5]@5 ~ [a3,c4,d4,d5,f5]@2 ~@2", // F Am7 Dm7
  BE: "[c4 c4@2 c4 [c4,e4,g4]@2 ~@12 [g4,c5]!2 ~@2 [g4,c5]@2 ~@4 e6@3 ~, c5@9 [c3,g3,e4] f5@4 [c3,g3] g4 [c3,g3,a5]@2 a4 b5 [g4,c5] b4 c6@2 [g4,c5] d6 [c3,e3,g3] [d5,e5]@4 ~, e5@6 d4@25 ~, [c3,g3,e4,g4]@3 [c3,g3]@3 [c4,e4,g4] e5@5 [c4,e4,f4]@19 ~, ~@4 d5@8 g4 g5@18 ~]/2", // C C5 C C5 Am7 C5 C Dsus2 …
  BF: "[[c3,g3,c4]@49 ~@15, [c5,c6]@13 ~@3]/4", // C5 C
})).s("gm_piano").gain(0.6)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B C D@2 B E F G H@2 ~@6 I J K L M N B C D@2 B E F G O P Q R S T U G V@2 W X Y Z AA AB I J K L M N B C D@2 B E F G O
  P Q R S T U G AC AD AE AF AG AH AI AJ C AI AF AK AC AL AM AN B C D@2 B E F G O P Q R S T U G S T U G S T U G O P AO AP
  S AQ U AR B C D@2 B E F G O P Q R AS AT AU@2 AV@4
>`.pickRestart({
  A: "~@8 c4@3 d4@2 e4@2 ~", B: "[a#2,f3,a#3]@3 [a#2,f3,a#3]", C: "[a2,e3,a3]",
  D: "[[c3,g3,c4]@5 [c3,g3,c4]@2 [c3,g3,c4]@2 ~ [g3,c4]@6, ~@9 [g3,c4] ~@6, ~@19 c3@13]/2", // C5
  E: "[a2,e3,a3]@3 [a2,e3,a3]", F: "[c3,g3,c4]@4 ~ [g3,c4]@2 [c3,g3,c4], ~@4 [g3,c4] ~@3, ~@9 c3@5 ~@2",
  G: "[c3,g3,c4]@7 ~", H: "[[c3,g3]@31 ~]/2", I: "~@3 g4@5, a#3@7 ~, ~@3 c4@13", J: "~@3 f4@4 ~, a3, ~@3 c4@12 ~",
  K: "~@6 g3@9 ~, e4, ~@3 c4@13", L: "~@6 d4@7 ~@3, f#3@3 ~, ~@3 a3@9 ~@4", M: "[g3,c4,e4]@7 ~ [g3,b3,d4]@7 ~",
  N: "[g3,c4,e4]@2 ~@2 [c2,c3]@11 ~, ~@2 e4 ~@5, ~@4 [g3,c4] ~@11", O: "[d4,g4]@15 ~", P: "[c#4,g4]@7 ~",
  Q: "[d3,a3,d4]@13 ~@3, f3 ~@15", R: "[f2,f3,g#3,c4]@11 ~ [f2,f3,g#3,c4]@2 ~@2", S: "[a#2,f3,a#3,d4]@15 ~",
  T: "[f3,a3,c4]@3 ~", U: "[c3,g3,c4,e4]@15 ~",
  V: "[[g4,c5]@10 [g4,c5] ~@3 [g4,c5] ~ [g4,c5]@9 ~ [g4,c5] ~@5, [c3,g3]@31 ~]/2", // C5
  W: "[g4,c5]@5 ~ c5@2 ~@2 [a4,c5] ~@3 [a4,c5] ~", X: "[g4,c5]@5 ~ [g4,c5] ~@3 [g4,c5]@5 ~",
  Y: "[g4,c5]@9 ~ [g4,c5] ~@3 [g4,c5] ~", Z: "[a4,c5]@5 ~ [a4,c5] ~@3 [a4,c5] ~@3 [a4,c5] ~",
  AA: "[a4,c5]@5 ~ [a4,c5] ~@3 [a4,c5]@5 ~", AB: "[g4,c5]@6 [g4,c5] ~@3 [g4,c5]@4 ~@2", AC: "[d3,a3,d4]",
  AD: "~ b3 ~@14, [a#2,f3,a#3]", AE: "[f2,f3,a3]", AF: "[c3,g3,c4]", AG: "[d3,a3]@15 ~, f3 ~@15", AH: "[a#2,a#3]",
  AI: "[f2,c3,f3]", AJ: "~@2 [c4,f4]@5 ~, f2@7 ~, ~ c3@6 ~", AK: "[g2,d3,g3]@13 ~@3", AL: "[a#2,f3,a#3]",
  AM: "[f2,c3,f3,a3]@13 ~@3", AN: "[c3,g3,c4] ~ [c3,g3,c4] ~@5", AO: "[d3,a3,d4]@7 ~, f3@5 ~@11",
  AP: "[f2,f3,g#3,c4]@6 [f2,f3,g#3,c4] ~", AQ: "[f3,a3,c4]@7 ~", AR: "[c3,g3] ~ [c3,d#3,g3] ~@5",
  AS: "f5@5 ~ e5@6 c5@3 ~, [a#2,f3,a#3,d4]@15 ~", AT: "f5@5 ~ e5@6 d5@3 ~, [f3,a3,c4]@3 ~",
  AU: "[[c3,g3,c4,e4]@15 ~ [c3,g3,c4]@14 ~@2, c5@19 ~@13]/2", AV: "[[c3,g3,c4]@51 ~@13]/4",
})).s("gm_acoustic_guitar_steel").gain(0.44)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A B C D@2 B C E ~ F G H@3 I@3 J K L M N O P Q R S T U V W X Y Z AA AB AC AD@2 F G H@3 I@3 J K L M N O P Q R S T U V W
  X Y Z AA AB AC AD@2 AE AF AG AH AI AF AJ@2 AK AL AM AN AO AP AQ AR P Q R S T U V W X Y Z AA AB AC AD@2 AB AC AD@2 AB
  AC AD@2 X Y Z AA AS AT AU ~ P Q R S T U V W X Y Z AV AB ~ AW@2 AX@4
>`.pickRestart({
  A: "~@8 [c4,c5]@2 ~ [d4,d5]@2 e5@2 ~, ~@13 e4 ~@2", B: "f4@5 ~ e4@6 c4@3 ~", C: "f4@5 ~ e4@5 ~ d4@3 ~",
  D: "[c4@20 ~@4 c4 ~@2 d4 ~@2 e4 ~]/2", E: "c4@8 e4 ~@7",
  F: "[c3,g3,c4,e4] ~ [c4,e4] [c3,g3] ~ [c3,g3] [c4,e4] ~ [c4,e4] ~@2 [c3,g3]@2 [c3,g3] [c4,e4] [c3,g3], ~@10 [c4,e4]@3 ~@3", // C C5 C C5 C C5 C
  G: "[c4,f4] ~@2 c3 ~@2 [c4,f4] ~ [c4,f4]@2 c3 [c4,f4]@2 c3 [c4,f4] c3, ~@2 [c4,f4]@2 ~ c3@2 ~@9", // F5
  H: "[[c4,d4,g4]@2 [c4,d4,g4] c3@2 c3 [d4,g4]@2 [c4,d4,g4]@2 c3 [c4,d4,g4] ~@2 [c4,d4,g4] ~ [c4,e4]@2 ~ c3 ~@2 [c4,e4] ~ [c4,e4]@2 ~ c3@2 c3 [c4,e4] ~ [c4,e4]@2 [c4,e4] c3 ~ c3 [c4,e4] c3 [c4,e4]@2 [c4,e4] c3 ~@3 c3, ~@6 c4 ~@6 c3@2 c3@3 [c4,e4]@2 ~ c3@2 ~@3 [c4,e4]@3 ~@2 c3@4 ~@10 c3@2 ~, ~@23 [c4,e4]]/3", // Csus2 G5 Csus2 C
  I: "[[c4,f4] ~@2 c3@2 ~ [c4,f4] ~ [c4,f4]@2 c3 [c4,f4]@2 ~ [c4,f4] ~ [c4,d4,g4]@2 ~ c3 ~@2 [c4,d4,g4] c3 [c4,d4,g4]@2 ~ c3@2 c3 [c4,d4] ~@3 [c4,e4] [c3,g3] [c4,e4] ~ [c4,e4]@2 ~@6 [c4,e4] [c3,g3], ~@2 [c4,f4]@3 c3@2 ~@6 c3@2 c3@3 [c4,d4,g4]@2 ~ c3@2 ~@3 [c4,d4,g4]@4 g4@4 ~@6 [c4,e4]@2 [c4,e4]@2 [c4,e4]@2 ~@2, ~@41 [c3,g3]@2 [c3,g3]@2 [c3,g3]@2 ~]/3", // F5 Csus2 C C5 C C5 F5 Csus2 …
  J: "[a#4,d5,f5]!2, a#3", K: "~@5 c5 [e4,f4,c5]@2, f3, [a4,c5]@5 a4@3, f4@2 f4 ~, ~@3 c4@5",
  L: "g4@4 ~ [d5,g5]@3, [c4,e4,c5,e5], g5@5 ~@3, ~ g4", M: "[d4,f#4,a4]!2, [d3,a3]",
  N: "[c3,c4,e4,g4] [g3,d4,g4,b4,d5]", O: "[c4,g4,c5,e5,g5] ~ [c4,e4,g4,c5,e5,g5] ~@5, e4 ~@15",
  P: "[a#3,d4] a#2 [a#3,d4] a#2 [a#3,d4] ~ [a#3,d4] a#2 [a#3,d4] a#2 [a#3,d4] ~ [a#3,d4] ~ [a#3,d4] ~, f4@5 ~ e4@6 c4@2 ~@2", // A#
  Q: "[a3,c4] ~ [a3,c4]!2 ~ [a3,c4]!2 ~ [a3,c4] ~ [a3,c4]!2 ~ [a3,c4]!2 ~, f4@5 ~ e4@5 ~ d4@3 ~", // Am
  R: "[c4,e4] ~ [c4,e4] [c3,g3] [c4,e4] ~ [c4,e4] [c3,g3] [c4,e4] [c3,g3] [c3,g3,c4,e4] ~ [c4,e4] ~ [c4,e4] [c3,g3]", // C C5 C C5 C C5 C C5
  S: "[c4,e4] [c3,g3] [c4,e4] [c3,g3] [c4,e4] ~ [c4,e4] [c3,g3] c4 [c3,g3] [c4,e4] d4 [c4,e4] ~ [g3,e4] ~, ~@7 c3", // C C5 C C5 C C5 C
  T: "[a#3,d4] ~ [a#3,d4] a#2 ~ [a#3,d4] a#2 ~ [a#3,d4] ~ [a#3,d4] a#2 [a#3,d4] ~ [a#3,d4] ~, f4@5 ~ e4@6 c4@2 ~@2", // A#
  U: "[a3,c4] ~ [a3,c4]!2 ~ [a3,c4] f3 ~ [a3,c4]@2 f3 ~@2 f3 [a3,c4] ~, f4@5 ~ e4@5 [a3,c4]@2 ~@3, ~@12 d4@3 ~", // Am
  V: "[c3,c4]@2 e4 c3 ~@2 [c4,e4] ~ [c4,e4] c3 [c4,e4] c3 [c4,e4] ~ [c4,e4] c3, ~ c4 ~@6", // C
  W: "[c4,e4] ~ [c4,e4] c3 ~ c3 [c4,e4] ~ [c4,e4] c3 [c4,e4] c3 [c4,e4] ~@3", X: "[d4,g4]@11 ~ [d4,g4]@2 ~@2",
  Y: "[c#4,g4]@13 ~@3", Z: "[d4,f4]@11 ~@5", AA: "[f4,g#4,c5]@13 ~@3",
  AB: "[d4,f4]@2 ~ a#2 [a#3,d4,f4] ~ [a#3,d4,f4] ~ [a#3,d4,f4] ~ [a#3,d4,f4]@2 [a#3,d4,f4]@3 a#2, a#3@4 ~@5 a#2@6 ~, ~ [d4,f4] ~@6", // Dm A# Dm
  AC: "[a3,c4,f4]@2 [a3,c4,f4] [a3,c4,f4]@2 [a3,c4,f4] [a3,c4,f4]@2", // F
  AD: "[[c3,c4,e4,g4]@3 ~ [c4,e4,g4] ~ [c4,e4,g4] ~@5 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@2 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@2 ~@2 [c4,e4,g4] ~, g3@2 ~ [c3,g3]@2 ~@3 [c4,e4,g4]@4 ~@2 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@2 ~@4 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@2 ~@2, ~@9 [c3,g3]@6 [c3,g3]@4 [c3,g3]@6 [c3,g3]@4 [c3,g3]@2 ~]/2", // C C5 C C5
  AE: "[d4,f4,a4]@3 ~@3 [d4,f4,a4]@2, d3, a3!2, ~@3 [d4,f4,a4]@3 ~@2", // Dm
  AF: "[a#3,d4,f4]@3 ~@3 [a#3,d4,f4]@2, a#2!2, ~@3 [a#3,d4,f4]@3 ~@2", AG: "~@3 [f4,a4,c5]@3 [f4,a4,c5]@2, [f3,c4]",
  AH: "g4@6 ~@6 [e4,g4]@3 ~, [c3,c4]@15 ~, e4@10 g3@5 ~, ~@6 d4@9 ~, ~@3 g4@3 ~@2", // Em C
  AI: "~ f4 ~@4 [c4,f#4,a4]@6 [c4,f#4,a4]@4, [d3,a3], [c4,a4]@5 ~@11", // F#dim D5 F
  AJ: "[~@18 [f3,f4] [f3,f4]@3 [f3,f4]@2 [f3,f4]@2 [f3,f4]@2 [f3,f4]@3 ~, f2@31 ~, [f3,a3,c4]@6 [a3,c4]@25 ~, ~@4 c3@6 c3@21 ~, ~@3 f3@6 ~@7]/2", // F Am
  AK: "e5@2 ~ a4, [a3,e4,c5], a4@3 ~, ~ [b4,e5]", AL: "c5@2 ~ f4, a4, f4@3 ~, ~ [g4,c5]",
  AM: "g4@2 g4 [e4,g4], [c3,c4], e4@3 ~, ~ d4", AN: "[g3,b3,d4]@8 [g3,b3,d4]@7 ~, g2@15 ~",
  AO: "[d4,f4,a4]@3 [d4,f4,a4], [d3,a3]", AP: "[a#3,f4,a#4,d5]", AQ: "[f3,c4,f4,a4,c5]@11 ~@5",
  AR: "[c3,g3,c4,e4,g4] ~ [c3,g3,c4,e4,g4] ~@5", // C
  AS: "[a#3,d4,f4] ~ [d4,f4] a#2 [a#3,d4,f4] ~ [a#3,d4,f4] ~ [a#3,d4,f4] a#2 [a#3,d4,f4] ~ [a#3,d4,f4] ~@2 a#2", // A# Dm A#
  AT: "[a3,c4,f4]@3 ~ [a3,c4,f4] ~ [a3,c4,f4]@3 ~ [a3,c4,f4] ~ [a3,c4,f4] ~@3", // F
  AU: "[c3,g3,c4,e4,g4]@3 [c3,g3] [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] [c3,g3] ~@2 [c4,e4,g4] ~ [c4,e4,g4] [c3,g3]", // C C5 C C5 C C5
  AV: "[f4,c5]@13 ~@3, g#4 ~@15", // F5
  AW: "[~ c4@2 ~@25 e6@4, c5@7 e5@2 e4@3 f4 g5@2 g4 a5@2 a4 b5@2 b4 c6@2 c5 d6@2 [d5,e5]@5, ~@3 c4@29, ~@2 d5@3 f5@11, ~@3 d4@13]/2", // Dsus2
  AX: "[[c5,c6]@13 ~@3]/4", // C
})).s("gm_epiano2").gain(0.51)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@8 B@7 C B@4 D E A@16 B@7 C B@4 D E A@16 B@7 C B@6 D E A@8 B@7 C B@3 C B@2 A@2 B@6 A E A@2 B C A@6 B C A@4 F ~@3
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~ x ~@7", B: "x!2", C: "x ~@3 x ~@2 x", D: "x!4", E: "x!2 ~@2", F: "x",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct(`<
  A B@3 C B@3 C B@7 D B@5 E B@3 C B@3 F B@3 C B@3 F B@7 D B@5 E B@3 C B@3 F B@3 C B@3 F B@7 D B@7 E B@3 C B@3 C B@7 D
  B@3 D B@3 C B@7 E B@3 D B@3 C B@3 D B@3 G ~@4
>`.pickRestart({
  A: "~@8 x ~@2 x ~ x ~@2", B: "~ x ~ x", C: "~@4 x ~@9 x!2", D: "~@2 x ~@3 x!2", E: "x ~@3 x ~@9 x!2",
  F: "~@4 x ~@7 x ~ x!2", G: "~ x ~@2 x ~@2 x ~@2 x ~@3 x!2",
})).gain(0.72)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@4 A ~@3 A ~@7 B ~@9 A ~@7 A ~@11 B ~@9 A ~@7 A ~@11 B ~@11 A ~@3 A ~@7 B ~@3 B ~@3 A ~@11 B ~@3 A ~@3 B ~@3 A ~@4
>`.pickRestart({
  A: "~@12 x!2 ~@2", B: "~@13 x ~@2",
})).gain(0.24)

// drums · low tom
const low_tom = s("lt").struct("<~@22 A ~@29 A ~@31 A ~@31 A ~@15 B ~@4>".pickRestart({
  A: "x!2 ~@2", B: "~@7 x ~@2 x ~@3 x!2",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~ A@21 B A@29 B A@31 B A@31 B A@16 ~@4>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x",
})).gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<~@132 [~ x ~@2 x ~@7 x!2 ~@2] ~@4>").gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<~ A@21 ~ A@29 ~ A@31 ~ A@31 ~ A@16 B ~@3>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@3 A ~@7 A ~@5 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@5 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
// … 14 more lines

More by Billy Joel