Strudelify
Don't Ask Me Why cover art

1980 · Glass Houses

Don't Ask Me Why

Billy Joel

KeyB♭ majorTempo97 bpm
0:00/0:00
// Don't Ask Me Why — Billy Joel
// 97 bpm, 2/4, key Bb major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 140 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(97/2)

// 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 · "Accomp./Solo = Grand Piano 1"
const piano = note(`<
  A@4 B@2 C D E F G H@4 I@3 J K L M N O P Q R@2 B@2 C S T F U V@4 I@3 W K X M Y Z P Q R@2 B@2 AA AB@3 AC@3 AD AE@2 AF AG
  AH@2 AI AJ C D T F G H@4 I@3 J K L M N Z P Q R@2 B@2 AK@4 AL@4 AM@4 AN AO@3 C AP E AQ U AR@4 AS@3 J AT L AU Y AV P Q
  R@2 B@2 AW@2 AX AY@2 ~
>`.pickRestart({
  A: "[~ bb3@7 ~ b3@8 ~ [a3,db4]@5 ~ d4@8 [b3,eb4]@10 [a3,db4]@5 ~ d4@9 [b3,eb4]@8 ~ db4@5 ~ d4@8 ~ b3@8 ~ db4@6, d4@8 eb4@10 ~@5 bb3@9 ~@15 bb3@9 ~@9 a3@6 bb3@9 eb4@9 a3@7]/4", // A B A B
  B: "[[bb3,d4]@9 ~ b3@7 ~ a3@5 ~ d4@9 [b3,eb4]@8 ~ a3@6, ~@9 eb4@8 db4@6 bb3@10 ~@8 db4@7]/2", // Bb B
  C: "[bb3,d4]@6 ~@2 [bb3,d4]@7 ~@2 bb3@7, ~@2 d4", D: "~@2 [bb3,d4]@9 ~@2 bb3@3 ~ [bb3,d4]@4 ~@3, ~@12 d4@5 ~@7",
  E: "~ [c4,e4]@8 [c4,e4]@8 [c4,e4]@7", F: "~@3 e4@7 ~@2 e4@10 ~@2, ~@2 c4@8 ~ c4@10 ~@3",
  G: "~ [c4,eb4]@6 ~@2 [c4,eb4]@8 ~ eb4@6, ~@17 c4@7", // Cm
  H: "[~@3 eb4@7 ~ [c4,eb4]@9 ~@4 bb3@7 ~ d4@7 ~@2 [bb3,d4]@5 ~ [a3,c4]@8 ~@2 [a3,c4]@9 ~ [a3,c4]@4 ~ bb3@7 ~ [bb3,d4]@7 ~ [bb3,d4]@8, ~@2 c4@7 ~@14 d4@7 ~ bb3@7 ~@33 d4@8 ~@17]/4", // Cm Bb Am Bb
  I: "[~@4 [bb3,d4]@10 ~ [bb3,d4]@6 ~@2 [c4,e4]@9 ~@2 [c4,e4]@8 ~ [c4,e4]@11 ~ e4@10 ~@2 c4@4 ~, ~@27 c4@5 ~ e4@2 ~]/3", // Bb C
  J: "[c4,eb4]@7 ~ [c4,eb4]@8 ~ [c4,eb4]@7", K: "~@2 [c4,eb4]@8 ~ [c4,eb4]@6 ~@7",
  L: "[bb3,d4]@7 ~ [bb3,d4]@8 ~@2 [bb3,d4]@3 ~@3", M: "~ gb4@6 ~@2 [d4,gb4]@8 ~ [d4,gb4]@5 ~, d4@7 ~@17",
  N: "~ [d4,g4]@7 ~ [d4,g4]@8 ~ [d4,g4]@5 ~", O: "[d4,f4]@9 [d4,f4]@8 ~ [d4,f4]@2 ~@4",
  P: "[c4,e4]@8 ~ [c4,e4]@8 ~ [c4,e4]@4 ~@2", Q: "~ [c4,eb4]@8 [c4,eb4]@8 ~ [c4,eb4]@2 ~@4",
  R: "[d4@9 [b3,eb4]@8 ~ db4@5 ~ d4@8 ~ b3@8 ~ db4@6, ~@17 a3@6 bb3@9 eb4@9 a3@7]/2", // B
  S: "~@2 [bb3,d4]@9 ~@2 bb3@3 ~ [bb3,d4]@4 ~@3, ~@3 d4 ~@2", T: "~ [c4,e4]@6 ~@2 [c4,e4]@7 ~ [c4,e4]@7",
  U: "~ [c4,eb4]@6 ~@2 [c4,eb4]@7 ~@2 eb4@6, ~@17 c4@7", // Cm
  V: "[~@3 eb4@7 ~ [c4,eb4]@9 ~@4 bb3@7 ~ d4@8 ~ [bb3,d4]@5 ~ [a3,c4]@8 ~@2 [a3,c4]@9 ~ [a3,c4]@4 ~ bb3@7 ~ [bb3,d4]@8 [bb3,d4]@8, ~@2 c4@8 ~@13 d4@7 ~ bb3@7 ~@33 d4@7 ~@18]/4", // Cm Bb Am Bb
  W: "[c4,eb4]@8 [c4,eb4]@8 ~ [c4,eb4]@7", X: "[bb3,d4]@8 [bb3,d4]@8 ~@2 [bb3,d4]@3 ~@3",
  Y: "~ [d4,g4]@7 ~ [d4,g4]@8 ~ d4@5 ~, ~@6 g4 ~", Z: "[d4,f4]@8 ~ [d4,f4]@8 ~ [d4,f4]@2 ~@4",
  AA: "[f4,a4,c5]@9 [f4,a4,c5]@11 ~@4", // F
  AB: "[~ [f4,a4,c5]@6 ~@2 [f4,a4,c5]@8 ~@6 [eb4,g4,bb4]@9 ~ [eb4,g4]@11 ~@3 [eb4,g4,bb4]@7 ~@2 [eb4,g4,bb4]@8 ~@8, ~@32 bb4@11 ~@29]/3", // F Eb
  AC: "[[d4,f4,a4]@6 ~@2 [d4,f4,a4]@12 ~@3 [d4,f4,a4]@8 ~@2 [d4,f4,a4]@10 ~ d4@2 ~@2 [g4,d5]@6 [f4,bb4] ~@2 [g4,bb4,eb5]@3 ~@2 [g4,bb4,eb5]@2 ~ [f4,bb4,d5]@4 ~ [f4,bb4,d5]@2, ~@47 d4@9 ~@16, ~@24 [f4,bb4]@2 ~ d5 ~@8]/3", // Dm G5 Bb5 Eb Bb Bb5
  AD: "~@3 f4 ~@4 [bb4,eb5]@2 [f4,bb4,d5]@4 ~@2 [f4,bb4,d5]@4 ~@4, ~@2 [g4,bb4,eb5]@3 ~@3 g4 ~@15", // Eb5 Bb Eb
  AE: "[~ g4@6 ~@2 [d4,g4,b4]@11 ~@3 [d4,g4,b4]@8 ~ [d4,g4,b4]@11 ~@5, [d4,b4]@7 ~@41]/2", // G
  AF: "[e4,g4,c5]@3 [e4,g4,c5]@4 ~", AG: "~ g4@7 ~@2 [e4,g4,c5]@9 ~@5, [e4,c5] ~@2",
  AH: "[~ b4@6 ~@2 [d4,g4,b4]@10 ~@4 [d4,g4,b4]@8 ~ [d4,g4,b4]@10 ~@6, [d4,g4]@7 ~@41]/2", AI: "~@4 [e4,g4,c5]@7 ~",
  AJ: "[d4,f4,bb4]@6 ~@2 f4 [c4,a4]@5 ~@6 g4@2 ~@2, ~@9 f4@3 ~@6 eb4@4 ~@2, ~@19 c4@3 ~@2", // Bb F
  AK: "[~@3 [g4,c5]@5 [gb4,b4]@3 [g4,c5]@16 ~@9 a4@3 ~ g4@2 ~@2 [g4,c5]@2 ~@2 g4@4 [f4,bb4]@5 ~@4 f4@30 ~@5, ~@27 b4@4 c5@4 d5@4 c5@3 ~@5 c5@4 ~@7 e4@3 ~@35, ~@28 gb4@4 g4@5 ~@20 a4@2 bb4@28 ~@9]/4", // C5 B5 C5 Bb5
  AL: "[~@4 g4@4 ~ gb4@2 ~ g4@16 [d4,g4]@3 e4@4 ~ a4@3 ~ g4@4 g4@2 ~@2 d4@3 f4@5 ~ db4@2 ~ d4@33 ~@3, d5@3 c5@6 ~@2 c5@16 ~@8 c5@5 ~@56, ~ a4@4 ~@3 b4@3 ~@20 a4@3 ~@5 bb4@4 ~@4 g4@3 ~@6 e4@3 f4@26 ~@11]/4", // G5
  AM: "[~@5 d4@2 ~ [g3,d4]@3 ~ [g3,d4]@3 ~ f4@2 ~@2 f4@2 ~@2 f4@3 ~ a4@3 ~ a4@2 ~@2 a4@3 ~ gb4@2 ~@2 gb4@3 ~@4 g4@4 ~ gb4@2 ~ g4@34 ~@3, ~@4 g3@3 ~@8 d4@2 ~@2 d4@3 ~ d4@4 f4@3 ~ f4@2 ~@2 f4@4 a4@3 ~ a4@3 ~ a4@4 ~@45, ~@49 e4@5 ~ eb4@4 e4@11 ~@26]/4", // G5
  AN: "~@3 g3@3 b3@3 g3@2 b3@4 g3@3 ~@3 g3@2 ~, ~@18 b3@5 ~",
  AO: "[~@3 b3@3 ~@3 b3@3 f4@3 g3@3 ~ f4@3 ~@2 [c3,c4]@23 ~@3 c4@2 ~ eb3@2 e3@3 f3@3 g3@3 ab3@3 ~ a3@3 ~, d4 d4@11, ~@11 b3@2 ~@23]/3", // C
  AP: "~@2 [bb3,d4]@9 ~@2 bb3@4 [bb3,d4]@4 ~@3, ~@3 d4 ~@2", AQ: "~@3 e4@8 ~ e4@10 ~@2, ~@2 c4@8 ~ c4@10 ~@3",
  AR: "[~@3 eb4@7 ~ [c4,eb4]@9 ~@4 bb3@7 ~ d4@7 ~@2 [bb3,d4]@5 ~ [a3,c4]@8 ~@2 [a3,c4]@9 ~ [a3,c4]@4 ~ bb3@7 ~ [bb3,d4]@7 ~ [bb3,d4]@8, ~@2 c4@7 ~@14 d4@7 ~ bb3@8 ~@32 d4@7 ~@18]/4", // Cm Bb Am Bb
  AS: "[~@4 [bb3,d4]@10 ~ [bb3,d4]@7 ~ [c4,e4]@9 ~@2 [c4,e4]@8 ~ [c4,e4]@11 ~ e4@10 ~@2 c4@4 ~, ~@27 c4@5 ~ e4@2 ~]/3", // Bb C
  AT: "~@2 [c4,eb4]@8 ~ [c4,eb4]@7 ~@6", AU: "~ gb4@6 ~@2 [d4,gb4]@8 ~ [d4,gb4]@5 ~, d4 ~@2",
  AV: "[d4,f4]@8 ~ [d4,f4]@8 ~ [d4,f4]@3 ~@3", // Dm
  AW: "[d4@9 ~ b3@7 ~ a3@5 ~ d4@9 [b3,eb4]@8 ~ a3@6, ~@9 eb4@8 db4@6 bb3@10 ~@8 db4@7]/2", // B
  AX: "d4@9 [b3,eb4]@8 ~ a3@6, ~@17 db4@7", AY: "[bb3,d4]/2",
})).s("gm_piano").gain(0.64)

// chords · clavinet · "Accomp. = Clavinet 8"
const clavinet = note(`<
  A B C@2 B@2 D@3 E F G@2 H I@3 E J K L M N O P Q R B C@2 I@3 S F G@2 H T@3 U J K L M V O W X B Y Z B AA AB@3 AC@3 AD
  AE@2 AF AG AH@2 AI AJ AK@3 E F G@2 H I@3 E J K L M N O P Q R B C@2 ~@16 T@3 AL F AM@2 AN I@3 E J K L M N O P X AO B@2
  C@2 B@2 AP@3
>`.pickRestart({
  A: "[bb3,d4]@5 ~@4 [b3,eb4]@5 [b3,eb4]@3 db4@6 ~, ~@5 d4@4 ~@15, ~ bb3@3", // Bb B
  B: "[bb3,d4]@5 ~ bb3@3 [b3,eb4]@4 ~ [b3,eb4]@3 db4@6 ~, ~@5 d4@4 ~@15", // Bb B
  C: "[bb3,d4]@4 ~@2 bb3@3 [b3,eb4]@5 [b3,eb4]@3 db4@6 ~, ~@5 d4@4 ~@15", // Bb B
  D: "[~ [bb3,d4]@4 ~@2 d4@2 ~ d4@4 ~ [bb3,d4]@7 ~ [bb3,d4]@2 ~ [bb3,d4]@3 ~@2 [bb3,d4]@2 ~ [bb3,d4]@3 ~@5 d4@3 ~@2 [c4,e4]@6 [c4,e4]@3 [c4,e4]@5 ~ [c4,e4]@2 ~ [c4,e4]@5 ~@2, ~@7 bb3@7 ~@27 bb3@3 ~@28]/3", // Bb C
  E: "~@4 e4@2 ~ [c4,e4]@5 [c4,e4]@2 ~ e4@2 ~ [c4,e4]@3 ~@3, e4 ~@7, ~ c4@5 ~@9 c4 ~@8", // C
  F: "~ [c4,eb4]@4 ~ [c4,eb4]@2 ~ [c4,eb4]@4 ~@2 eb4@2 ~ [c4,eb4]@2 ~ [c4,eb4]@2 ~, ~@15 c4 ~@8", // Cm
  G: "[[c4,eb4]@5 ~ [c4,eb4]@4 ~@3 [c4,eb4]@3 ~@2 eb4@2 ~@3 [bb3,d4]@5 ~ bb3@2 ~ bb3@4 ~@2 bb3@2 ~ bb3@2 ~@5, ~@17 c4@2 ~@10 d4@8 ~ d4@5 ~@5]/2", // Cm Bb
  H: "[a3,c4]@5 ~ a3@2 a3@4 ~@2 [a3,c4]@2 ~ [a3,c4]@2 ~ [a3,c4]@2 ~@2, ~@6 c4@7 ~@11", // Am
  I: "[~ [bb3,d4]@4 ~@2 d4@2 ~ d4@4 ~ [bb3,d4]@7 ~ [bb3,d4]@2 ~ [bb3,d4]@3 ~@2 [bb3,d4]@2 ~ [bb3,d4]@3 ~@5 d4@3 ~@2 [c4,e4]@5 ~ [c4,e4]@2 ~ [c4,e4]@5 ~ [c4,e4]@2 ~ [c4,e4]@5 ~@2, ~@7 bb3@7 ~@27 bb3@3 ~@28]/3", // Bb C
  J: "~ [c4,eb4]@2 ~@4 [c4,eb4]@2 ~ [c4,eb4]@5 ~ c4@2 [c4,eb4]@3 ~@3, ~@15 eb4@2 ~@7", // Cm
  K: "[c4,eb4]@4 ~ [c4,eb4]@5 ~@2 [c4,eb4]@5 ~ [c4,eb4]@5 ~", // Cm
  L: "[bb3,d4]@5 ~ bb3@2 ~ bb3@4 ~@2 [bb3,d4]@2 ~ d4@2 ~ [bb3,d4]@2 ~, ~@6 d4@8 ~@4 bb3 ~@5", // Bb
  M: "[d4,gb4]@5 ~@2 gb4@2 ~ gb4@6 ~@3 d4@5, ~@7 d4@9 ~@2 gb4@5 ~", // D
  N: "[d4,g4]@5 ~ [d4,g4]@2 ~ [d4,g4]@5 ~@2 [d4,g4]@2 [d4,g4]@5 ~", // G5
  O: "~ [d4,f4]@5 [d4,f4]@2 ~ [d4,f4]@5 ~ [d4,f4]@2 ~ d4@2 ~@4, ~@17 f4@3 ~@4", // Dm
  P: "[c4,e4]@5 ~ e4@2 ~ e4@5 ~ [c4,e4] ~@2 [c4,e4]@3 ~@3, d4 ~@11, db4 ~@5 c4@8 ~@10", // C
  Q: "~ eb4@4 ~ [c4,eb4]@2 ~ [c4,eb4]@5 ~ [c4,eb4] ~@2 [c4,eb4]@4 ~@2, c4@5 ~@19", // Cm
  R: "~ bb3@5 ~@3 [b3,eb4]@4 ~ [b3,eb4]@3 db4@6 ~, d4@5 ~@19", // B
  S: "~@4 e4@3 [c4,e4]@5 [c4,e4]@2 ~ e4@2 ~ [c4,e4]@3 ~@3, e4 ~@7, ~ c4@5 ~@9 c4 ~@8", // C
  T: "[~ [bb3,d4]@4 ~@2 d4@2 ~ d4@4 ~ [bb3,d4]@7 ~ [bb3,d4]@2 ~ [bb3,d4]@4 ~ [bb3,d4]@2 ~ [bb3,d4]@3 ~@5 d4@3 ~@2 [c4,e4]@5 ~ [c4,e4]@2 ~ [c4,e4]@5 ~ [c4,e4]@2 ~ [c4,e4]@5 ~@2, ~@7 bb3@7 ~@27 bb3@3 ~@28]/3", // Bb C
  U: "~@4 e4@2 ~ [c4,e4]@5 [c4,e4]@2 ~ e4@2 ~ e4@4 ~@2, e4 ~@7, ~ c4@5 ~@9 c4 ~@2 c4@2 ~@4", // C
  V: "[d4,g4]@5 ~ [d4,g4]@3 [d4,g4]@5 ~@2 [d4,g4]@2 [d4,g4]@5 ~", // G5
  W: "[c4,e4]@5 ~ e4@2 ~ e4@5 ~ [c4,e4] ~@2 c4@4 ~@2, d4 ~@8 e4 ~@2, db4 ~@5 c4@8 ~@10", // C
  X: "~ eb4@3 ~@2 [c4,eb4]@2 ~ [c4,eb4]@5 ~ [c4,eb4] ~@2 [c4,eb4]@4 ~@2, c4@5 ~@19", // Cm
  Y: "[bb3,d4]@4 ~@2 bb3@3 [b3,eb4]@5 [b3,eb4]@3 db4@7, ~@5 d4@4 ~@15", // Bb B
  Z: "[bb3,d4]@5 ~ bb3@3 [b3,eb4]@5 [b3,eb4]@3 db4@6 ~, ~@5 d4@4 ~@15", AA: "[f4,a4,c5]@9 [f4,a4,c5]@11 ~@4",
  AB: "[~ [f4,a4,c5]@6 ~@2 [f4,a4,c5]@8 ~@6 [eb4,g4,bb4]@9 ~ [eb4,g4]@11 ~@3 [eb4,g4,bb4]@7 ~@2 [eb4,g4,bb4]@8 ~@8, ~@32 bb4@11 ~@29]/3", // F Eb
  AC: "[[d4,f4,a4]@6 ~@2 [d4,f4,a4]@12 ~@3 [d4,f4,a4]@8 ~@2 [d4,f4,a4]@10 ~ d4@2 ~@2 [g4,d5]@6 [f4,bb4] ~@2 [g4,bb4,eb5]@3 ~@2 [g4,bb4,eb5]@2 ~ [f4,bb4,d5]@4 ~ [f4,bb4,d5]@2, ~@47 d4@9 ~@16, ~@24 [f4,bb4]@2 ~ d5 ~@8]/3", // Dm G5 Bb5 Eb Bb Bb5
  AD: "~@3 f4 ~@4 [bb4,eb5]@2 [f4,bb4,d5]@4 ~@2 [f4,bb4,d5]@4 ~@4, ~@2 [g4,bb4,eb5]@3 ~@3 g4 ~@15", // Eb5 Bb Eb
  AE: "[~ g4@6 ~@2 [d4,g4,b4]@11 ~@3 [d4,g4,b4]@8 ~ [d4,g4,b4]@11 ~@5, [d4,b4]@7 ~@41]/2", // G
  AF: "[e4,g4,c5]@3 [e4,g4,c5]@4 ~", AG: "~ g4@7 ~@2 [e4,g4,c5]@9 ~@5, [e4,c5] ~@2",
  AH: "[~ b4@6 ~@2 [d4,g4,b4]@10 ~@4 [d4,g4,b4]@8 ~ [d4,g4,b4]@10 ~@6, [d4,g4]@7 ~@41]/2", AI: "~@4 [e4,g4,c5]@7 ~",
  AJ: "[d4,f4,bb4]@6 ~@2 f4 [c4,a4]@5 ~@6 g4@2 ~@2, ~@9 f4@3 ~@6 eb4@4 ~@2, ~@19 c4@3 ~@2", // Bb F
  AK: "[~ [bb4,d5]@4 ~@2 d5@2 ~ d5@4 ~ [bb4,d5]@7 ~ [bb4,d5]@2 ~ [bb3,d4]@3 ~@2 [bb3,d4]@2 ~ [bb3,d4]@3 ~@5 d4@3 ~@2 [c4,e4]@5 ~ [c4,e4]@2 ~ [c4,e4]@5 ~ [c4,e4]@2 ~ [c4,e4]@5 ~@2, ~@7 bb4@7 ~@27 bb3@3 ~@28]/3", // Bb C
  AL: "~@4 e4@2 ~ [c4,e4]@5 [c4,e4]@2 ~ e4@3 e4@4 ~@2, e4 ~@7, ~ c4@5 ~@9 c4 ~@2 c4@2 ~@4", // C
  AM: "[[c4,eb4]@5 ~ [c4,eb4]@4 ~@3 [c4,eb4]@3 ~@2 eb4@2 ~@3 [bb3,d4]@5 ~ bb3@2 ~ bb3@4 ~@2 bb3@2 ~ bb3@3 ~@4, ~@17 c4@2 ~@10 d4@8 ~ d4@5 ~@5]/2", // Cm Bb
  AN: "[a3,c4]@5 ~ a3@2 a3@4 ~@2 [a3,c4]@2 ~ [a3,c4]@3 [a3,c4]@2 ~@2, ~@6 c4@7 ~@11", // Am
  AO: "~ bb3@5 ~@3 [b3,eb4]@5 [b3,eb4]@3 db4@6 ~, d4@5 ~@19", AP: "[[d3,bb3]@17 ~@7]/3",
})).s("gm_clavinet").gain(0.64)

// other · piano · "Melody = Honky-tonk Piano 4"
const piano_2 = note(`<
  ~@6 A B C@2 D E F@4 G@4 H I@2 J@2 K@3 ~@2 A B L@2 D E F@4 G@4 H I@2 J@2 M@3 ~@2 N O@4 P Q@2 R@2 S@4 T U A B L@2 D E
  F@4 G@4 H I@2 J@2 K@3 ~@18 A B L@2 D E F@4 G@4 H I@2 J@2 V@2 ~@2 W X ~@5
>`.pickRestart({
  A: "f4@8 g4@9 bb4@7", B: "~ f4 g4 bb4", C: "[g4@3 a4@3 c5@10]/2", D: "c5@3 d5@3 f5@2", E: "~@3 d5@8 c5@6 bb4@6 ~",
  F: "[d5@17 ~@2 d5@3 c5@11 d5@5 c5@3 bb4@3 g4@2 ~ f4@8 ~ g4@9 bb4@12 f4@6 g4@6 bb4@7]/4",
  G: "[~ g4@8 ~ a4@8 c5@24 ~@5 c5@9 d5@9 f5@11 ~ d5@6 ~ c5@6 bb4@6]/4", H: "d5@17 ~ d5@6",
  I: "[c5@17 d5@3 ~ bb4@8 g4@13 d5@6]/2", J: "[c5@18 d5@3 bb4@8 ~ g4@12 d5@6]/2", K: "[c5@18 bb4 ~@2 bb4@39 ~@12]/3",
  L: "[g4@9 a4@9 c5@25 ~@5]/2", M: "[c5@18 bb4@2 ~ bb4@39 ~@12]/3", N: "~@2 c5@3 c5@3 ~@2 c5@8 ~ c5@3 ~@2",
  O: "[c5@3 ~@2 c5@3 d5@8 ~ c5@3 ~@3 c5@6 bb4@4 ~@2 bb4@6 g4@3 bb4@21 ~@6 a4@2 ~ a4@5 ~@2 a4@9 bb4@6]/4",
  P: "c5@3 bb4@6 a4@9 g4@5 ~", Q: "[g4@3 f4@32 ~@13]/2", R: "[~ b4@2 ~ b4@7 ~ b4@5 c5@4 d5@5 c5@9 b4@6 ~ a4@4 ~@2]/2",
  S: "[a4@6 g4@4 ~@2 g4@6 e4@3 g4@21 ~@5 b4@2 ~ b4@7 ~@3 b4@6 c5@3 d5@5 ~@2 d5@5 ~ e5@6 d5@2 c5@5 ~]/4", T: "c5",
  U: "bb4@3 a4@3 g4@2", V: "[f5@2 ~@2 db5 c5@12 bb4@4 ~@2 bb4@19 ~@6]/2", W: "~@2 f4 g4@3 f4@2", X: "bb3 ~@23",
})).s("gm_piano").gain(0.8)

// drums · kick
const kick = s("bd").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B@2 ~@3
>`.pickRestart({
  A: "~ x ~@15 x ~@6", B: "x",
})).gain(0.72)

// drums · rim
const rim = s("rim").struct(`<
  ~@6 A B A B A B A B A B A B A B A B A B A B ~@4 A B A B A B A B A B A B A B A B A B A B ~@10 C D ~@8 A B A B A B A B A
  B A B A B A B A B A B ~@4 E F G ~ E H E I ~ J K L M N O P A B A B A B A B A B A B A B A B A B A B ~@3 Q ~@6
>`.pickRestart({
  A: "~ x ~@3 x ~@4 x ~", B: "~@13 x ~@10", C: "~@3 x ~@6 x ~@8 x ~@4", D: "~@4 x ~@8 x ~@5 x ~@4",
  E: "~@2 x ~@7 x ~@8 x ~@4", F: "x", G: "~@2 x ~@8 x ~@6 x ~@5", H: "~ x", I: "~ x ~@8 x ~@9 x ~@3",
  J: "~ x ~@8 x ~@7 x ~@5", K: "~ x ~@22", L: "~ x ~@8 x ~@10 x ~@2", M: "~ x ~@10", N: "~ x ~@9 x ~@9 x ~@2",
  O: "~@3 x ~@10 x ~@7 x ~", P: "~ x ~@6", Q: "~@2 x ~@6 x ~@8 x ~@5",
})).gain(0.8)

// drums · clap
const clap = s("cp").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B@2 ~@3
>`.pickRestart({
  A: "~ x", B: "~@13 x ~@10",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<~@134 [~ x ~@22] ~@2 [~ x ~@22] ~@2>").gain(0.8)

// drums · crash
const crash = s("cr").struct("<~@26 A ~@23 A ~@39 A ~@39 A ~@9>".pickRestart({
  A: "x",
})).gain(0.8)

// drums · bongos
const bongos = s("bongo:18").struct("<~@134 [~ x ~@22] [~ x ~@10]!2 ~@3>").gain(2.1)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x ~@2 x!3 ~@2]!137 ~@3>").gain(4.06)

stack(piano, clavinet, piano_2, kick, rim, clap, open_hat, crash, bongos, cabasa)

More by Billy Joel