Strudelify

It's Still Rock 'n' Roll to Me

Billy Joel

KeyD♭ majorTempo145 bpm
0:00/0:00
// It's Still Rock 'n' Roll to Me — Billy Joel
// 145 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 101 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(145/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@4 C D E B F D E G H F I J K L M N B O D E P Q R S T U Q V W X Y M Z AA AB T AC AD AE Q AF AG E AH A F AI AJ B F AI
  AK F H Q I J AL AM AN AO AP AQ AR AS AD AT AU AF AV AB AW ~ Z Q AI E AX AY AZ AQ BA BB BC BD W BE AM BF BG BH BI BJ@4
>`.pickRestart({
  A: "db1@3 ~@3 db1@4 ~@2 db1@4 ~@2 db1@4 ~@2", B: "db1@2 ~ db1@2 ~ db1@2 ~ db1@2 ~",
  C: "f0@5 ~ f0@4 ~@2 f0@4 ~@2 f0@4 ~@2", D: "b0@4 ~@2 b0@4 ~@2 b0@5 ~ b0@4 ~@2",
  E: "gb0@4 ~@2 gb0@4 ~@2 gb0@4 ~@2 gb0@3 ~@3", F: "f0@2 ~ f0@2 ~ f0@2 ~ f0@2 ~",
  G: "~ f0@4 ~ f0@3 ~@3 f0@4 ~@2 f0@3 ~@3", H: "bb0@4 ~@2 bb0@3 ~@3 bb0@4 ~@2 bb0@4 ~@2",
  I: "eb1@2 ~ eb1@2 ~ ab0@2 ~ ab0@2 ~", J: "db1@3 ~@3 db1@4 ~@2 f0@4 ~@2 f0@4 ~@2",
  K: "b0@4 ~@2 b0@4 ~@2 gb0@3 ~@3 gb0@3 ~@3", L: "bb0@2 ~ bb0@2 ~ ab0@2 ~ ab0@2 ~",
  M: "db1@4 ~@2 db1@3 ~@3 db1@3 ~@3 db1@3 ~@3", N: "db1@3 ~@3 db1@3 ~@3 db1@4 ~@2 db1@3 ~@3",
  O: "f0@5 ~ f0@4 ~@2 f0@4 ~@2 f0@5 ~", P: "db1@4 ~@2 db1@3 ~@3 db1@4 ~@2 db1@4 ~@2",
  Q: "f0@4 ~@2 f0@4 ~@2 f0@4 ~@2 f0@3 ~@3", R: "b0@4 ~@2 b0@4 ~ b0@4 ~@3 b0@4 ~@2",
  S: "gb0@4 ~@2 gb0@4 ~@2 gb0@3 ~@3 gb0@4 ~@2", T: "f0@3 ~@3 f0@4 ~@2 f0@4 ~@2 f0@4 ~@2",
  U: "bb0@4 ~@2 bb0@3 ~@3 bb0@3 ~@3 bb0@4 ~@2", V: "eb1@3 ~@3 eb1@4 ~@2 ab0@4 ~@2 ab0@4 ~@2",
  W: "db1@2 ~ db1@2 ~ f0@2 ~ f0@2 ~", X: "b0@5 ~ b0@4 ~@2 gb0@4 ~@2 gb0@3 ~@3",
  Y: "bb0@4 ~@2 bb0@4 ~@2 ab0@4 ~@2 ab0@3 ~@3", Z: "db1 ~ db1 ~ db1 ~ db1 ~",
  AA: "~ ab0@3 ~@2 ab0@4 ~@2 ab0@4 ~@2 ab0@4 ~@2", AB: "gb0@4 ~@2 gb0@4 ~@2 gb0@3 ~@3 gb0@3 ~@3",
  AC: "bb0@4 ~@3 bb0@3 ~@2 bb0@3 ~@3 bb0@4 ~@2", AD: "ab0@4 ~@2 ab0@4 ~@2 ab0@4 ~@2 ab0@3 ~@3",
  AE: "gb0@4 ~@2 gb0@3 ~@3 gb0@3 ~@3 gb0@4 ~@2", AF: "a0@2 ~ a0@2 ~ a0@2 ~ a0@2 ~", AG: "e0@2 ~ e0@2 ~ e0@2 ~ e0@2 ~",
  AH: "ab0 ~@7", AI: "b0@2 ~ b0@2 ~ b0@2 ~ b0@2 ~", AJ: "gb0@5 ~ gb0@4 ~@2 gb0@4 ~@2 gb0@3 ~@3",
  AK: "gb0@4 ~@2 gb0@4 ~@2 gb0@3 ~@3 gb0@2 ~@4", AL: "b0@4 ~@2 b0@4 ~@2 gb0@4 ~@2 gb0@3 ~@3",
  AM: "bb0@4 ~@2 bb0@3 ~@3 ab0@4 ~@2 ab0@3 ~@3", AN: "db1@3 ~@3 db1@3 ~@3 db1@2 ~@4 db1@2 ~@4",
  AO: "db1@2 ~@4 db1@2 ~@4 db1@3 ~@3 db1@2 ~@4", AP: "ab0@3 ~@3 ab0@4 ~@2 ab0@3 ~@3 ab0@4 ~@2",
  AQ: "gb0@4 ~@2 gb0@3 ~@4 gb0@3 ~@3 gb0@3 ~@2", AR: "f0@4 ~@2 f0@4 ~@2 f0@4 ~@3 f0@3 ~@2",
  AS: "bb0@3 ~@3 bb0@4 ~@2 bb0@4 ~@2 bb0@4 ~@2", AT: "gb0@3 ~@3 gb0@4 ~@2 gb0@3 ~@3 gb0@3 ~@3",
  AU: "f0@3 ~@3 f0@4 ~@2 f0@4 ~@2 f0@3 ~@3", AV: "e0@4 ~@2 e0@4 ~@2 e0@4 ~@3 e0@3 ~@2", AW: "ab0 ~@11",
  AX: "db1@3 ~@3 db1@4 ~@2 db1@4 ~@2 db1@3 ~@3", AY: "f0@4 ~@2 f0@4 ~@2 f0@3 ~@3 f0@3 ~@3",
  AZ: "b0@4 ~@2 b0@4 ~@2 b0@4 ~@2 b0@3 ~@3", BA: "~ f0@4 ~@2 f0@4 ~ f0@4 ~@2 f0@4 ~@2",
  BB: "bb0@2 ~ bb0@2 ~ bb0@2 ~ bb0@2 ~", BC: "f0@4 ~@2 f0@3 ~@3 f0@4 ~@2 f0@3 ~@3",
  BD: "eb1@4 ~@2 eb1@4 ~@2 ab0@4 ~@2 ab0@3 ~@3", BE: "b0@4 ~@3 b0@3 ~@2 gb0@4 ~@2 gb0@3 ~@3",
  BF: "db1@3 ~@3 db1@3 ~@3 db1@3 ~@3 db1@2 ~@4", BG: "db1@3 ~@3 f0@2 ~@4", BH: "b0 ~@2 gb0 ~@2", BI: "ab0 ~@5",
  BJ: "[~@6 db1@41 ~]/4",
})).s("gm_acoustic_bass").gain(0.56)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@12 A B A C D E F G@3 A H I G A H I J B K C D L F G@2 M N O P Q R S T U V W G A X I G A X I A B Y C Z AA F G@2 M N O
  P Q R AB T U AC W ~@5 G A X I AD B A AE Z AA C G AF ~@6
>`.pickRestart({
  A: "~@6 [f4,ab4,c5] ~@11 [f4,ab4,c5] ~@5", B: "~@6 [f4,bb4,db5] ~@11 [f4,bb4,db5] ~@5",
  C: "~@6 [gb4,bb4,db5] ~@11 [eb4,ab4,c5] ~@5", D: "~@6 [f4,ab4,db5] ~@11 [eb4,ab4,c5] ~@5",
  E: "~@6 [eb4,gb4,b4] ~@11 [db4,gb4,bb4] ~@5", F: "~@6 [f4,bb4,db5] ~@11 [eb4,ab4,c5] ~@5",
  G: "~@6 [f4,ab4,db5] ~@11 [f4,ab4,db5] ~@5", H: "~@6 [eb4,gb4,b4] ~@11 [eb4,gb4,b4] ~@5",
  I: "~@6 [gb4,bb4,db5] ~@11 [gb4,bb4,db5] ~@5", J: "~@7 c5@3 [f4,ab4,c5] ~@7 [f4,ab4,c5] ~@5, ~@2 [f4,ab4] ~@5",
  K: "~@6 [f4,ab4,c5] ~@9 f5 [f4,ab4] c5 ~@5", L: "~@6 [eb4,gb4,b4] ~@11 [gb4,bb4,db5] ~@5",
  M: "~@2 [ab4,c5,eb5,ab5] ~@2 [ab4,c5,eb5,ab5] ~@2 [ab4,c5,eb5,ab5] ~@2 [ab4,c5,eb5,ab5]", // Ab
  N: "~@2 [bb4,db5,gb5,bb5] ~@2 [bb4,db5,gb5,bb5] ~@2 [bb4,db5,gb5,bb5] ~@2 [a4,c5,f5,a5]", // Gb F
  O: "~@2 [a4,c5,f5,a5] ~@2 [a4,c5,f5,a5] ~@2 [a4,c5,f5,a5] ~@2 [bb4,db5,f5,bb5]", // F Bbm
  P: "~@4 [bb4,db5,f5,bb5]@3 ~@3 [bb4,db5,f5,bb5]@2 ~@4 [bb4,db5,f5,bb5]@2 ~@4 [bb4,db5,f5,bb5]@2", // Bbm
  Q: "~@2 [eb5,ab5] ~@2 [ab4,c5,eb5,ab5] ~@2 [ab4,c5,eb5,ab5] ~@2 [ab4,c5,eb5], ~ [ab4,c5] ~@6", // Ab5 Ab
  R: "~@2 [gb5,bb5] ~@2 [bb4,db5,gb5,bb5] ~@2 [bb4,db5,gb5,bb5] ~@2 [bb4,db5,gb5,bb5], ~ [bb4,db5] ~@6", // Gb Bbm
  S: "~@2 [f5,a5] ~@2 [f5,a5] ~@2 [a4,c5,f5,a5] ~@2 [a4,c5,f5,a5], ~ [a4,c5] ~ [a4,c5] ~@4", T: "[db5,e5]@23 ~",
  U: "[b4,e5,ab5]@7 ~", V: "[gb4,bb4,db5,eb5]@23 ~", W: "[ab4,c5,eb5] ~@7", X: "~@6 [gb4,b4,eb5] ~@11 [gb4,b4,eb5] ~@5",
  Y: "~@7 c5 ~@2 [f4,ab4,c5] ~@8 [f4,ab4,c5] ~@4, ~@3 [f4,ab4] ~@8", Z: "~@6 [f4,ab4,db5] ~@11 [f4,ab4,c5] ~@5",
  AA: "~@6 [gb4,b4,eb5] ~@11 [gb4,bb4,db5] ~@5", // B Gb
  AB: "~@2 [f5,a5] ~@2 [f5,a5] ~@2 [c5,f5,a5] ~@2 [a4,c5,f5,a5], ~ [a4,c5] ~ [a4,c5] ~ a4 ~@2", // F Am
  AC: "[gb4,bb4,db5], eb5@11 ~", AD: "~@6 [f4,ab4,c5] ~@9 c5@2 [f4,ab4] ~@5",
  AE: "~@6 [gb4,bb4,eb5] ~@11 [ab4,c5,eb5] ~@5", AF: "[f4,ab4,db5] ~@23",
})).s("gm_electric_guitar_muted").gain(0.56)

// chords · clavinet
const clavinet = note("<~@28 A@2 B C D E F G ~@20 H@2 I J K L M N O@2 ~@15 P@3 ~ Q@2 I R S E T U V ~@7>".pickRestart({
  A: "[~@16 [gb4,bb4,db5]@3 ~@3 [f4,ab4,c5]@25 ~]/2", B: "[f4,bb4,db5]@7 ~", C: "[f4,ab4,c5]@7 ~",
  D: "[eb4,gb4,db5]@11 ~ [eb4,ab4,c5]@11 ~, bb4@3 ~@5", E: "[f4,ab4,db5]@11 ~ [f4,ab4]@11 ~, ~@4 c5@3 ~",
  F: "[gb4,b4,eb5]@11 ~@2 [gb4,bb4,db5]@11", G: "[f4,bb4,db5]@11 ~ [eb4,ab4,c5]@10 ~@2",
  H: "[~@16 [gb4,bb4,db5]@3 ~@3 [f4,ab4,c5]@26]/2", I: "[f4,bb4,db5]@11 ~", J: "[f4,ab4]@11 ~, c5@5 ~",
  K: "[eb4,gb4,bb4,db5]@12 [eb4,ab4,c5]@11 ~", L: "[f4,ab4,db5]@11 ~ [f4,ab4,c5]@11 ~",
  M: "~ b4@11 [gb4,bb4,db5]@11 ~, [gb4,eb5]@11 ~@13, c5 ~@11", // Gb Ebm
  N: "~ ab4 ~@10 [eb4,ab4,c5]@11 ~, [f4,bb4,db5]@11 ~ db5 ~@11", O: "[f4,ab4,db5]/2",
  P: "[~@10 [gb4,bb4,db5] ~@5 [gb4,bb4,db5] ~@5 [f4,ab4,db5]@28 ~@22]/3", Q: "[~@8 [gb4,bb4,db5] ~@2 [f4,ab4,c5]@13]/2",
  R: "[f4,ab4,c5]@23 ~", S: "[eb4,gb4,bb4,db5]@10 ~@2 [eb4,ab4,c5]@11 ~", T: "[gb4,b4,eb5]@11 ~ [gb4,bb4,db5]@11 ~",
  U: "[f4,bb4,db5]@11 ~ [eb4,ab4,c5]@11 ~", V: "[f4,ab4,db5]",
})).s("gm_clavinet").gain(0.45)

// other · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A@5 B C D A B C D B E B F G H I J K A B C L M B N D B E B F G O P Q R S T U V W X Y Z AA AB AC AD AE C D A AF C D AG E
  AF F G H I Q K S AH U V W X Y Z AA AB AC ~ AI B C AJ A AK C D B E B F G AL I K AM AN AO AP@3 ~
>`.pickRestart({
  A: "db4 ~@3 db4 ~ db4 ~@3 db4 ~ db4 ~@3 db4 ~ db4 ~@3 db4 ~", B: "f3 ~@3 f3 ~ f3 ~@3 f3 ~ f3 ~@3 f3 ~ f3 ~@3 f3 ~",
  C: "b3 ~@3 b3 ~ b3 ~@3 b3 ~ b3 ~@3 b3 ~ b3 ~@3 b3 ~", D: "gb3 ~@3 gb3 ~ gb3 ~@3 gb3 ~ gb3 ~@3 gb3 ~ gb3 ~@3 gb3 ~",
  E: "bb3 ~@3 bb3 ~ bb3 ~@3 bb3 ~ bb3 ~@3 bb3 ~ bb3 ~@3 bb3 ~",
  F: "eb4 ~@3 eb4 ~ eb4 ~@3 eb4 ~ ab3 ~@3 ab3 ~ ab3 ~@3 ab3 ~",
  G: "db4 ~@3 db4 ~ db4 ~@3 db4 ~ f3 ~@3 f3 ~ f3 ~@3 f3 ~", H: "b3 ~@3 b3 ~ b3 ~@3 b3 ~ gb3 ~@3 gb3 ~ gb3 ~@3 gb3 ~",
  I: "bb3 ~@3 bb3 ~ bb3 ~@3 bb3 ~ ab3 ~@3 ab3 ~ ab3 ~@3 ab3 ~",
  J: "db4 ~@3 db4 ~ db4 ~@3 db4 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4 ~",
  K: "db4 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4 ~",
  L: "gb3 ~@3 gb3 ~ gb3 ~@3 gb3 ~ gb3 ~@3 gb3 ~@2 gb3 ~@2 gb3 ~",
  M: "~ f3 ~@2 f3 ~ db4 ~@3 db4 ~ db4 ~@3 db4 ~ db4 ~@3 db4 ~", N: "b3 ~@2 b3 ~@2 b3 ~@3 b3 ~ b3 ~@3 b3 ~ b3 ~@3 b3 ~",
  O: "b3 ~@3 b3 ~ b3 ~@3 b3 ~ gb3 ~@3 gb3 ~@2 gb3 ~@2 gb3 ~",
  P: "bb3 ~@3 bb3 ~ bb3 ~@3 bb3 ~@2 ab3 ~@2 ab3 ~ ab3 ~@3 ab3 ~",
  Q: "db4 ~@3 db4 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4 ~",
  R: "db4 ~ db4 ~ db4 ~@2 db4 ~ db4!2 ~ db4 ~@2 db4!2 ~ db4 ~@2 db4!2 ~",
  S: "[ab3,eb4]@2 ~@2 [ab3,eb4] ~ [ab3,f4]@3 ~ [ab3,eb4] ~ [ab3,eb4]@3 ~ [ab3,eb4] ~ [ab3,f4]@2 ~@2 gb3 db4", // Ab5 Db Ab5 Db
  T: "[gb3,db4]@3 ~ [gb3,db4] ~ [gb3,eb4]@3 ~ [gb3,db4]@2 [gb3,db4]@3 ~ [gb3,db4] ~ [gb3,eb4]@3 ~ [f3,c4] ~", // Gb5 Ebm Gb5 Ebm F5
  U: "[f3,c4]@2 ~@2 [f3,c4] ~ [f3,d4]@3 ~ [f3,c4] ~ [f3,c4]@2 ~@2 [f3,c4] ~ [f3,d4]@2 ~@2 [bb3,f4]@2", // F5 Dm F5 Dm Bb5
  V: "[bb3,f4]@2 ~@2 [bb3,f4]@2 [bb3,g4]@3 ~ [bb3,f4]@2 [bb3,f4]@2 ~@2 [bb3,f4] ~ [bb3,g4]@2 ~@2 [ab3,eb4] ~", // Bb5 Eb Bb5 Eb Ab5
  W: "[ab3,eb4]@3 ~ [ab3,eb4]@2 [ab3,f4]@3 ~ [ab3,eb4]@2 [ab3,eb4]@2 ~@2 eb4 ~ f4@2 ~@2 [gb3,db4] ~, ~@4 ab3 ~", // Ab5 Db Ab5 Gb5
  X: "[gb3,db4]@3 ~ [gb3,db4] ~ [gb3,eb4]@3 ~ [gb3,db4] ~ [gb3,db4]@3 ~ [gb3,db4] ~ [gb3,eb4]@3 ~ [f3,c4] ~", // Gb5 Ebm Gb5 Ebm F5
  Y: "[f3,c4]@2 ~@2 [f3,c4] ~ [f3,c4]@3 ~ [f3,c4] ~ [f3,c4]@2 ~@2 [f3,c4] ~ [f3,c4]@3 ~@3", // F5
  Z: "[a3,e4]@2 ~@2 [a3,e4] ~ [a3,gb4]@3 ~ [a3,e4] ~ [a3,e4]@3 ~ [a3,e4] ~ [a3,gb4]@3 ~@3", // A5 D A5 D
  AA: "[e4,b4]@2 ~@2 [e4,b4] ~ [e4,db5]@3 ~ [e4,b4] ~ [e4,b4]@3 ~ [e4,b4] ~ [e4,db5]@3 ~@3", // E5 Dbm E5 Dbm
  AB: "[gb3,db4]@3 [gb3,db4] ~@2 [gb3,eb4]@3 [gb3,db4] ~@2 gb3@3 [gb3,db4] ~@2 [gb3,eb4]@4 ~@2, ~@11 db4@3 ~@10", // Gb5 Ebm Gb5 Ebm
  AC: "[ab3,eb4] ~@5", AD: "db4@2 ~@2 db4 ~ db4@2 ~@2 db4 ~ db4@2 ~@2 db4 ~ db4@2 ~@2 db4 ~",
  AE: "f3@2 ~@2 f3 ~ f3@2 ~@2 f3 ~ f3@2 ~@2 f3 ~ f3 ~@3 f3 ~", AF: "f3 ~@3 f3 ~ f3 ~@3 f3 ~ f3 ~@3 f3 ~ f3@2 ~@2 f3 ~",
  AG: "f3 ~@3 f3 ~ f3 ~@3 f3 ~@2 f3 ~@2 f3 ~@2 f3 ~@2 f3 ~",
  AH: "[gb3,db4]@3 ~ [gb3,db4] ~ [gb3,eb4]@3 ~ [gb3,db4]@2 [gb3,db4]@2 ~@2 [gb3,db4] ~ [gb3,eb4]@3 ~ [f3,c4] ~", // Gb5 Ebm Gb5 Ebm F5
  AI: "db4 ~@3 db4 ~ db4@2 ~@2 db4 ~ db4 ~@3 db4 ~ db4 ~@3 db4 ~",
  AJ: "gb3 ~@2 gb3 ~@2 gb3 ~@3 gb3 ~ gb3 ~@3 gb3 ~ gb3 ~@3 gb3 ~",
  AK: "f3 ~@3 f3 ~ f3 ~@3 f3 ~ f3 ~@3 f3 ~@2 f3 ~@2 f3 ~", AL: "b3 ~@3 b3 ~ b3 ~@3 b3 ~ gb3 ~@2 gb3 ~@2 gb3 ~@3 gb3 ~",
  AM: "db4 ~@5 f3 ~@5", AN: "b3 ~@5 gb3 ~@5", AO: "ab3 ~@11",
  AP: "[~@13 [ab4,b4,eb5]@54 ~@5, ~@2 db4@9 ~, ~@13 ab5@59]/3", // Abm
})).s("gm_acoustic_guitar_steel").gain(0.48)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@11 A@2 B C D E F G ~@10 H I J@2 ~@24 K L M N ~@25 O P@2 Q ~@7 R@3 ~
>`.pickRestart({
  A: "[~@22 [f3,c4,f4,ab4]@2 ~ c4@19 ~@2 [bb3,db4,f4,bb4,db5]@2, ~@22 c5@21 ~@5, ~@6 [f3,f4,ab4]@5 ~]/2", // Fm Bbm Fm
  B: "[bb3,db4,f4,bb4,db5]@20 ~@2 [f3,c4,f4,ab4,c5] ~", C: "[f3,c4,f4,ab4,c5]@21 ~ [bb3,eb4,gb4,bb4,eb5]@2",
  D: "~ eb4@10 ~@2 c5@10 ~, [bb3,gb4,bb4,eb5]@10 ~@2 [ab3,c4,eb4,ab4]@11 ~", // Ebm Ab
  E: "[f4,ab4,db5]@8 ~@2 [f4,c5] ab4 [f4,ab4]@10 ~@2, ~@3 c5@2 ~", // Db F5 Fm
  F: "[gb4,b4,eb5]@8 ~@2 [gb4,bb4,db5] ~ [gb4,bb4,db5]@9 ~ [f4,bb4,db5] ~", // B Gb Bbm
  G: "~ [f4,bb4]@8 ~ [f4,ab4,c5] ~ [f4,ab4,c5]@9 ~@3, db5 ~@2", H: "[f4,ab4,c5,f5]@11 ~", I: "[f4,bb4,db5]@23 ~",
  J: "[[f4,ab4,c5]@22 ~@2 [bb4,db5]@12 [eb4,ab4,c5]@11 ~, ~@23 gb4@11 ~@14]/2", K: "[f4,ab4,c5]@11 ~",
  L: "[f4,bb4,db5]@11 ~", M: "[ab4,c5], f4@11 ~", N: "~ db5@11 [eb4,ab4,c5]@11 ~, [gb4,bb4]@11 ~@13",
  O: "[f4,ab4,c5]@23 ~", P: "[[f4,bb4,db5]@11 ~ [ab4,c5]@11 ~, ~@23 f4@21 ~@4]/2",
  Q: "[eb4,gb4,bb4,eb5]@5 ~ [eb4,ab4,c5,eb5]@6", // Ebm Ab
  R: "[~@12 [eb5,ab5] b5@54 ~@5, ~@12 [db4,ab4,b4]@31 ~@29, ~@13 ab5 ~@58]/3", // Ab5 Db7
})).s("gm_acoustic_guitar_nylon").gain(0.5)

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

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

// drums · clap
const clap = s("cp").struct("<~@12 A@4 B@3 ~@12 C@2 B@5 ~@19 A@4 B@5 ~@20 A@4 B@4 ~@7>".pickRestart({
  A: "x ~@4 x!2 ~@5", B: "~ x ~ x", C: "~@5 x!2 ~@5",
})).gain(0.37)

// drums · low tom
const low_tom = s("lt").struct("<~@20 A B ~@6 C B ~@7 A ~@10 D ~@7 C B ~@7 A ~@19 C ~@11 E ~@3>".pickRestart({
  A: "~@7 x!5", B: "x", C: "~@10 x!2", D: "~@15 x ~ x!2 ~ x!2 ~ x", E: "~ x ~",
})).gain(0.52)

// drums · hihat
const hihat = s("hh").struct("<A@20 ~ B@7 ~ B@8 ~ C@10 ~ B@7 D B@8 ~ C@2 E C@4 F@3 ~ B ~@18 G ~@4>".pickRestart({
  A: "x!4", B: "~ x ~ x", C: "x ~ x!2 ~ x!2 ~ x!2 ~ x", D: "~ x ~@2", E: "~@2 x ~@2 x ~@2 x ~@2 x",
  F: "x ~ x ~@2 x!2 ~ x ~@2 x", G: "~@3 x",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@48 A ~@16 B ~@19 C ~@11 D ~@3>".pickRestart({
  A: "~@9 x ~ x!2 ~ x ~@9", B: "~@4 x!3 ~@5", C: "~@6 x!4 ~@2", D: "~ x ~@4",
})).gain(0.52)

// drums · open hat
const open_hat = s("oh").struct("<~@68 [x!4] ~@4 [~ x ~ x]!3 ~@25>").gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@48 [x ~ x!2 ~ x!2 ~ x ~@15] ~@52>").gain(0.52)

// drums · crash
const crash = s("cr").struct("<~@38 A B@5 ~ C ~@20 A B ~@26 D@2 C E ~@3>".pickRestart({
  A: "x!2 ~ x", B: "~ x ~ x", C: "x!2 ~@6", D: "x!2 ~@2 x!2 ~@2", E: "~ x",
})).gain(0.52)

// drums · ride
const ride = s("rd").struct("<~@69 [x!4] [x ~@2 x ~ x!2 ~@2 x ~@2] [x!4]!5 ~@25>").gain(0.3)

stack(
  bass, electric_guitar_muted, clavinet, acoustic_guitar_steel, acoustic_guitar_nylon, kick, snare, clap, low_tom,
  hihat, mid_tom, open_hat, high_tom, crash, ride
)

More by Billy Joel