Strudelify

Baby Grand

Billy Joel

KeyD minorTempo120 bpm
0:00/0:00
// Baby Grand — Billy Joel
// 120 bpm, 12/8, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 68 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/6)

// 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
const piano = note(`<
  A@3 B C D E F G@2 H I J K L M N D E F G@2 H I J K O P Q D E F G@2 H I J K R S T U V@2 W X Y Z AA D AB AC AD AE AF AG
  AH AI AJ AK AL AM AN AO AP@2 AQ@2
>`.pickRestart({
  A: "[~@19 d4@9 db4 ~ f4@2 g4@2 [d4,g4]@4 [d4,f4]@4 ~ c5@2 a4@2 g4@4 f4@2 d4@2 f4@2 g4@2 g4@4 ~ f4@2 d5 g4 ab4 g4 f4@2, ~@28 d4@6 ab4 ~@18 db4 ~@5 gb4 ~@12]/3", // G5 Dm
  B: "d4@3 d4 f4 g4 [d4,a4]@2 [f4,c5]@2 a4 f4, ~@6 db4 ~@5 ab4 ~@7 ab4 ~@3", C: "d4@2 ~ d4 ~ d4 ~@6",
  D: "~@4 [f4,a4] [f4,c5] [f4,c5]@3 [f4,a4] ~ [f4,a4]", // F F5 F
  E: "[e4,ab4]@3 ~ a4 c5 d5 c5 ~@3 [e4,ab4], ~@8 ab4 ~@3 [e4,ab4]@6 a4@6, ~@2 c5", // E
  F: "[eb4,g4]@3 ~ a4 c5 [eb4,g4]@4 [eb4,a4] g4, ~@8 ab4 ~@3 c5@12", // Eb Ebdim
  G: "[gb4@3 ~ [d4,d5] [eb4,eb5] [d4,a4,d5]@2 [d4,a4] [d4,c5] ~@2 f4@3 ~ g4 [d4,g4,bb4] d4@2 d4 [d4,g4,bb4,d5] ~ [g4,bb4], ~@6 g4@6 db5 ~@7 [d4,bb4]@10 d4@4 ~@2 [g4,bb4]@6 ~@2 d4@4, ~@36 a4 ~@11]/2", // D Eb D5 D7 Gm
  H: "[d4,gb4,a4]@3 ~ a4 c5 [d4,a4,d5]@2 [gb4,a4,c5] ~ [gb4,a4,c5] ~, ~ d4 ~ d4, ~@8 ab4 ~@15", // D D5 Gbdim
  I: "[d4,g4,bb4] [a4,c5] [bb4,d5] d4 bb4 d5 d4@3 ~ [f4,bb4]!2, ~@2 d4 [g4,d5]@3, ~@3 bb4@2 ~, ~@3 d4", // Gm Am Bb Bb5 G5
  J: "[d4,gb4,bb4]@3 e4 e5 [f4,f5] [e4,b4,e5]@2 [f4,b4,f5] [d4,ab4,d5]@2 [ab4,c5], ~ d4 ~@2, ~@2 e4 ~@3", // Daug F E5 Fdim Ddim Ab
  K: "[e4,g4,d5] e4@2 e4@3 ~@4 [gb4,a4,d5] c5, ~ [g4,c5]@5 ~ [gb4,a4,d5]@3 ~@2, ~@3 d4", // Em7 D C5 D
  L: "c5@2 ~ d4 d4@2 e4@3 f4@2 g4, [d4,f4]@3 ~ f4 ~@7, ~ bb4 ~@4", M: "[db4,f4,a4] [db4,e4] eb4 d4",
  N: "~@7 a4 bb4 a4 ~@2, ~@14 ab4 ~@9", O: "c5@2 ~ d4 d4@2 e4@3 f4@2 g4, [d4,f4]@3 ~ f4 ~@7, ~@2 bb4@3 ~@7",
  P: "f4@3 a4 c5 f5 [gb4,eb5]@2 ~@2 a4@2, ~@3 f4@3 ~@2 [gb4,bb4,d5]@2 ~@2, ~@6 ab4 ~@11 d4@6", // Ebm Gbaug
  Q: "[d4,f4]@3 c5 [f4,c5] [g4,c5] [ab4,c5] [a4,c5]@2 a4 c5 g4, ~@6 d4@6 ~@2 ab4 ~@9", // Dm F5 C5 Ab Am
  R: "c5@2 ~ d4 d4@2 e4@3 f4@2 g4, [d4,f4]@3 ~ f4 ~@7, ~ bb4@2 ~@3", S: "f4@3 ~@3 d4@2 db4 ~@3",
  T: "~@5 f4 [d4,g4]@3 ~@2 a4, ~@3 [db4,e4,g4]", // G5 Dbdim
  U: "[d4,f4,a4,d5]@3 ~ [a4,db5,f5] g5 [a4,c5,f5] e5 ~@2 d5@2, ~@3 [db4,f4]@3 ~@2 [a4,c5,f5]@2 ~@2, ~@3 f4", // Dm Aaug F Db F
  V: "[~@2 [d4,g4]@2 f4@2 g4@2 a4@2 ~@2 db4@6 c5@2 ~ a4@2 ~ [f4,a4]@2 [f4,a4,d5]@2 [f4,a4,d5]@2 [a4,d5]@2 [a4,db5,f5]@2 g5@2 [a4,c5,f5]@2 e5@2 f5@2 f4@2 f4@2 g4 f4, ~ d4 ~ [db4,g4] e4 [db4,f4] ~@2, ~@10 a4@8 ~@2 bb4@2 ~ g4@2 ~@23]/2", // G5 F Dm D5 Aaug F Dbdim Db
  W: "ab4@2 g4 eb4!2 ~ f4 ~ f4 eb4 ~ eb4, eb4 g4 ~@2",
  X: "d4@2 d4 ~ bb4 c5 [f4,a4,bb4,d5] f5 ~ d4 ~@2, ~ [f4,bb4] ~@2 [a4,bb4,d5,f5]@2, ~ d4 ~@2", // Bbmaj7 Bb5 Bbmaj7
  Y: "~@2 [a4,d5,f5] g5 ~ [ab4,b4,e5], ~@2 [f4,a4,e5]@2 ~@2 [ab4,d5]@3 [d4,e4]@3, ~@3 d4@3 ~@2 f5@2 ~@2", // Dm E Fmaj7 Abdim Dsus2
  Z: "~@4 [e4,g4,c5]@2 d5@2 c5@2 [g4,d5] c5 [gb4,d5]@4 ~@4 f4@4, ~@3 e4@2 e4 ~@2 c5@2 ~@2, ~@3 eb4", // C G5 D
  AA: "a4 g4@2 d4 ~ d4 ~@6, d4 ~@3, ab4 ~@23", AB: "[e4,ab4]@3 ~ a4 c5 d5 d5@2 d5 c5@2, ~@8 ab4 ~@3 [e4,ab4]@6 ~@6",
  AC: "[eb4,g4]@3 ~ a4 c5 [eb4,g4]@3 [eb4,g4] [eb4,a4] g4, ~@8 ab4 ~@3 c5@12", // Eb Ebdim
  AD: "gb4@3 ~ d5 eb5 [d4,a4,d5]@2 [d4,a4] [d4,c5] [d4,bb4]@2, ~ g4 ~@2", // D5 D7 Gm
  AE: "[d4,g4,bb4] [a4,c5] [bb4,d5] d4 g4 bb4 [d4,g4,bb4]@3 d4 g4 bb4, ~@2 d4 ~@2 d4", // Gm Am Bb Gm
  AF: "[gb4,a4]@3 ~ a4 c5 [gb4,d5]@2 ~@3 c5, ~@3 d4@3 ~@2 c5@3 ~, ~@4 [gb4,a4]!2, ~@3 d4", // Gbm D Gbm
  AG: "[d4,g4,bb4] [a4,c5] [bb4,d5] ~ [g4,bb4,d5]!2 ~@3 d4 ~@2, ~ d4 [g4,bb4,d5]@2", // Gm Am Bb Gm
  AH: "~@4 f5@2 g5@2 ~@2 e5 d5, ~ [ab4,b4]@2 [ab4,d5]@2 ab4, ~ e5 ~@2 f5 ~, ~ [d4,e4] ~ [d4,e4]", // Abm Abdim Dsus2
  AI: "d5 c5@2 [e4,c5]@3 ~@4 [gb4,c5,f5] d5, g4@6 ~ [gb4,c5,f5]@3 ~@2, e4 ~@2 d4", // C F
  AJ: "[d4,f4]@6 [d4,f4]@2 d4@4 e4@4 ~@4 d4 f4 ~ g4, ~@4 f4 ~@7", AK: "f4 e4 eb4 e4, a4, db4 ~",
  AL: "~@4 a4 c5 d5@2 c5 ~ c5 a4, d4@12 ~@10 ab4 ~, ~@8 ab4 ~@3 gb4@12",
  AM: "a4@2 g4@4 [d4,f4]@6 [d4,f4]@6 ~@2 [ab4,a4] bb4 ~ c5, d4 ~@2 [d4,f4]", // Dm Amaj7 Dm
  AN: "a4@2 g4@2 f4 d4 ~@4 f4!2, ~@10 db4 ~@13",
  AO: "d4@3 d4 ~ g4 [d4,g4]@2 ~@2 c5 a4, f4@8 f4@4 gb4 ~@3 f4@8, ~@6 db4 ~@17", // G5
  AP: "[f4 ~ g4 f4@4 d4@2 f4@2 g4@2 g4@4 ~@4 c5@2 a4@2 ~ [d4,f4]@6 d4@2 f4@2 g4@2 ~ ab4@2 c5@2 c5@2 c5 bb4 ab4, ~@13 gb4 ~@3 f4@8 ~@23]/2", // Dm
  AQ: "[e4 eb4 ~ db4 ~@2 f4@4 f4@7 ~@5 [g4,g5] [a4,a5] [b4,b5] [d5,d6] [g5,g6]@5 ~@17, ~@17 f4@9 ~@22]/2", // G A B D G
})).s("gm_piano").gain(0.48).pan(0.3)

// chords · piano
const piano_2 = note(`<
  A@3 B C D E F G H I J K L M N O D E F G H I J K L P Q R D E F G H I J K L S T U V W V X Y Z AA AB D AC F AD H AE J AF
  AG AH AI AJ AK AL AM AN AO@3
>`.pickRestart({
  A: "[~@19 [bb1,bb2,f3,ab3]@2 [b1,b2]@13 [bb1,bb2]@13 [a1,a2]@12 [ab1,ab2]@12 ~, ~@21 [f3,a3]@6 ~@32 [ab3,c4]@6 ~@7]/3", // Bb7 B Bb A Ab F Ab
  B: "[g1,g2,f3,a3,bb3] [f3,a3,bb3] [g1,g2] [f3,a3,bb3]", // Gm7 Bbmaj7 G Bbmaj7
  C: "[f3,bb3]@2 f3 bb3 f3 bb3 [a3,c4] f3 [a3,c4] [g3,b3] f3 [g3,bb3], [c2,c3] [c1,c2], ~@12 ab3 ~@3 ab3 ~@7", // Bb5 Am G Gm C
  D: "[f1,f2]@3 [f3,a3,c4]@3 ~@2 c4!2 c4@2, ~@2 [f1,f2] [f3,a3]", // F
  E: "[e1,e2,c4]@3 [e3,ab3,c4]@3 [e1,e2]@3 c4 c4@2, ~@3 [e3,ab3]", // C Eaug E
  F: "[eb1,eb2,a3,c4] [eb3,g3,a3,c4] [eb1,eb2] [eb3,g3,a3,c4]", // Adim Am7b5 Eb Am7b5
  G: "[d1,d2,d3,c4] [e1,e2,e3,c4] [gb1,gb2,gb3] [d1,d2,d3]", H: "[g1,g2] [f3,a3,bb3] [g1,g2] [f3,a3,bb3]",
  I: "[gb1,gb2]@3 c4@2 c4 ~@2 c4 c4@2 c4, ~ [gb3,a3] [gb1,gb2] [gb3,a3]", // Gb Gbm Gb Gbm
  J: "[f1,f2]@3 [f3,a3,bb3]@3 [f1,f2]@3 [f3,a3,bb3] [d2,d3] [eb2,eb3]", // F Bbmaj7 F Bbmaj7 D Eb
  K: "[e2,e3]@3 ab3@3 [ab1,ab2]@3 ~@2 c4, ~@3 [e3,ab3,b3]", // E Ab E
  L: "[a1,a2]@3 [g3,a3,c4] [c2,c3] [db2,db3] [d2,d3]@3 [gb3,a3,c4]@3", // A Am7 C Db D Gbdim
  M: "[g1,g2]@3 bb3 ~ f3 c4 c4@2 [bb1,bb2]@3, ~ a3 ~@2, ~@3 f3@2 ~ [c2,c3,g3]@3 ~@3, ~@2 bb3 ~@3", // G Bb C5
  N: "[a1,a2,g3] [g3,a3] [gb3,c4]!2, ~ [d2,d3]", // A7 Gsus2 Gbdim D
  O: "[g2,a3,c4]@3 [g2,ab3,b3]@3 [g3,bb3] c4!2 ~ c4 bb3, g1 c2, ~@2 c3!2", // Am7 G Gm
  P: "[g1,g2]@3 bb3 ~ f3 c4 c4@2 ~@3, ~ a3 g3 ~, ~@3 f3@2 ~ [c2,c3]@6, ~@2 bb3 ~@3", // G C
  Q: "[f1,f2,a3,c4] [a3,c4] [d2,d3] [gb3,c4], ab3 ~@23", R: "[g1,g2,b3]@3 [f3,a3,bb3]@3 ~@2 c4 c3@3, ~ c2, ~@2 c3 ~",
  S: "[g1,g2]@3 bb3 ~ f3 c4!3 ~@3, ~ a3 g3 ~, ~@3 f3@2 ~ [c2,c3]@6, ~@2 bb3 ~@3", // G C
  T: "[a3,c4]@3 f3 a3 c4 [bb1,bb2]@3 c4 bb3 f3, [f1,f2]@6 [f3,ab3]@2 ~ [bb1,bb2]@3", // Am Bb F Fm Bb
  U: "a3 c4@2 a3 c4 ~ [e2,e3,b3]@3 [a1,a2,bb3]@3, [f1,f2]!2 ~@2, ab3 ~@23", V: "[d2,d3] a3 [d2,d3] [a3,c4]",
  W: "~ b3 ~ [e3,b3]@3 [a1,a2,a3]@3 [a2,e3,g3]@3, [e2,e3] ~@3", // E5 A A7 E
  X: "[c2,c3,b3]@3 bb3!2 g3 c4 f3 c4!2 f3 c4, ~ c3 [f1,f2]!2, ~@3 g3@2 ~@7", // Cmaj7 F
  Y: "[f3,a3,bb3]@2 ~ [f3,a3,bb3]@3 [bb1,bb2]@3 [f3,a3,bb3] a2 bb2, [bb1,bb2] ~@3", Z: "b2 [f3,b3] e2 ab3",
  AA: "[a1,a2] [g3,a3,c4] [ab1,ab2] [gb3,ab3,c4]", // A Am7 Ab Ab7
  AB: "bb3@3 bb3 f3 bb3 [a3,c4] f3 [a3,c4] [g3,b3] f3 [g3,bb3], [g1,g2] c3, ~@2 c2!2, ~@16 ab3 ~@7", // Am G Gm G
  AC: "[e1,e2,c4] [e3,ab3,c4] [e1,e2] [e3,ab3,c4]", AD: "[d2,d3,c4] [e2,e3,c4] [gb2,gb3] [d2,d3]",
  AE: "[gb1,gb2,c4]@3 [gb3,a3,c4]@3 [gb1,gb2]@3 c4 c4@2, ~@3 gb3", AF: "[e2,e3] ab3 [ab1,ab2] ab3",
  AG: "[a1,a2]@3 [g3,a3,c4] [c2,c3] [db2,db3] [d2,d3]@3 [gb3,c4]@3", // A Am7 C Db D Gbdim
  AH: "[g1,g2]@3 bb3 ~ f3 [g3,c4]@2 c4 [bb1,bb2]@3, ~ a3 ~@2, ~@3 f3@2 ~ [c2,c3]@3 ~@3, ~@8 bb3@4 ~@6 c4 ~@5", // G C5 Bb C
  AI: "[a1,a2,g3] a2, ~@2 g3 ~", AJ: "[d2,d3], [gb3,c4] ~", AK: "b3!4, [g2,g3]", AL: "[bb3,c4]@6 c4@3 c4 ~@2, [c2,c3]",
  AM: "[b1,b2,a3] b2 [bb1,bb2] bb2", AN: "[a1,a2,a3,c4]@6 a2@6 ~ [ab1,ab2]@6 ab2@5, ~@13 [gb3,c4]@4 ~@7",
  AO: "[~ [g2,g3,b3]@6 ~ [f3,a3,bb3]@6 gb2@9 gb2@4 a3@2 ~ a3@4 a3@7 a3@9 ~@22, ~@14 gb1@13 f2@27 ~@18, ~@3 f1@2 ~@3, ~@27 ab3 ~@44]/3", // G Bbmaj7
})).s("gm_piano").gain(0.32).pan(0.6)

stack(piano, piano_2)

More by Billy Joel