Strudelify
Big Shot cover art

1978 · 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, A@4 for four bars: 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 D@2 E@2 F H@4 I J K@4 L@8 M N@2 ~ O P@3 Q@8 R@8 S T U V@2 W X Y Z AA@3 AB AC@2 AD AE AF AG
  AH AI AF AG AH AJ AK AL AM AL AM AD AN AO AP@3 AQ AR@3 AS AP@3 AT AC@2 AP@3 AQ AR@3 AS AP@3 AT AC@2 AP@3 AQ AR@3 AS
  AP@3 AT AC@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]@5 ~@4 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: "[~ [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
  I: "[f1,f2]@5 ~@8 [c2,c3]@11", J: "~@2 [f1,f2]@5 ~ [f1,f2]@5 ~@4 [c2,c3]@7",
  K: "[~@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
  L: "[~ [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 …
  M: "~@2 [d2,d3]@3 [d2,d3]@3 [d2,d3]@3 [e1,e2]@5 ~@8", N: "[~@14 [g1,g2]@3 ~@3 [g1,g2]@13 ~@2 [e1,e2]@5 ~@8]/2",
  O: "~@11 [e1,e2]@5 ~@8", P: "[~@11 [d2,d3]@10 ~@2 [d2,d3]@10 ~@2 c2@15 g2@8 ~ [c2,c3]@5 ~@8]/3",
  Q: "[~@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
  R: "[~@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
  S: "~@11 [f1,f2]@5 ~@8", T: "[c2,c3]@11 ~ [f1,f2]@5 ~@7", U: "~ [c2,c3]@11 ~ [f1,f2]@5 ~@6",
  V: "[~@2 [c2,c3]@11 ~@2 [f1,f2]@5 ~ [f1,f2]@5 ~@4 [c2,c3]@8 ~ [g1,g2]@5 ~@4]/2", // C F C G
  W: "~@4 [d2,d3]@11 ~@2 [g1,g2]@5 ~@2", X: "~@5 [d2,d3]@11 ~@2 [g1,g2]@5 ~", Y: "~@6 [d2,d3]@11 ~@5 [c2,c3]@2",
  Z: "~ [c2,c3]@5 ~@5 [e2,e3]@3 [e2,e3]@5 ~ [f1,f2]@4", // C E F
  AA: "[~@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
  AB: "[f1,f2]@8 ~ [f1,f2]@6 [f1,f2]@3 [a1,a2]@3 [a#1,a#2]@3", AC: "[c2,c3]!8", AD: "[d2,d3]!8",
  AE: "[d2,d3]@5 ~ [d2,d3]@5 ~ [d2,d3]@10 ~@2", AF: "[f1,f2]@5 ~@4 [a1,a2]@3 ~@6 [c2,c3]@5 ~",
  AG: "~@6 [c2,c3]@5 ~@4 [e2,e3]@8 ~", AH: "[g1,g2]@5 ~@4 [b1,b2]@3 ~@6 [d2,d3]@5 ~",
  AI: "~@6 [d1,d2]@5 ~@4 [e1,e2]@8 ~", AJ: "~ [d2,d3]!7", AK: "[e1,e2]@5 ~@7 [e1,e2]@5 ~@7",
  AL: "~@3 [g1,g2]@3 ~@3 d2@3 [g1,g2]@10 ~@2", AM: "[e1,e2]@5 ~@4 b1@3 [e1,e2]@5 ~@7",
  AN: "[c2,c3]@8 ~ [e1,e2]@3 ~@3 [g1,g2]@6 [a1,a2]@3", AO: "[c2,c3]@5 ~@19", AP: "[f1,f2]@5 ~@7 [c2,c3]@10 ~@2",
  AQ: "[f1,f2]@5 ~ [f1,f2]@5 ~@4 [c2,c3]@8 ~", AR: "[g1,g2]@5 ~@7 [d2,d3]@10 ~@2",
  AS: "~@3 [c2,c3]@3 [c2,c3]@5 ~@4 [e2,e3]@3 [e2,e3]@5 ~", // C E
  AT: "[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 D@2 E@2 F H@4 I J K@4 L@8 M N@2 O 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@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@5 ~@4 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: "[~ 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", I: "f1@5 ~@8 c2@11",
  J: "~@2 f1@5 ~ f1@5 ~@4 c2@7", K: "[~@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",
  L: "[~ 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",
  M: "~@2 d2@3 d2@3 d2@3 e1@5 ~@8", N: "[~@14 g1@3 ~@3 g1@13 ~@2 e1@5 ~@8]/2", O: "~@14 g2@3 f2@5 ~@2",
  P: "~@2 d2@3 c2@3 a#1@3 e1@5 ~@8", Q: "[~@11 d2@10 ~@2 d2@10 ~@2 c2@15 g2@8 ~ c2@5 ~@8]/3",
  R: "[~@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",
  S: "[~@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",
  T: "~@11 f1@5 ~@8", U: "c2@11 ~ f1@5 ~@7", V: "~ c2@11 ~ f1@5 ~@6",
  W: "[~@2 c2@11 ~@2 f1@5 ~ f1@5 ~@4 c2@8 ~ g1@5 ~@4]/2", X: "~@4 d2@11 ~@2 g1@5 ~@2", Y: "~@5 d2@11 ~@2 g1@5 ~",
  Z: "~@6 d2@11 ~@5 c2@2", AA: "~ c2@5 ~@5 e2@3 e2@5 ~ f1@4",
  AB: "[~@8 c2@11 ~@2 f1@5 ~@8 c2@11 ~ f1@5 ~@8 c2@11 ~@2]/3", AC: "f1@8 ~ f1@6 f1@3 a1@3 a#1@3", AD: "c2!8",
  AE: "d2!8", AF: "d2@5 ~ d2@5 ~ d2@10 ~@2", AG: "f1@5 ~@4 a1@3 ~@6 c2@5 ~", AH: "~@6 c2@5 ~@4 e2@8 ~",
  AI: "g1@5 ~@4 b1@3 ~@6 d2@5 ~", AJ: "~@6 d1@5 ~@4 e1@8 ~", AK: "~ d2!7", AL: "e1@5 ~@7 e1@5 ~@7",
  AM: "~@3 g1@3 ~@3 d2@3 g1@10 ~@2", AN: "e1@5 ~@4 b1@3 e1@5 ~@7", AO: "c2@8 ~ e1@3 ~@3 g1@6 a1@3", AP: "c2@5 ~@19",
  AQ: "f1@5 ~@7 c2@10 ~@2", AR: "f1@5 ~ f1@5 ~@4 c2@8 ~", AS: "g1@5 ~@7 d2@10 ~@2", AT: "~@3 c2@3 c2@5 ~@4 e2@3 e2@5 ~",
  AU: "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]@8 ~@7 [b3,e4,a4]@5 ~@7 [b3,e4,a4]@3 ~@12 [b3,d4,g4]@8 ~@2]/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 ~ T AA T AA@4 X T AA T AA
  T AB U@2 AC AD AE AF AG AH AI AJ AK AL AM AN AO@5 AP AQ AP AQ AP AQ AP AR AS AT AS AT@4 AU ~@11 AV AO@2 AW@11 AX AO@2
  AW@11 AX AO@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: "~@11 x ~@8 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 ~@2 x ~@5 x ~@2 x", AB: "~@11 x ~@2 x ~@2 x ~@2 x ~@2 x", AC: "~@2 x ~@2 x ~@2 x ~@2 x ~@8 x ~@3",
  AD: "x ~@5 x ~@4 x", AE: "~ x ~@11 x ~@9 x", AF: "~@2 x ~@12 x ~@8", AG: "x!6 ~@2", AH: "~ x ~@2 x ~@12 x ~@6",
  AI: "~@2 x ~@2 x ~@12 x ~@5", AJ: "~@3 x ~@2 x ~@15 x ~", AK: "~ x ~@9 x ~@8 x ~@3", AL: "~@5 x ~@2 x ~@12 x ~@2",
  AM: "~@3 x ~ x ~@5 x", AN: "~ x ~@6 x ~@2 x ~@12", AO: "x!8", AP: "x ~@2 x ~@2 x ~", AQ: "~@2 x ~@2 x ~@2",
  AR: "~ x!7", AS: "x ~@2 x!2 ~@3", AT: "x!2 ~ x!2 ~@3", AU: "x", AV: "~@5 x!3", AW: "x!2", AX: "x ~@3 x ~ x!2",
})).gain(0.72)

// drums · rim
const rim = s("rim").struct("<~@16 [~@2 x] ~@13 [~@2 x] ~@110>").gain(0.72)

// drums · snare
// … 92 more lines

More by Billy Joel