Strudelify
Big Shot cover art

1988 · 52nd Street

Big Shot

Billy Joel

KeyC majorTempo156 bpm
0:00/0:00
// Big Shot — Billy Joel
// 156 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 141 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(156/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 · piano · "MAIN PIANO"
const piano = note(`<
  A@2 B@2 C@2 D@4 E@2 F@3 G@2 H I@2 J@3 K L@3 M@6 N O P Q@2 R@2 S T@4 U@3 V W@4 X@3 Y Z@4 AA@3 AB@2 AC AD@2 AE AF@2 AG
  AH@2 AI@3 AJ@2 AK@2 AL AM AN AO AP AM AQ AR@4 AS AT AU@2 AV AW@2 AX@2 AY@2 AZ@2 BA BB BC@2 BD@2 BE BF AX@2 AY@2 AZ@2
  BA BB BC@2 BD@2 BE BF AX@2 AY@2 AZ@2 BA BB BC@2 BD@2 ~
>`.pickRestart({
  A: "[~@22 [a3,d4]@5 ~ [a3,d4]@3 g3@3 [a3,d4]@3 g3@3 e3@3 d3@3 ~@2]/2", // D5
  B: "[~ [d3,g3]@3 ~@3 [d3,g3]@13 ~@2 [a3,d4]@5 ~ [a3,d4]@3 g3@3 [a3,d4]@3 g3@3 e3@3 d3@3 ~@2]/2", // G5 D5
  C: "[~ [d3,g3]@3 ~@9 [d3,g3]@3 ~@6 [a3,d4]@5 ~ [a3,d4]@3 g3@3 [a3,d4]@3 g3@3 e3@3 d3@3 ~@2]/2", // G5 D5
  D: "[~ [c#4,f4]@3 [d4,f#4]@3 [d4,f#4,b4]@13 ~@2 [c4,e4,g4]@8 ~ [c4,f4,a4]@3 ~@3 [c4,f4,a4]@6 [c4,f4,a4]@3 [c4,e4,g4]@5 ~@19 [b3,e4,a4]@5 ~ [b3,e4,a4]@5 ~ [b3,e4,a4]@3 g4@3 e4@3 d4@3 ~@2]/4", // C# D Bm C F C Esus4
  E: "[~ [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@8 ~@7 [b3,e4,a4]@6 [b3,e4,a4]@5 ~ [b3,e4,a4]@3 g4@3 e4@3 d4@3 ~@2]/2", // G Esus4
  F: "[~ [d4,g4,b4]@8 ~@13 [b3,e4,a4]@5 ~ [b3,e4,a4]@3 [b3,e4,a4]@3 [b3,e4,a4]@3 g4@3 e4@3 [d4,f#4,b4]@8 ~ [d4,f#4,b4]@3 [d4,f#4,b4]@3 [d4,f#4,b4]@3 a4@3 g4@3 [c4,f4,a4]@3 [c4,f4,a4]@2]/3", // G Esus4 Bm F
  G: "[~ [c4,e4,g4]@6 [c4,f4,a4]@3 ~@3 [c4,f4,a4]@3 ~@3 [c4,f4,a4]@3 [c4,e4,g4]@5 ~@19 [b3,e4,a4]@2]/2", // C F C Esus4
  H: "~ [b3,e4,a4]@3 [b3,e4,a4]@3 [b3,e4,a4]@3 [b3,e4,a4]@3 g4@3 e4@3 d4@3 [d4,g4,b4]@2", // Esus4 G
  I: "[~ [d4,g4,b4]@6 [d4,g4,b4]@6 a4@3 a4@3 a4@3 [b3,e4,a4]@5 ~ [b3,e4,a4]@5 ~ [b3,e4,a4]@3 g4@3 e4@3 d5@3 ~@2]/2", // G Esus4
  J: "[~ [d4,g4,b4]@8 ~@13 [b3,e4,a4]@5 ~ [b3,e4,a4]@3 [b3,e4,a4]@3 [b3,e4,a4]@3 g4@3 e4@3 [d4,f#4,b4]@8 ~ [d4,f#4,b4]@5 ~ [d4,f#4,b4]@3 a4@3 g4@3 [c4,f4,a4]@5]/3", // G Esus4 Bm F
  K: "~ [c4,e4,g4]@6 [c4,f4,a4]@3 ~@3 [c4,f4,a4]@3 ~@3 [c4,f4,a4]@3 [c4,e4,g4]@2", // C F C
  L: "[~ [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@8 ~ [d4,g4,b4]@3 ~@7 [d4,g4,b4]@9 [c4,f4,a4]@3 ~@4 [c4,f4,a4]@3 [g4,b4,d5]@5 ~ [f4,a4,c5]@5 ~]/3", // G F G F
  M: "[[d4,g4,b4]@5 ~@2 [e4,a4,c5]@3 [d4,g4,b4]@6 [e4,a4,c5]@3 [d4,g4,b4]@3 [c4,f4,a4]@8 ~@5 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@8 ~@2 [d4,g4,b4]@3 ~@6 [d4,g4,b4]@9 ~ [c4,f4,a4]@8 ~ [g4,b4,d5]@5 ~ [e4,a4,c5]@5 ~@2 [d4,g4,b4]@5 ~ [e4,a4,c5]@3 [d4,g4,b4]@6 ~ [c4,f4,a4]@6 [c4,f4,a4]@3 [c4,e4,g4]@5 ~@5 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@2]/6", // G Am G Am G F G F …
  N: "~ [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@8 ~ [c4,f4,a4]@3 ~@5", // G F
  O: "~ [d4,g4,b4]@9 ~ [c4,f4,a4]@3 ~@3 [c4,f4,a4]@3 [g4,b4,d5]@4", // G F G
  P: "~@3 [e4,a4,c5]@5 ~ [d4,g4,b4]@5 ~ [e4,a4,c5]@3 ~ [d4,g4,b4]@5", // Am G Am G
  Q: "[~ [e4,a4,c5]@3 [d4,g4,b4]@3 [c4,f4,a4]@8 ~@5 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4,a4]@8 ~ [c4,e4,g4]@3 ~]/2", // Am G F C
  R: "[~@5 [c4,f4,a4]@9 [c4,e4,g4]@3 ~@3 [d4,g4]@3 [d4,a4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@8 ~ [d4,f#4,a4]@3 ~]/2", // F C G5 D5 G D
  S: "~@5 [d4,g4,b4]@9 [d4,f#4,a4]@8 ~@2", // G D
  T: "[~@11 [a3,d4]@5 ~ [a3,d4]@3 g3@3 [a3,d4]@3 g3@3 e3@3 d3@3 ~@3 [d3,g3]@3 ~@3 [d3,g3]@13 ~@2 [a3,d4]@5 ~ [a3,d4]@3 g3@3 [a3,d4]@3 g3@3 e3@3 d3@3 ~@3 [d3,g3]@3 ~@7]/4", // D5 G5 D5 G5
  U: "[~@2 [d3,g3]@3 ~@6 [a3,d4]@5 ~ [a3,d4]@3 g3@3 [a3,d4]@3 g3@3 e3@3 d3@3 ~@3 [c#4,f4]@3 [d4,f#4]@3 [d4,f#4,b4]@13 ~@2 [c4,e4,g4]@8 ~ [c4,f4,a4]@3 ~]/3", // G5 D5 C# D Bm C F
  V: "~@2 [c4,f4,a4]@6 [c4,f4,a4]@3 [c4,e4,g4]@5 ~@8", // F C
  W: "[~@11 [b3,e4,a4]@5 ~ [b3,e4,a4]@5 ~ [b3,e4,a4]@3 g4@3 e4@3 d4@3 ~@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@8 ~@7 [b3,e4,a4]@5 ~ [b3,e4,a4]@5 ~ [b3,e4,a4]@3 g4@3 e4@3 d4@3 ~@3 [d4,g4,b4]@8 ~@2]/4", // Esus4 G Esus4 G
  X: "[~@11 [b3,e4,a4]@5 ~ [b3,e4,a4]@3 [b3,e4,a4]@3 [b3,e4,a4]@3 g4@3 e4@3 [d4,f#4,b4]@8 ~ [d4,f#4,b4]@3 [d4,f#4,b4]@3 [d4,f#4,b4]@3 a4@3 g4@3 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,e4,g4]@6 [c4,f4,a4]@3 ~]/3", // Esus4 Bm F C F
  Y: "~@2 [c4,f4,a4]@3 ~@3 [c4,f4,a4]@3 [c4,e4,g4]@5 ~@8", // F C
  Z: "[~@11 [b3,e4,a4]@3 [b3,e4,a4]@3 [b3,e4,a4]@3 [b3,e4,a4]@3 [b3,e4,a4]@3 g4@3 e4@3 d4@3 [d4,g4,b4]@3 [d4,g4,b4]@6 [d4,g4,b4]@6 a4@3 a4@3 a4@3 [b3,e4,a4]@5 ~ [b3,e4,a4]@5 ~ [b3,e4,a4]@3 g4@3 e4@3 d5@3 ~@3 [d4,g4,b4]@8 ~@2]/4", // Esus4 G Esus4 G
  AA: "[~@11 [b3,e4,a4]@5 ~ [b3,e4,a4]@3 [b3,e4,a4]@3 [b3,e4,a4]@3 g4@3 e4@3 [d4,f#4,b4]@8 ~ [d4,f#4,b4]@5 ~ [d4,f#4,b4]@3 a4@3 g4@3 [c4,f4,a4]@6 [c4,e4,g4]@6 [c4,f4,a4]@3 ~]/3", // Esus4 Bm F C F
  AB: "[~@2 [c4,f4,a4]@3 ~@3 [c4,f4,a4]@3 [c4,e4,g4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@8 ~ [d4,g4,b4]@3 ~]/2", // F C G
  AC: "~@6 [d4,g4,b4]@9 [c4,f4,a4]@3 ~@4 [c4,f4,a4]@2", // G F
  AD: "[~ [g4,b4,d5]@5 ~ [f4,a4,c5]@5 ~ [d4,g4,b4]@5 ~@2 [e4,a4,c5]@3 [d4,g4,b4]@6 [e4,a4,c5]@3 [d4,g4,b4]@3 ~ [c4,f4,a4]@8 ~@4]/2", // G F G Am G Am G F
  AE: "[d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@8 ~", // G
  AF: "[~ [d4,g4,b4]@3 ~@6 [d4,g4,b4]@9 ~ [c4,f4,a4]@8 ~ [g4,b4,d5]@5 ~@2 [e4,a4,c5]@5 ~ [d4,g4,b4]@5 ~]/2", // G F G Am G
  AG: "[e4,a4,c5]@3 [d4,g4,b4]@6 ~ [c4,f4,a4]@6 [c4,f4,a4]@3 [c4,e4,g4]@5", // Am G F C
  AH: "[~@5 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@8 ~ [c4,f4,a4]@3 ~@7 [d4,g4,b4]@9]/2", // G F G
  AI: "[[c4,f4,a4]@3 ~@3 [c4,f4,a4]@3 ~ [g4,b4,d5]@5 ~ [e4,a4,c5]@5 ~ [d4,g4,b4]@5 ~@2 [e4,a4,c5]@3 [d4,g4,b4]@6 [e4,a4,c5]@3 [d4,g4,b4]@3 [c4,f4,a4]@8 ~@5 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4,a4]@3]/3", // F G Am G Am G Am G …
  AJ: "[[c4,f4,a4]@8 ~ [c4,e4,g4]@3 ~@6 [c4,f4,a4]@9 [c4,e4,g4]@3 ~@3 [d4,g4]@3 [d4,a4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3]/2", // F C F C G5 D5 G
  AK: "[[d4,g4,b4]@8 ~ [d4,f#4,a4]@3 ~@6 [d4,g4,b4]@9 [d4,f#4,a4]@8 ~ [d4,f#4,a4]@3 [d4,g4,b4]@8 ~]/2", // G D G D G
  AL: "~@3 [f4,a4,c5] ~ [a4,c5,f5] ~ d5", AM: "[g4,e5]@3 c5@3 [f4,d5]@3 [e4,c5]@8 ~@7",
  AN: "~@3 [d4,g4,b4] ~ [g4,b4,e5] ~ b4", AO: "[f#4,d5]@5 ~@10 [d4,f#4,a4]@8 ~",
  AP: "~ [c4,f4,a4] ~ [f4,a4,c5] ~ [a4,c5,f5] ~ d5", AQ: "~ [b3,d4,g4] ~ [d4,g4,b4] ~ [g4,b4,e5] ~ b4",
  AR: "[d5@3 [d4,f#4,a4]@8 ~@4 [d4,f#4,a4]@6 [b3,e4,a4]@6 [b3,e4,a4]@6 [b3,e4,a4]@6 a4@3 g4@3 [d4,g4,b4]@6 [d4,g4,b4]@6 [d4,g4,b4]@6 a4@3 a4@3 [b3,e4,a4]@6 [b3,e4,a4]@3 [b3,e4,a4]@3 [b3,e4,a4]@3 ~@12]/4", // D Esus4 G Esus4
  AS: "[d4,g4,b4]@5 ~@10 [g4,b4,d5]@3 [g4,b4,d5]@3 [g4,b4,d5]@3", AT: "[g4,b4,e5]!3 [g4,b4,e5]@2 [g4,b4,d5]!3",
  AU: "[[b4,g5] [d4,f#4,a4]!2 [d4,f#4,a4]@2 [d4,f#4,a4]!2 [c4,f4,a4]@2 [c4,e4,g4]@2 [c4,f4,a4] ~ [c4,f4,a4]@2 [c4,f4,a4]]/2", // Em D F C F
  AV: "[c4,e4,g4] [d4,g4,b4]!7", // C G
  AW: "[[d4,g4,b4]@8 ~ [c4,f4,a4]@3 ~@6 [d4,g4,b4]@9 [c4,f4,a4]@3 ~@6 [g4,b4,d5]@5 ~ [e4,a4,c5]@5 ~]/2", // G F G F G Am
  AX: "[[d4,g4,b4]@5 ~ [e4,a4,c5]@3 [d4,g4,b4]@6 [e4,a4,c5]@3 [d4,g4,b4]@3 [c4,f4,a4]@8 ~@4 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3]/2", // G Am G Am G F G
  AY: "[[d4,g4,b4]@8 ~ [c4,f4,a4]@6 ~@3 [d4,g4,b4]@9 [c4,f4,a4]@3 ~@6 [g4,b4,d5]@5 ~ [e4,a4,c5]@5 ~]/2", // G F G F G Am
  AZ: "[[d4,g4,b4]@5 ~ [e4,a4,c5]@3 [d4,g4,b4]@6 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,e4,g4]@8 ~@10 [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,g4,b4]@3]/2", // G Am G F C G
  BA: "[d4,g4,b4]!3 [c4,f4,a4]!3 [d4,g4,b4]!2", // G F G
  BB: "[d4,g4,b4]@3 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4,a4]@3 [g4,b4,d5]@5 ~ [e4,a4,c5]@5 ~", // G F G Am
  BC: "[[d4,g4,b4]@5 ~ [e4,a4,c5]@3 [d4,g4,b4]@6 [e4,a4,c5]@3 [d4,g4,b4]@3 [c4,f4,a4]@8 ~@4 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4,a4]@3]/2", // G Am G Am G F
  BD: "[[c4,f4,a4]@8 ~ [c4,e4,g4]@8 ~ [c4,f4,a4]@9 [c4,e4,g4]@19 ~@2]/2", // F C F C
  BE: "[d4,g4,b4]@8 ~ [c4,f4,a4]@3 ~@6 [d4,g4,b4]@5 ~", // G F G
  BF: "[d4,g4,b4]@3 [c4,f4,a4]@3 ~@6 [g4,b4,d5]@5 ~ [e4,a4,c5]@5 ~", // G F G Am
})).s("gm_piano").gain(0.64)

// bass · piano · "BASS PIANO"
const bass = note(`<
  A@2 B@2 C@6 D@2 E@2 F G@3 H@2 E@2 F I@4 J K L@4 M@8 N O@2 ~ P Q@3 R@8 S@8 T U V W@2 X Y Z AA AB@3 AC AD@2 AE AF AG AH
  AI AJ AG AH AI AK AL AM AN AM AN AE AO AP AQ@3 AR AS@3 AT AQ@3 AU AD@2 AQ@3 AR AS@3 AT AQ@3 AU AD@2 AQ@3 AR AS@3 AT
  AQ@3 AU AD@2 ~
>`.pickRestart({
  A: "[~@22 [e1,e2]@5 ~@21]/2", B: "[~ [g1,g2]@3 ~@3 [g1,g2]@13 ~@2 [e1,e2]@5 ~@21]/2",
  C: "[~@22 [e1,e2]@5 ~@19 [d2,d3]@10 ~@2 [d2,d3]@10 ~@2 c2@15 g2@8 ~ [c2,c3]@5 ~@19 [e1,e2]@5 ~@7 [e1,e2]@5 ~@9]/6", // E D C E
  D: "[~ [g1,g2]@3 ~@3 d2@3 [g1,g2]@10 ~@2 [e1,e2]@6 ~@3 b1@3 [e1,e2]@5 ~@9]/2", // G E
  E: "[~ [g1,g2]@3 ~@3 d2@3 [g1,g2]@10 ~@2 [e1,e2]@5 ~@4 b1@3 [e1,e2]@5 ~@7 [d2,d3]@2]/2", // G E D
  F: "~ [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [c2,c3]@2", // D C
  G: "[~ [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@5 ~@19 [e1,e2]@5 ~@4 b1@3 [e1,e2]@5 ~@9]/3", // C E
  H: "[~ [g1,g2]@3 ~@3 d2@3 [g1,g2]@10 ~@2 [e1,e2]@5 ~@4 b1@3 [e1,e2]@5 ~@9]/2", // G E
  I: "[~ [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@5 ~@19 [f1,f2]@5 ~@7 [c2,c3]@11 ~@2 [f1,f2]@5 ~@8 [c2,c3]@11 ~]/4", // C F C F C
  J: "[f1,f2]@5 ~@8 [c2,c3]@11", K: "~@2 [f1,f2]@5 ~ [f1,f2]@5 ~@4 [c2,c3]@7",
  L: "[~@2 [g1,g2]@5 ~@8 [d2,d3]@11 ~ [g1,g2]@5 ~@8 [d2,d3]@11 ~@2 [g1,g2]@5 ~@7 [d2,d3]@11 ~@5 [c2,c3]@3 [c2,c3]@5 ~@5 [e2,e3]@2]/4", // G D G D G D C E
  M: "[~ [e2,e3]@5 ~ [f1,f2]@5 ~@7 [c2,c3]@11 ~@2 [f1,f2]@5 ~@7 [c2,c3]@11 ~@2 [f1,f2]@5 ~@8 [c2,c3]@11 ~ [f1,f2]@8 ~@2 [f1,f2]@6 [f1,f2]@3 [a1,a2]@3 [a#1,a#2]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]]/8", // E F C F C F C F …
  N: "~@2 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [e1,e2]@5 ~@8", O: "[~@14 [g1,g2]@3 ~@3 [g1,g2]@13 ~@2 [e1,e2]@5 ~@8]/2",
  P: "~@11 [e1,e2]@5 ~@8", Q: "[~@11 [d2,d3]@10 ~@2 [d2,d3]@10 ~@2 c2@15 g2@8 ~ [c2,c3]@5 ~@8]/3",
  R: "[~@11 [e1,e2]@5 ~@7 [e1,e2]@5 ~@10 [g1,g2]@3 ~@3 d2@3 [g1,g2]@10 ~@2 [e1,e2]@5 ~@4 b1@3 [e1,e2]@5 ~@10 [g1,g2]@3 ~@3 d2@3 [g1,g2]@10 ~@2 [e1,e2]@5 ~@4 b1@3 [e1,e2]@5 ~@7 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@5 ~@8]/8", // E G E G E D C
  S: "[~@11 [e1,e2]@5 ~@4 b1@3 [e1,e2]@5 ~@10 [g1,g2]@3 ~@3 d2@3 [g1,g2]@10 ~@2 [e1,e2]@5 ~@4 b1@3 [e1,e2]@5 ~@10 [g1,g2]@3 ~@3 d2@3 [g1,g2]@10 ~@2 [e1,e2]@5 ~@4 b1@3 [e1,e2]@5 ~@7 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@3 [c2,c3]@5 ~@8]/8", // E G E G E D C
  T: "~@11 [f1,f2]@5 ~@8", U: "[c2,c3]@11 ~ [f1,f2]@5 ~@7", V: "~ [c2,c3]@11 ~ [f1,f2]@5 ~@6",
  W: "[~@2 [c2,c3]@11 ~@2 [f1,f2]@5 ~ [f1,f2]@5 ~@4 [c2,c3]@8 ~ [g1,g2]@5 ~@4]/2", // C F C G
  X: "~@4 [d2,d3]@11 ~@2 [g1,g2]@5 ~@2", Y: "~@5 [d2,d3]@11 ~@2 [g1,g2]@5 ~", Z: "~@6 [d2,d3]@11 ~@5 [c2,c3]@2",
  AA: "~ [c2,c3]@5 ~@5 [e2,e3]@3 [e2,e3]@5 ~ [f1,f2]@4", // C E F
  AB: "[~@8 [c2,c3]@11 ~@2 [f1,f2]@5 ~@8 [c2,c3]@11 ~ [f1,f2]@5 ~@8 [c2,c3]@11 ~@2]/3", // C F C F C
  AC: "[f1,f2]@8 ~ [f1,f2]@6 [f1,f2]@3 [a1,a2]@3 [a#1,a#2]@3", AD: "[c2,c3]!8", AE: "[d2,d3]!8",
  AF: "[d2,d3]@5 ~ [d2,d3]@5 ~ [d2,d3]@10 ~@2", AG: "[f1,f2]@5 ~@4 [a1,a2]@3 ~@6 [c2,c3]@5 ~",
  AH: "~@6 [c2,c3]@5 ~@4 [e2,e3]@8 ~", AI: "[g1,g2]@5 ~@4 [b1,b2]@3 ~@6 [d2,d3]@5 ~",
  AJ: "~@6 [d1,d2]@5 ~@4 [e1,e2]@8 ~", AK: "~ [d2,d3]!7", AL: "[e1,e2]@5 ~@7 [e1,e2]@5 ~@7",
  AM: "~@3 [g1,g2]@3 ~@3 d2@3 [g1,g2]@10 ~@2", AN: "[e1,e2]@5 ~@4 b1@3 [e1,e2]@5 ~@7",
  AO: "[c2,c3]@8 ~ [e1,e2]@3 ~@3 [g1,g2]@6 [a1,a2]@3", AP: "[c2,c3]@5 ~@19", AQ: "[f1,f2]@5 ~@7 [c2,c3]@10 ~@2",
  AR: "[f1,f2]@5 ~ [f1,f2]@5 ~@4 [c2,c3]@8 ~", AS: "[g1,g2]@5 ~@7 [d2,d3]@10 ~@2",
  AT: "~@3 [c2,c3]@3 [c2,c3]@5 ~@4 [e2,e3]@3 [e2,e3]@5 ~", // C E
  AU: "[f1,f2]@8 ~ [f1,f2]@3 [f1,f2]@5 ~ [a1,a2]@3 [a#1,a#2]@3", // F A A#
})).s("gm_piano").gain(0.64)

// bass · fretless bass · "BASS"
const bass_2 = note(`<
  A@2 B@2 C@6 D@2 E@2 F G@3 H@2 E@2 F I@4 J K L@4 M@8 N O@2 P Q R@3 S@8 T@8 U V W X@2 Y Z AA AB AC@3 AD AE@2 AF AG AH AI
  AJ AK AH AI AJ AL AM AN AO AN AO AF AP AQ AR@3 AS AT@3 AU AR@3 AV AE@2 AR@3 AS AT@3 AU AR@3 AV AE@2 AR@3 AS AT@3 AU
  AR@3 AV AE@2 ~
>`.pickRestart({
  A: "[~@22 e1@5 ~@21]/2", B: "[~ g1@3 ~@3 g1@13 ~@2 e1@5 ~@21]/2",
  C: "[~ g2@3 f2@5 ~@4 d2@3 c2@3 a#1@3 e1@5 ~@19 d2@10 ~@2 d2@10 ~@2 c2@15 g2@8 ~ c2@5 ~@19 e1@5 ~@7 e1@5 ~@9]/6",
  D: "[~ g1@3 ~@3 d2@3 g1@10 ~@2 e1@6 ~@3 b1@3 e1@5 ~@9]/2",
  E: "[~ g1@3 ~@3 d2@3 g1@10 ~@2 e1@5 ~@4 b1@3 e1@5 ~@7 d2@2]/2", F: "~ d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 c2@2",
  G: "[~ c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@5 ~@19 e1@5 ~@4 b1@3 e1@5 ~@9]/3",
  H: "[~ g1@3 ~@3 d2@3 g1@10 ~@2 e1@5 ~@4 b1@3 e1@5 ~@9]/2",
  I: "[~ c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@5 ~@19 f1@5 ~@7 c2@11 ~@2 f1@5 ~@8 c2@11 ~]/4", J: "f1@5 ~@8 c2@11",
  K: "~@2 f1@5 ~ f1@5 ~@4 c2@7", L: "[~@2 g1@5 ~@8 d2@11 ~ g1@5 ~@8 d2@11 ~@2 g1@5 ~@7 d2@11 ~@5 c2@3 c2@5 ~@5 e2@2]/4",
  M: "[~ e2@5 ~ f1@5 ~@7 c2@11 ~@2 f1@5 ~@7 c2@11 ~@2 f1@5 ~@8 c2@11 ~ f1@8 ~@2 f1@6 f1@3 a1@3 a#1@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2]/8",
  N: "~@2 d2@3 d2@3 d2@3 e1@5 ~@8", O: "[~@14 g1@3 ~@3 g1@13 ~@2 e1@5 ~@8]/2", P: "~@14 g2@3 f2@5 ~@2",
  Q: "~@2 d2@3 c2@3 a#1@3 e1@5 ~@8", R: "[~@11 d2@10 ~@2 d2@10 ~@2 c2@15 g2@8 ~ c2@5 ~@8]/3",
  S: "[~@11 e1@5 ~@7 e1@5 ~@10 g1@3 ~@3 d2@3 g1@10 ~@2 e1@5 ~@4 b1@3 e1@5 ~@10 g1@3 ~@3 d2@3 g1@10 ~@2 e1@5 ~@4 b1@3 e1@5 ~@7 d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@5 ~@8]/8",
  T: "[~@11 e1@5 ~@4 b1@3 e1@5 ~@10 g1@3 ~@3 d2@3 g1@10 ~@2 e1@5 ~@4 b1@3 e1@5 ~@10 g1@3 ~@3 d2@3 g1@10 ~@2 e1@5 ~@4 b1@3 e1@5 ~@7 d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@5 ~@8]/8",
  U: "~@11 f1@5 ~@8", V: "c2@11 ~ f1@5 ~@7", W: "~ c2@11 ~ f1@5 ~@6",
  X: "[~@2 c2@11 ~@2 f1@5 ~ f1@5 ~@4 c2@8 ~ g1@5 ~@4]/2", Y: "~@4 d2@11 ~@2 g1@5 ~@2", Z: "~@5 d2@11 ~@2 g1@5 ~",
  AA: "~@6 d2@11 ~@5 c2@2", AB: "~ c2@5 ~@5 e2@3 e2@5 ~ f1@4",
  AC: "[~@8 c2@11 ~@2 f1@5 ~@8 c2@11 ~ f1@5 ~@8 c2@11 ~@2]/3", AD: "f1@8 ~ f1@6 f1@3 a1@3 a#1@3", AE: "c2!8",
  AF: "d2!8", AG: "d2@5 ~ d2@5 ~ d2@10 ~@2", AH: "f1@5 ~@4 a1@3 ~@6 c2@5 ~", AI: "~@6 c2@5 ~@4 e2@8 ~",
  AJ: "g1@5 ~@4 b1@3 ~@6 d2@5 ~", AK: "~@6 d1@5 ~@4 e1@8 ~", AL: "~ d2!7", AM: "e1@5 ~@7 e1@5 ~@7",
  AN: "~@3 g1@3 ~@3 d2@3 g1@10 ~@2", AO: "e1@5 ~@4 b1@3 e1@5 ~@7", AP: "c2@8 ~ e1@3 ~@3 g1@6 a1@3", AQ: "c2@5 ~@19",
  AR: "f1@5 ~@7 c2@10 ~@2", AS: "f1@5 ~ f1@5 ~@4 c2@8 ~", AT: "g1@5 ~@7 d2@10 ~@2", AU: "~@3 c2@3 c2@5 ~@4 e2@3 e2@5 ~",
  AV: "f1@8 ~ f1@3 f1@5 ~ a1@3 a#1@3",
})).s("gm_fretless_bass").gain(0.56)

// chords · distortion guitar · "ROCK GUITAR"
const distortion_guitar = note(`<
  A@2 B@2 C@2 D@4 E@2 F@3 G@2 H I@2 J@3 K L@3 M@6 N@5 O@2 P Q@4 R@3 S T@4 U@3 V W@4 X@3 Y Z AA AB AC AD AE AF AG AH@4 AI
  AJ@2 AK@2 ~@8 AL AM AL AN AO AP@2 AQ ~@28 AR AS AT@2 AU AV AW@2 AR AS AT@2 ~@3
>`.pickRestart({
  A: "[~@22 [d3,a3,d4]@5 ~ [d3,a3]@3 g3@3 [a3,d4]@3 g3@3 e3@3 d3@3 ~@2]/2", // D5
  B: "[~ [g3,b3,d4]@3 ~@3 [g3,b3,d4]@13 ~@2 [d3,a3]@5 ~ [d3,a3]@3 g3@3 [a3,d4]@3 g3@3 e3@3 d3@3 ~@2]/2", // G D5
  C: "[~ [d3,g3,b3]@3 ~@9 [d3,g3,b3]@3 ~@6 [d3,a3]@5 ~ [d3,a3]@3 g3@3 [a3,d4]@3 g3@3 e3@3 d3@3 ~@2]/2", // G D5
  D: "[~ [c#4,f4]@3 [d4,d#4,f#4,g4] [e4,g#4] [f4,a4] [d4,f#4,b4]@13 ~@2 [g3,c4,e4]@8 ~ [c4,f4,a4]@3 ~@3 [a3,c4,f4]@6 [a3,c4,f4]@3 [g3,c4,e4]@5 ~@19 [a3,b3,e4]@5 ~@7 [a3,b3,e4]@6 ~@8, ~@7 a#4 ~@88]/4", // C# D#maj7 E F Bm C F C …
  E: "[~ [b3,d4,g4]@3 ~@3 [b3,d4,g4]@9 ~@6 [a3,b3,e4]@5 ~@7 [a3,b3,e4]@3 ~@11]/2", // G Asus2
  F: "[~ [g3,b3,d4]@9 ~@12 [b3,e4,a4]@5 ~@7 [b3,e4,a4]@3 ~@4 [c4,f4,a#4]@2 [d4,f#4,b4]@8 ~ [d4,f#4,b4]@3 [d4,f#4,b4]@3 [d4,f#4,b4]@3 [d4,f#4,b4]@3 [d4,f#4,b4]@3 [c4,f4,a4]@3 [c4,f4,a4]@2, ~@20 [b3,e4,a4] ~@15]/3", // G Esus4 Fsus4 Bm F Esus4
  G: "[~ [c4,e4,g4]@6 [c4,f4,a4]@3 ~@3 [c4,f4,a4]@3 ~@3 [c4,f4,a4]@3 [c4,e4,g4]@5 ~@19 [b3,e4,a4]@2]/2", // C F C Esus4
  H: "~@10 [b3,e4,a4]@3 ~@11", I: "[~ [b3,d4,g4]@3 ~@3 [b3,d4,g4]@9 ~@6 [b3,e4,a4]@5 ~@7 [b3,e4,a4]@3 ~@11]/2",
  J: "[~ [b3,d4,g4]@9 ~@12 [a3,b3,e4]@5 ~@7 [a3,b3,e4]@3 [b3,c4,c#4,f4,f#4] ~ [c4,d4,d#4,g4] [c#4,e4,g#4] [c#4,f4,a4] [d4,f4,a#4] [d4,f#4,b4]@8 ~ [b3,d4,f#4]@3 [b3,d4,f#4]@3 [b3,d4,f#4]@3 ~@6 [c4,f4,a4]@5]/3", // G Asus2 Bsus2 Cm C#m C#aug A# Bm …
  K: "~ [c4,e4,g4]@6 [c4,f4,a4]@3 ~@3 [c4,f4,a4]@3 ~@3 [c4,f4,a4]@3 [c4,e4,g4]@2", // C F C
  L: "[~@22 f3@6 ~@6 c4@13 f3@6 ~@7 c4@12]/3",
  M: "[f3@6 ~@7 c4@13 ~@9 [b3,d4,g4]@3 [b3,d4,g4]@3 [b3,d4,g4]@3 [b3,d4,g4]@3 [b3,d4,g4]@3 g3@6 ~@7 d4@12 g3@6 ~@7 d4@13 g3@6 ~@6 d4@13 ~@3 [g3,c4,e4]@3 [g3,c4,e4]@6 ~@4 [g3,b3,d4]@2]/6", // G C G
  N: "[~ [g3,b3,d4]@6 f3@6 ~@6 c4@13 f3@6 ~@6 c4@13 f3@6 ~@7 c4@13 ~@9 [f3,a3,c4]@3 [f3,a3,c4]@3 [f3,a3,c4]@3 [f3,a3,c4]@3 [f3,a3,c4]@3 [a3,c4,f4]@3 ~@6 [g3,c4,e4]@3 ~]/5", // G F C
  O: "[~@5 [a3,c4,f4]@9 [g3,c4,e4]@3 ~@3 [d4,g4]@3 [d4,g4]@3 [b3,d4,g4]@3 [b3,d4,g4]@3 [b3,d4,g4]@3 [b3,d4,g4]@8 ~ [a3,d4,f#4]@3 ~]/2", // F C G5 G D
  P: "~@5 [b3,d4,g4]@9 [a3,d4,f#4]@3 ~@7", // G D
  Q: "[~@11 [d3,a3]@5 ~ [a3,d4]@3 g3@3 [a3,d4]@3 g3@3 e3@3 d3@3 ~@3 [g3,b3]@3 ~@3 [g3,b3]@13 ~@2 [a3,d4]@5 ~ [a3,d4]@3 g3@3 [a3,d4]@3 g3@3 e3@3 d3@3 ~@3 [d3,g3,b3]@3 ~@7]/4", // D5 G D5 G
  R: "[~@2 [d3,g3,b3]@3 ~@6 [d3,a3]@5 ~ [d3,a3]@3 g3@3 [a3,d4]@3 g3@3 e3@3 d3@3 ~@3 [c#4,f4]@3 [d4,f#4] [d#4,e4,g4,g#4] [f4,a4] [d4,f#4,b4]@13 ~@2 [g3,c4,e4]@8 ~ [a3,c4,f4]@3 ~, ~@44 a#4 ~@27]/3", // G D5 C# D Emaj7 F Bm C …
  S: "~@2 [a3,c4,f4]@6 [a3,c4,f4]@3 [g3,c4,e4]@5 ~@8", // F C
  T: "[~@11 [a3,b3,e4]@5 ~@7 [a3,b3,e4]@3 ~@12 [b3,d4,g4]@3 ~@3 [b3,d4,g4]@8 ~@7 [a3,b3,e4]@5 ~@7 [a3,b3,e4]@3 ~@12 [b3,d4,g4]@8 ~@2]/4", // Asus2 G Asus2 G
  U: "[~@11 [b3,e4,a4]@5 ~ [b3,e4,a4]@3 [b3,e4,a4]@3 [b3,e4,a4]@3 ~@6 [d4,f#4,b4]@8 ~ [d4,f#4,b4]@3 [d4,f#4,b4]@3 [d4,f#4,b4]@3 a4@3 g4@3 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,e4,g4]@6 [c4,f4,a4]@3 ~]/3", // Esus4 Bm F C F
  V: "~@2 [c4,f4,a4]@3 ~@3 [c4,f4,a4]@3 [c4,e4,g4]@5 ~@8", // F C
  W: "[~@11 [b3,e4,a4]@3 ~@9 [b3,e4,a4]@3 ~@12 [b3,d4,g4]@3 ~@3 [b3,d4,g4]@9 ~@6 [b3,e4,a4]@5 ~@7 [b3,e4,a4]@3 ~@12 [b3,d4,g4]@9 ~]/4", // Esus4 G Esus4 G
  X: "[~@11 [a3,b3,e4]@5 ~@7 [a3,b3,e4]@3 [b3,c4,f4] [c#4,f#4] [c4,d4,g4] [c#4,d#4,e4,g#4] [c#4,f4,a4] [d4,f4,a#4] [d4,f#4,b4]@8 ~ [b3,d4,f#4]@3 [b3,d4,f#4]@3 [b3,d4,f#4]@3 ~@6 [c4,f4,a4]@6 [c4,e4,g4]@6 [c4,f4,a4]@3 ~]/3", // Asus2 F F#5 Csus2 C#m C#aug A# Bm …
  Y: "~@2 [c4,f4,a4]@3 ~@3 [c4,f4,a4]@3 [c4,e4,g4]@3 ~@10", Z: "~@11 f3@6 ~@7", AA: "c4@2 f3 ~", AB: "~ c4@12 f3@6 ~@5",
  AC: "~@2 c4@13 ~@9", AD: "[b3,d4,g4]!5 g3@2 ~", AE: "~@4 d4@13 g3@6 ~", AF: "~@5 d4@13 g3@6",
  AG: "~@6 d4@13 ~@3 [g3,c4,e4]@2", // C
  AH: "[~ [g3,c4,e4]@6 ~@4 [g3,b3,d4]@3 [g3,b3,d4]@6 f3@6 ~@6 c4@13 f3@6 ~@7 c4@12 f3@6 ~@7 c4@13]/4", // C G
  AI: "~@3 [f3,a3,c4]!5", AJ: "[[a3,c4,f4] ~@2 [g3,c4,e4] ~@2 [a3,c4,f4]@3 [g3,c4,e4] ~ [d4,g4]!2 [b3,d4,g4]!3]/2",
  AK: "[[b3,d4,g4]@8 ~ [a3,d4,f#4]@3 ~@6 [b3,d4,g4]@9 [a3,d4,f#4]@3 ~@18]/2", AL: "[a3,b3,e4]!2 ~@2 [a3,b3,e4] ~@3",
  AM: "~ [b3,d4,g4] ~@2 [b3,d4,g4]@3 ~", AN: "~ [b3,d4,g4]@3 ~@4", AO: "[b3,e4,g4]!2 ~ [b3,e4,g4]@3 ~@2",
  AP: "[[a3,d4,f#4]!2 ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [c4,e4,g4]@2 [c4,e4,g4] ~ [c4,f4,a4] ~ [c4,f4,a4]@2 [c4,f4,a4]]/2", // D C F
  AQ: "[c4,e4,g4] ~@7", AR: "f3 ~@3 c4@4", AS: "f3@3 ~ b3@2 c4@2", AT: "[d4@2 c4 ~ b3 c4 b3@5 ~@5]/2", AU: "g3 ~ d4@2",
  AV: "g3 ~ b3 c4", AW: "[d4@2 c4 ~ b3 c4 b3@6 ~@4]/2",
})).s("gm_distortion_guitar").gain(0.48).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  A ~ B ~ C ~ A ~ A D B D B D E F A D B D B G H@2 A I J K L M N O P Q R S T U@4 V W X Y Z ~ X ~ AA AB AA AB@4 X AA AB AA
  AB AA AC U@2 AD AE AF AG AH AI AJ AK AL AM AN AO AP@5 AQ AR AQ AR AQ AR AQ AS AT AU AT AU@4 AV ~@11 AW AP@2 AX@11 AY
  AP@2 AX@11 AY AP@2 ~
>`.pickRestart({
  A: "~@11 x", B: "~ x ~@5 x ~@14 x ~", C: "~ x ~@11 x ~@8 x ~", D: "~@5 x ~@6", E: "~ x ~@4", F: "~ x ~@20 x ~",
  G: "~@5 x ~@5 x", H: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", I: "~@10 x ~@12 x", J: "~ x",
  K: "x ~@12 x ~@10", L: "~ x ~@10", M: "~@2 x ~@9 x ~@2 x ~@8", N: "~@3 x ~@3 x ~@5 x ~@2 x ~@7",
  O: "~@5 x ~@8 x ~@2 x ~@6", P: "~@3 x ~@2 x ~@4 x", Q: "~ x ~@5 x ~@11 x ~@4", R: "~@8 x ~@2 x ~@5 x ~@2 x ~@3",
  S: "~@9 x ~@12 x ~", T: "~@10 x ~@9 x ~@2 x", U: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x",
  V: "~@2 x ~@2 x ~@2 x ~@2 x ~@12", W: "~@7 x ~@2 x ~", X: "~@11 x ~@12", Y: "~@7 x ~@4", Z: "~@2 x ~@8 x ~@12",
  AA: "~@11 x ~@8 x ~@2 x", AB: "~@11 x ~@2 x ~@5 x ~@2 x", AC: "~@11 x ~@2 x ~@2 x ~@2 x ~@2 x",
  AD: "~@2 x ~@2 x ~@2 x ~@2 x ~@8 x ~@3", AE: "x ~@5 x ~@4 x", AF: "~ x ~@11 x ~@9 x", AG: "~@2 x ~@12 x ~@8",
  AH: "x!6 ~@2", AI: "~ x ~@2 x ~@12 x ~@6", AJ: "~@2 x ~@2 x ~@12 x ~@5", AK: "~@3 x ~@2 x ~@15 x ~",
  AL: "~ x ~@9 x ~@8 x ~@3", AM: "~@5 x ~@2 x ~@12 x ~@2", AN: "~@3 x ~ x ~@5 x", AO: "~ x ~@6 x ~@2 x ~@12", AP: "x!8",
  AQ: "x ~@2 x ~@2 x ~", AR: "~@2 x ~@2 x ~@2", AS: "~ x!7", AT: "x ~@2 x!2 ~@3", AU: "x!2 ~ x!2 ~@3", AV: "x",
  AW: "~@5 x!3", AX: "x!2", AY: "x ~@3 x ~ x!2",
})).gain(0.72)

// drums · rim
// … 95 more lines

More by Billy Joel