Strudelify
The River of Dreams cover art

1993 · River Of Dreams

The River of Dreams

Billy Joel

KeyG majorTempo90 bpm
0:00/0:00
// The River of Dreams — Billy Joel
// 90 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 92 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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 · "A.PIANO 2"
const piano = note(`<
  ~@9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE@6 AF AG@2 AH@2 AI AJ AK AL AM Z AA AB AC ~ AN
  AO AP AQ AR AS AT D ~@8 AU AV AW AX AY AZ BA BB BC BD BE BF BG AZ BA BH
>`.pickRestart({
  A: "[d4,g4,b4] ~", B: "~@5 [b3,d4,f4,a4]", C: "[c4,e4,g4]@13 ~@5 [c4,e4,g4,b4]@5 ~", D: "[d4,f#4,a4] ~",
  E: "~@14 [g3,c4,e4]@4 [g3,a3,c4,e4]@2 ~ [g3,a3,c4,e4]@2 ~", F: "[g3,b3,d4]@9 ~@9 [a3,b3,d4,f4]@5 ~",
  G: "[g3,c4,e4]@13 ~@5 [b3,c4,e4,g4]@5 ~", H: "[a3,d4,f#4]@3 ~@2 [a3,d4,f#4]", I: "[b3,d4,g4]@3 ~@2 [c4,e4,a4]",
  J: "[b3,d4,g4]@7 ~@11 [f4,a4,b4,d5]@5 ~", K: "[c4,e4,g4]@12 ~@6 [d4,e4,g4,b4]@5 ~", L: "[d4,e4,f#4,a4] ~",
  M: "[b3,e4,g4,b4]@10 ~@2 [b3,d4,g4,b4]@8 [b3,d4,g4]@3 ~", // Em G
  N: "[c4,e4,g4,b4]@8 [c4,e4,g4,b4]@3 ~ [b3,d4,f#4,a4]@7 ~ [b3,d4,f#4,g4,a4]@3 ~", // Cmaj7 Bm7
  O: "[c4,e4,g4]@7 ~@5 [d4,e4,g4,b4]@7 ~ [d4,e4,g4,b4]@3 ~", // C Em7
  P: "[a3,c#4,e4,a4]@6 ~@6 [d4,f#4]@3 ~@2 d5@2 ~ f4@2 ~@2, ~@17 f#4 ~@2 c#5 ~@3", Q: "[e4,c5] ~@5 [b3,d4,g4]@6",
  R: "~@6 [g3,c4,e4]@5 ~ [g3,b3,d4]@9 ~@3", S: "~@6 [a3,b3,d4,f4]@5 ~ [g3,c4,e4]@12",
  T: "~@6 [c4,e4,g4,b4]@5 ~ [d4,f#4,a4]@12", U: "~@2 [c4,e4,g4] [b3,d4,g4]@3", V: "~@8 [e4,a4,c5]@4 [d4,g4,b4]@7 ~@5",
  W: "~@6 [f4,a4,b4,d5]@5 ~ [c4,e4,g4]@12", X: "~@6 [d4,e4,g4,b4]@5 ~ [d4,e4,f#4,a4]@12", Y: "~@6 [b3,e4,g4,b4]@5 ~",
  Z: "[b3,d4,g4,b4]@8 [b3,d4,g4]@3 ~ [c4,e4,g4,b4]@8 [c4,e4,g4,b4]@3 ~", // G Cmaj7
  AA: "[b3,d4,f#4,a4]@3 ~@2 [b3,d4,f#4]@2 ~ [b3,d4,f#4]@3 ~ [c4,e4,g4,b4]@7 ~@5", // Bm7 Bm Cmaj7
  AB: "[d4,f#4,b4,d5]@4 ~ [d4,f#4,b4,d5]@2 ~ [d4,f#4,b4,d5]@4 [a3,c#4,e4,a4]@6 ~@6", // Bm A
  AC: "[d4,f#4]@3 ~@2 d5@2 ~ f4@2 ~@2 [e4,c5]@2 ~@10, ~@5 f#4 ~@2 c#5 ~@15", AD: "~@12 [d4,g4,b4]@9 ~@2 [e4,a4,c5]",
  AE: "[~@2 [d4,g4,b4]@7 ~@14 [e4,a4,c5]@2 ~ [d4,g4,b4]@4 [a3,d4,f4]@5 ~ [g3,c4,e4]@6 ~@5 [d4,f4]@2 ~ [c4,e4,g4]@4 ~@6 [a3,d4,f#4]@9 ~@2 [b3,e4,g4]@2 ~ [a3,d4,f#4]@5 ~@5 [d4,g4,b4]@7 ~@2 [d4,g4,b4] ~ [e4,a4,c5]@2 ~ [d4,g4,b4]@4 ~@15 [d4,g4,b4] ~ [e4,a4,c5]@2 ~ [d4,g4,b4]@4 ~@2 [f4,a4,b4,d5]@3 ~ [e4,g4,c5]@6 ~@6, ~@47 a4 ~@96]/6", // G Am G Dm C Dm C D …
  AF: "~@6 [d4,e4,g4,b4]@5 ~ [d4,f#4,a4]@12", // Em7 D
  AG: "[~@15 [d4,g4,b4]@2 ~ [d4,g4,b4]@2 ~ [d4,g4,b4] ~ [e4,a4,c5]@2 ~ [d4,g4,b4]@4 ~@2 [d4,g4,b4] ~@2 [d4,g4,b4] g1@2 g2 [g1,g4,b4,d5] ~ [g2,g4,b4,d5] [g4,b4,d5] ~ [g2,g4,b4,d5] [g4,b4,d5] ~ [a4,c5,e5], ~@21 g1 ~@2]/2", // G Am G Am
  AH: "[g1@2 g2 g1 ~ [g2,g4,b4,d5] g1@2 [g4,b4,d5,g5]@4 c2@2 c3 [c2,e4,a4,c5] ~ [c3,e4,a4,c5] [e4,a4,c5] ~ [c3,e4,a4,c5] [e4,a4,c5] ~@2 c2@2 c3 c2 ~ c3 c2@2 [c3,f#4,b4,d5] ~@3 d2@2 [d3,e4,a4,c5] [d2,e4,a4,c5] ~ [d3,e4,a4,c5] [e4,a4,c5] ~ [d3,e4,a4,c5] [e4,a4,c5] ~ [f#4,b4,d5], ~@2 [g4,b4,d5,g5]@3 ~@3 g2 ~@9 c2@2 ~@3 [f#4,b4,d5]@2 ~ [e4,a4,c5]@4 ~@12 d2@2 ~@4]/2", // G Am Bm Am Bm G Bm Am
  AI: "d2@2 d3 d2 ~ d3 d2@2 [e4,a4,c5]@4 g1@2 [g2,g4,g5] [g1,g4,b4,d5,g5] ~ g2 [g4,b4,d5,g5] ~ [g2,a4,c5,e5,a5] ~@2 [a#4,a#5], ~@2 [e4,a4,c5]@4 ~@2 d3 ~@9 g1@2 ~@4", // Am G Am7 A# Am
  AJ: "g1@2 g2 g1 ~ g2 g1@2 g2 ~@3 g1@2 [g2,g4,b4,g5] g1 ~ g2 [g1,g5]@2 g2 [a4,c5,a5] ~ [g4,b4,g5], ~@2 [g4,b4,d5,g5]@4 ~@12 [g4,b4] ~@5", // G Am G
  AK: "g1@2 g2 g1 ~ g2 [e4,e5] ~ g2 [f4,b4,f5]@3 [c2,e5,a5,c6]@2 c3 [d5,g5,a#5]@2 c3 [c5,f5,a5] ~ [c3,e5,g5] ~@2 [c5,f5,a5], ~@2 [f4,b4,f5]@4 g1@2 ~@7 c2 ~@2 c2@2 a#4@2 ~@2", // E Fdim Am Gm F C F Fdim
  AL: "c2@2 [c3,b4,e5,g5] [a#4,d5,f5]@2 c3 [a4,c5,e5] ~ c3 [a#4,d5,f5]@2 ~ d2@2 [d3,f#4,b4,d5] [d2,f#4,b4,d5] ~ [d3,f#4,d5] [d2,f#4]@2 [d3,f#4,b4,d5] ~@2 [e4,a4,c5], ~@3 c2 ~@2 c2@2 ~@9 b4@2 ~@5, ~@18 d5 ~@5", // Cmaj7 A# Am A# Bm D Bm Am
  AM: "d2@2 [d3,f#4] d2 ~ d3 d2@2 d3 ~@3 [b3,e4,g4,b4]@10 ~@2, ~@2 [b4,d5]@2 ~ [e4,a4,c5]@5 ~@14", // D Em Bm Am
  AN: "[d4,g4,b4]@9 ~@2 [e4,a4,c5] ~@2 [d4,g4,b4]@7 ~@3", AO: "~@11 [e4,a4,c5]@2 ~ [d4,g4,b4]@4 [a3,d4,f4]@5 ~",
  AP: "[g3,c4,e4]@6 ~@5 [d4,f4]@2 ~ [c4,e4,g4]@4 ~@6, ~@11 a4 ~@12", // C Dm C
  AQ: "[a3,d4,f#4]@9 ~@2 [b3,e4,g4]@2 ~ [a3,d4,f#4]@5 ~@5", // D Em D
  AR: "[d4,g4,b4]@7 ~@2 [d4,g4,b4] ~ [e4,a4,c5]@2 ~ [d4,g4,b4]@4 ~@6", // G Am G
  AS: "~@9 [d4,g4,b4] ~ [e4,a4,c5]@2 ~ [d4,g4,b4]@4 ~@2 [f4,a4,b4,d5]@3 ~", AT: "[e4,g4,c5]@6 ~@12 [d4,e4,g4,b4]@5 ~",
  AU: "[g5,d6]@2 ~ [g5,d6]@2 ~ a5@2 a#5 ~@2 b6@2 ~ [g6,d7]@2 ~ e7@2 ~ [g6,b6,g7]@3 ~", // G5 G
  AV: "g1@2 g2 [g5,b5,d6]@2 g2 [g5,c6,e6] ~ [f5,b5,d6]@2 ~@2 g1@2 [g2,b4,e5,g5] g1 ~ [g2,b4] [b4,e5,g5] ~ [a4,d5,f5]@3 ~, ~@3 g1 ~@2 g1@2 g2 ~@9 g1@2 g2 ~@3", // G C Bdim Em G Em Dm
  AW: "c2@2 [c3,a4] [c2,a4,d5,f5] ~ c3 [g4,c5,e5] ~ [c3,g4,c5,e5] [g4,c5,e5] ~ [a4,d5,f5] c2@2 c3 c2 ~ c3 c2@2 c3 ~@3, ~@6 c2@2 ~@6 [g4,c5,e5]@5 ~@5", // F Dm7 C Dm C
  AX: "d2@2 d3 [d5,d6]@2 [d3,d5,d6] [d5,d6] ~ [d3,d5,d6] [d5,d6] ~ [d5,d6]!2 ~ [d3,d5,d6] d2 ~ d3 d2@2 d3 ~@3, ~@3 d2 ~@2 d2@2 ~@4 d2@2 ~@3 [d5,d6]@7", // D
  AY: "[g1,d5,a#5]@2 [g2,b4,g5] [g1,b4,g5] ~ [g2,b4,g5] [b4,g5] ~ [g2,b4,g5] [d5,g5] ~@2 [g1,c#5]@2 g2 g1 ~ g2 g1@2 g2 ~@3, ~@3 g1 ~@2 g5@2 ~@4, ~@7 d5 ~@4", // Gm G Em G G5 Gdim
  AZ: "g1@2 [g2,g4,b4,g5] g1 ~ g2 [g1,g5]@2 g2 [a4,c5,a5] ~ [g4,b4,g5] g1@2 g2 g1 ~ g2 [e4,e5] ~ g2 [f4,b4,f5]@3, ~@6 [g4,b4] ~@7 [f4,b4,f5]@4 g1@2 ~@4", // G Am G E Fdim G Fdim
  BA: "[c2,e5,a5,c6]@2 c3 [d5,g5,a#5]@2 c3 [c5,f5,a5] ~ [c3,e5,g5] ~@2 [c5,f5,a5] c2@2 [c3,b4,e5,g5] [a#4,d5,f5]@2 c3 [a4,c5,e5] ~ c3 [a#4,d5,f5]@2 ~, ~@3 c2 ~@2 c2@2 a#4@2 ~@5 c2 ~@2 c2@2 ~@4", // Am Gm F C F Cmaj7 A# Am …
  BB: "d2@2 [d3,f#4,b4,d5] [d2,f#4,b4,d5] ~ [d3,f#4,d5] [d2,f#4]@2 [d3,f#4,b4,d5] ~@2 [e4,a4,c5] d2@2 [d3,f#4] d2 ~ d3 d2@2 ~@4, ~@5 b4@2 ~@7 [b4,d5]@2 ~ [e4,a4,c5]@5 ~@2, ~@6 d5 ~@17", // Bm D Bm Am D Bm Am
  BC: "g1@2 g2 [d4,g4,b4]@2 g2 [g1,d4,g4,b4]@2 g2 [d4,g4,b4] ~@2 g1@2 g2 g1 ~ g2 g1@2 [g2,d4,g4,b4] ~@2 [d4,g4,b4], ~@3 g1 ~@7 [e4,a4,c5]@2 ~ [d4,g4,b4]@4 ~@6", // G Am G
  BD: "g1@2 g2 [g1,g4,b4,d5] ~ [g2,g4,b4,d5] [g4,b4,d5] ~ [g2,g4,b4,d5] [g4,b4,d5] ~ [a4,c5,e5] g1@2 g2 g1 ~ [g2,g4,b4,d5] g1@2 [g4,b4,d5,g5]@4, ~@6 g1@2 ~@6 [g4,b4,d5,g5]@3 ~@3 g2 ~@3", // G Am G
  BE: "c2@2 c3 [c2,e4,a4,c5] ~ [c3,e4,a4,c5] [e4,a4,c5] ~ [c3,e4,a4,c5] [e4,a4,c5] ~@2 c2@2 c3 c2 ~ c3 c2@2 [c3,f#4,b4,d5] ~@3, ~@6 c2@2 ~@3 [f#4,b4,d5]@2 ~ [e4,a4,c5]@4 ~@6", // Am Bm Am
  BF: "d2@2 [d3,e4,a4,c5] [d2,e4,a4,c5] ~ [d3,e4,a4,c5] [e4,a4,c5] ~ [d3,e4,a4,c5] [e4,a4,c5] ~ [f#4,b4,d5] d2@2 d3 d2 ~ d3 d2@2 [e4,a4,c5]@4, ~@6 d2@2 ~@6 [e4,a4,c5]@4 ~@2 d3 ~@3", // Am Bm Am
  BG: "g1@2 [g2,g4,g5] [g1,g4,b4,d5,g5] ~ g2 [g4,b4,d5,g5] ~ [g2,a4,c5,e5,a5] ~@2 [a#4,a#5] g1@2 g2 g1 ~ g2 g1@2 g2 ~@3, ~@3 g1 ~@3 [g4,b4,d5,g5]@2 ~@3", // G Am7 A# G
  BH: "d2@2 [d3,f#4,b4,d5] [d2,f#4,b4,d5] ~ [d3,f#4,d5] [d2,f#4]@2 [d3,f#4,b4,d5] ~@15, ~@5 b4@2 ~@17, ~@6 d5 ~@17", // Bm D Bm
})).s("gm_piano").gain(0.5)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@8 A B@2 C D B@2 C D B@2 C D E F@2 G H I J K L I J K M N O P Q@2 I J K L I J K L I J K L I J K M N O P R ~ B@2 C D
  B@2 C D ~@3 S T ~@2 S U B C D B@2 C D B@2 C D B@2 C V
>`.pickRestart({
  A: "~@23 d1", B: "g1 ~ g1!2 ~ g1!2 ~ g1 ~@2 g1 ~@2 g1 ~@2 g1 g1@4 ~ g1",
  C: "c1 ~ c1!2 ~ c1!2 ~ c1 ~@2 c1 ~@2 c1 ~@2 c1 c1@5 c1", D: "d1 ~ d1!2 ~ d1!2 ~ d1 ~@2 d1 ~@2 d1 ~@2 d1 d1@5 d1",
  E: "e2@11 ~ d2@11 ~", F: "c2@11 ~ b1@11 ~", G: "a1@11 ~ d2@11 ~", H: "d2 ~@11 g1 ~ g1!2 ~ g1!2 ~ g1 ~@2 g1",
  I: "~@2 g1 ~@2 g1 g1@4 ~ g1!2 ~ g1!2 ~ g1!2 ~ g1 ~@2 g1", J: "~@2 g1 ~@2 g1 g1@4 ~ g1 c1 ~ c1!2 ~ c1!2 ~ c1 ~@2 c1",
  K: "~@2 c1 ~@2 c1 c1@5 c1 d1 ~ d1!2 ~ d1!2 ~ d1 ~@2 d1", L: "~@2 d1 ~@2 d1 d1@5 d1 g1 ~ g1!2 ~ g1!2 ~ g1 ~@2 g1",
  M: "~@2 d1 ~@2 d1 d1@5 d1 e2@11 ~", N: "d2@11 ~ c2@11 ~", O: "b1@11 ~ c2@11 ~", P: "b1@11 ~ a1@11 ~",
  Q: "[d2@11 ~ d2@15 ~@2 d2!2 [c2,c#2] b1 [a1,a#1] [g1,g#1] f#1 g1 ~ g1!2 ~ g1!2 ~ g1 ~@2 g1]/2", R: "d2@11 ~ d2 ~@11",
  S: "~@9 c#3@2 d2 c3@2 d2 f#2@2 b2 a2@2 d2@2 c#2 [b1,c2]", T: "[a1,a#1] ~@23",
  U: "[g1,a1,a#1] ~ g1!2 ~ g1!2 ~ g1 ~@2 g1 ~@2 g1 ~@2 g1 g1@4 ~ g1", // Gm
  V: "d1 ~ d1!2 ~ d1!2 ~ d1 ~@2 d1 ~@2 d1 ~@2 d1 d1@5 ~",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@8 A B C D E B C D E B C D F G@2 H@2 I J K L M J K L N@5 I J K L M J K L M J K L M J K L N@5 A B C D E B C D E ~@7 A
  B C D E B C D E B C D E B C D F
>`.pickRestart({
  A: "~@23 [d4,g4,b4]", // G
  B: "~@2 [d4,g4,b4]!2 ~@2 [d4,g4,b4] ~@2 [d4,g4,b4] ~@2 [d4,g4,d5]@2 [d4,g4,d5]!2 ~@2 [d4,g4,b4] ~@4 [d4,g4,b4]", // G G5 G
  C: "[d4,g4,b4] ~ [d4,g4,b4]!2 ~@2 [d4,g4,b4] ~@2 [d4,g4,b4] ~@2 [d4,g4,d5]@2 [d4,g4,d5]!2 ~@2 [d4,g4,b4] ~@2 [d4,g4,b4]@2 [d4,g4,b4]", // G G5 G
  D: "~@2 [c4,e4,g4]!2 ~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~@2 [c4,e4,g4]@2 [c4,e4,g4] ~@5 [d4,f#4,a4]", // C D
  E: "~@2 [d4,f#4,a4]!2 ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4]@2 [d4,f#4,a4] ~@5 [d4,g4,b4]", // D G
  F: "~@2 [d4,f#4,a4]!2 ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4]@2 [d4,f#4,a4] ~@6", // D
  G: "[[e4,g4,b4]@9 ~@3 b4@9 ~@3 [g4,b4]@9 ~@2 [d4,f#4,b4]@10 ~@3, ~@11 [d4,g4]@10 ~@2 e4@9 ~@16]/2", // Em G Bm G5
  H: "[[e4,g4,b4]@9 ~@3 g4@9 ~@3 [e4,g4]@9 ~@2 [d4,f#4,a4]@10 ~@3, ~@11 [b3,d4]@10 ~@2 c#4@9 ~@16]/2", // Em D Bm
  I: "~@12 [d4,g4,b4] ~ [d4,g4,b4]!2 ~@2 [d4,g4,b4] ~@2 [d4,g4,b4] ~@2", // G
  J: "[d4,g4,d5]@2 [d4,g4,d5]!2 ~@2 [d4,g4,b4] ~@4 [d4,g4,b4]!2 ~ [d4,g4,b4]!2 ~@2 [d4,g4,b4] ~@2 [d4,g4,b4] ~@2", // G5 G
  K: "[d4,g4,d5]@2 [d4,g4,d5]!2 ~@2 [d4,g4,b4] ~@2 [d4,g4,b4]@2 [d4,g4,b4] ~@2 [c4,e4,g4]!2 ~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~@2", // G5 G C
  L: "[c4,e4,g4] ~@2 [c4,e4,g4]@2 [c4,e4,g4] ~@5 [d4,f#4,a4] ~@2 [d4,f#4,a4]!2 ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2", // C D
  M: "[d4,f#4,a4] ~@2 [d4,f#4,a4]@2 [d4,f#4,a4] ~@5 [d4,g4,b4] ~@2 [d4,g4,b4]!2 ~@2 [d4,g4,b4] ~@2 [d4,g4,b4] ~@2", // D G
  N: "[[d4,f#4,a4] ~@2 [d4,f#4,a4]@2 [d4,f#4,a4] ~@6 [e4,g4,b4]@9 ~@3 b4@9 ~@3 [g4,b4]@9 ~@2 [d4,f#4,b4]@10 ~@3 [e4,g4,b4]@9 ~@3 g4@9 ~@3 [e4,g4]@9 ~@2 [d4,f#4,a4]@10 ~@15, ~@23 [d4,g4]@10 ~@2 e4@9 ~@27 [b3,d4]@10 ~@2 c#4@9 ~@28]/5", // D Em G Bm Em D G5 Bm
})).s("gm_electric_guitar_clean").gain(0.26).pan(0.3)

// chords · rock organ · "ORGAN 3"
const rock_organ = note("<~@21 A B A C ~@8 D E F G H ~@16 D E F G H ~@33>".pickRestart({
  A: "[d5,e5,g5,b5] [b4,d5,e5,g5]", B: "[b4,c5,e5,g5] [b4,d5,f#5,a5]", C: "[c#5,e5,g5,a5] [f#5,a5,d6]",
  D: "~ [d5,e5,g5,b5]", E: "[b4,d5,e5,g5] [b4,c5,e5,g5]", F: "[b4,d5,f#5,a5] [d5,e5,g5,b5]",
  G: "[b4,d5,e5,g5] [c#5,e5,g5,a5]", H: "[f#5,a5,d6] ~",
})).s("gm_rock_organ").gain(0.4)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note(`<
  ~@9 A@3 B A@3 B A@3 B C@2 D E F@8 G@5 F@16 G@5 ~ A@3 B A@3 B ~@8 A@3 B A@3 B A@3 B A@3 B
>`.pickRestart({
  A: "[[b4,d5]@2 [c5,e5], g4]/3", B: "[f#4,a4,d5]", C: "[[g4,e5] [f#4,d5] [e4,g4] [d4,f#4], b4@47 ~]/2",
  D: "[g4,e5] [f#4,d5], b4", E: "[e4,c#5] [f#4,d5], a4@23 ~",
  F: "[~ [b4,d5]@4 [c5,e5]@2 [f#4,a4,d5]@2 [b4,d5]@4 [c5,e5]@2 [f#4,a4,d5], ~ g4@6 ~@2 g4@6 ~]/8", // Bm C D Bm C D
  G: "[~ [g4,e5] [f#4,d5] [e4,g4] [d4,f#4] [g4,e5] [f#4,d5] [e4,c#5] [f#4,d5] ~, ~@12 b4@47 ~ b4@24 a4@23 ~@13]/5", // C D Em D C D C#m D
})).s("gm_percussive_organ").gain(0.16).pan(0.7)

// other · taiko drum · "TAIKO"
const taiko_drum = note("<~@8 A B@12 C ~@2 A D E@8 ~@3 E@16 F G ~@3 E A B@31 C>".pickRestart({
  A: "~@23 c4", B: "c4 ~@22 c4", C: "c4 ~@23", D: "c4 ~@10 c4!2 ~@11", E: "~@11 c4!2 ~@11",
  F: "~@11 c4!2 ~@4 c4 ~@3 c4 ~@2", G: "~@2 c4 ~@3 c4 ~ c4!2 ~@2 c4 ~@11",
})).s("gm_taiko_drum").gain(0.72)

// drums · kick
const kick = s("bd").struct("<x!21 [x!2]!5 [~ x]!8 [x!2]!4 [~ x]!17 [x!2]!4 ~ x!32>").gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@9 A@16 B A@11 C B A@19 C ~ A@32>".pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~ x ~@2",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<~@9 A@16 B C@11 D B C@19 D ~ A@32>".pickRestart({
  A: "x ~ x!6", B: "~@4 x ~ x!2", C: "x!5 ~ x!2", D: "x!4 ~@4",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@9 [~ x ~@6]!16 [~@5 x ~@2]!12 ~ [~@5 x ~@2]!20 ~@2 [~ x ~@6]!32>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@21 A ~@3 B ~@7 C ~@3 C@2 ~@7 C ~@7 C ~@3 C ~ A ~@31>".pickRestart({
  A: "x", B: "x!2", C: "~ x",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@9 [~@3 x]!12 ~@5 [~ x ~@2]!8 ~@5 [~ x ~@2]!16 ~@5 [~@3 x]!32>").gain(0.72)

// drums · bongos
const bongos = s("bongo:4").struct("<[~@11 x ~@12]!25 [~@23 x]!12 ~ [~@23 x]!20 ~@2 [~@11 x ~@12]!32>").gain(1.05)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<A@25 B A@11 C B A@19 C ~ A@32>".pickRestart({
  A: "~@5 x ~@11 x ~@6", B: "~@17 x ~@6", C: "~@5 x ~@18",
})).gain(1.05)

// drums · congas
const congas = s("conga:18").struct("<A@25 B A@11 C B A@19 C ~ A@32>".pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~ x ~@2",
})).gain(1.02)

// drums · congas
const congas_2 = s("conga:33").struct("<A@25 B C@11 D B C@19 D ~ A@31 E>".pickRestart({
  A: "~@3 x ~@5 x ~@5 x ~@5 x ~ x", B: "~@5 x ~ x", C: "~@3 x ~@5 x ~ x ~@3 x ~@5 x ~@2", D: "~@3 x ~@5 x ~ x ~@12",
  E: "~ x ~ x ~ x ~ x",
})).gain(1.02)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<A@25 B C@11 D E C@19 D ~ A@32>".pickRestart({
  A: "~ x!7", B: "x ~@4 x!3", C: "x!4 ~ x!3", D: "x!5 ~@3", E: "~@5 x!3",
})).gain(1.62)

// drums · shaker
const shaker = s("sh").struct("<~@5 A@20 B C@11 D E C@19 D ~ A@32>".pickRestart({
  A: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x!2 ~@2", B: "x ~@3 x!4",
  C: "x ~@2 x ~@2 x ~ x!2 ~@2 x ~@2 x ~@2 x ~@2 x ~@2", D: "x ~@2 x ~@2 x ~ x!2 ~@2 x ~@11", E: "~@4 x!4",
})).gain(0.24)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@5 A@20 B C@11 D B C@19 D ~ A@31 E>".pickRestart({
  A: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x", B: "~@14 x ~@2 x ~@2 x ~@2 x",
  C: "~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@2 x ~@2 x", D: "~@2 x ~@2 x ~@5 x ~@12",
  E: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@6",
})).gain(0.16)

// drums · lt
const lt = s("lt").struct(`<
  ~@9 A@2 B A@3 B A@3 B A@3 B A C D@2 E D@3 E D@3 E F C D@2 E D@3 E D@3 E D@3 E D@3 E F ~ A@2 B A@3 B A@3 B A@3 B A@3 B
  A@3 B A@3 B A@3 B A
>`.pickRestart({
  A: "~@3 x ~ x ~@3 x ~ x ~@3 x ~@5 x ~@2", B: "~@3 x ~ x ~@3 x ~ x ~@2 x!2 ~@5 x ~@2", C: "~@15 x ~ x ~@3 x ~ x",
  D: "~@3 x ~@5 x ~@5 x ~ x ~@3 x ~ x", E: "~@2 x!2 ~@5 x ~@5 x ~ x ~@3 x ~ x", F: "~ x ~ x ~@4",
})).gain(0.32)

stack(
  piano, bass, electric_guitar_clean, rock_organ, percussive_organ, taiko_drum, kick, snare, hihat, open_hat, crash,
  tambourine, bongos, bongos_2, congas, congas_2, cabasa, shaker, shaker_soft, lt
)

More by Billy Joel