Strudelify

Only the Good Die Young

Billy Joel

KeyC majorTempo150 bpm
0:00/0:00
// Only the Good Die Young — Billy Joel
// 150 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(150/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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.

// other · piano · "PIANO4"
const piano = note(`<
  A@2 B@2 A@2 C@2 ~ D E F G H I J@2 D E F G H I K@2 L M N O N P N ~ Q R S H T U S V@2 L W N X N P N ~ Y Z AA@2 AB AC AD
  AE AF AG AH@2 AI AJ@2 AK AL AM S AN AO AP AQ AR@2 L M N O N P N ~ AS AT AU AV AB AC AD AE AF AG AH@2 AI AJ@2 AK AL D E
  F G H I K@2 L M N O N P N ~ N P N ~ N P N ~
>`.pickRestart({
  A: "[c5@2 c5!3 d5 e5 e5@2 d5@2 c5 c5@4]/2", B: "[c5@2 c5!2 c5@2 d5 b4@2 a4@2 g4 g4@4]/2",
  C: "[c5@2 c5 c5@2 d5@2 b4@9]/2", D: "c4 c4@2 c4!2 c4@3", E: "g4@3 e4@4 ~", F: "c4!3 c4@3 d4@2", G: "d4@3 c4@3 ~@2",
  H: "c4!3 c4@2 c4 c4@2", I: "g4@2 g4 e4@4 ~", J: "[c4!2 c4@2 c4@2 d4 d4@5 ~@4]/2",
  K: "[c4!2 c4@2 c4@2 d4 d4@6 ~@2 g4]/2", L: "e5 f5 g5 e5@3 c5@2", M: "~ c4@3", N: "c4!2 ~@6", O: "~ d4@3",
  P: "~ e4@2 ~", Q: "c4!2 ~@2 c4!2 c4@2", R: "a4@2 f4 f4@2 f4@3", S: "g4 ~@2 e4@3 ~@2", T: "d4 ~@2 c4@3 ~@2",
  U: "c4@2 c4@3 ~ c4@2", V: "[c4!2 c4@2 c4@2 d4 d4@7 a4 g4]/2", W: "~ c4 ~@2", X: "~ b3@3", Y: "c4!2 ~@3 g4!3",
  Z: "g4@2 g4@2 g4@2 f4!2", AA: "[g4 f4!3 f4@2 d4 f4@2 e4@7]/2", AB: "g3!2 ~@3 e4!3", AC: "e4 d4 d4@6",
  AD: "a3!2 ~@2 a3!2 ~@2", AE: "d4 c4@2 a3@5", AF: "a3!2 ~@2 a3!2 g4!2", AG: "g4!3 g4@2 g4 f4!2",
  AH: "[g4 f4!3 a4@2 d4 f4@2 e4@7]/2", AI: "g3!2 ~@6", AJ: "[e4 d4@2 d4@6 e4!7]/2", AK: "e4@2 d4 d4@3 ~@2",
  AL: "g4 f4 e4 d4", AM: "c4 c4@2 c4@3 c4 ~", AN: "c4@2 c4@2 c4!2 d4@2", AO: "d4 d4@2 c4@3 ~@2",
  AP: "c4@2 c4@2 c4 ~ c4@2", AQ: "g4@2 g4 e4@3 ~@2", AR: "[c4@2 c4!2 c4@2 d4 b3@5 ~@4]/2", AS: "c4!2 ~@2 c4!2 ~@2",
  AT: "g4!8", AU: "f4!8", AV: "~ e4@7",
})).s("gm_piano").gain(0.36)

// other · piano · "PIANO4"
const piano_2 = note(`<
  A@2 B@2 A@2 C@2 ~ D E F G H E I@2 D E F G H E J@2 ~ K L M N O L ~ P Q R S T U R V@2 ~ W L X N O L ~ Y Z AA@2 AB AC AD
  AE AF AG AH@2 AI AJ@2 AK AL AM R AN AO U AP AQ@2 ~ K L M N O L ~ AR AS AT AU AB AC AD AE AF AG AH@2 AI AJ@2 AK AL D E
  F G H E J@2 ~ K L M N O L ~ N O L ~ N O L ~
>`.pickRestart({
  A: "[f5@2 f5!3 g5 a5 a5@2 g5@2 e5 e5@4]/2", B: "[f5@2 f5!2 f5@2 g5 d5@2 ~@2 c5 c5@4]/2",
  C: "[f5@2 f5 f5@2 g5@2 d5@9]/2", D: "f4 f4@2 f4!2 f4@3", E: "c5@3 a4@4 ~", F: "f4!4 f4@2 ~@2", G: "g4 a4@2 e4@3 ~@2",
  H: "f4!3 f4@2 f4 g4@2", I: "[f4!2 f4@2 f4@2 ~ g4@5 ~@4]/2", J: "[f4!2 f4@2 f4@2 ~ g4@6 ~@3]/2", K: "~ e4@3",
  L: "f4!2 ~@6", M: "~ g4@3", N: "e4!2 ~@6", O: "~ g4@2 ~", P: "e4!2 ~@2 e4!2 e4@2", Q: "c5@2 a4 a4@2 a4@3",
  R: "c5 ~@2 a4@3 ~@2", S: "f4!3 f4@2 f4 f4@2", T: "g4 ~@2 e4@3 ~@2", U: "f4@2 f4@2 f4 ~@3",
  V: "[f4!2 f4@2 f4@2 ~ g4@7 ~@2]/2", W: "~ e4 ~@2", X: "~ d4@3", Y: "e4!2 ~@3 c5!3", Z: "b4!3 ~",
  AA: "[a4!4 a4@2 ~ a4@2 g4@7]/2", AB: "c4!2 ~@3 g4!3", AC: "f#4 f#4@2 f#4@5", AD: "d4!2 ~@2 d4!2 ~@2",
  AE: "f4 f4@2 c4@5", AF: "c4!2 ~@2 c4!2 ~@2", AG: "b4!3 b4@2 b4!3", AH: "[a4!4 c5@2 ~ a4@2 g4@7]/2", AI: "c4!2 ~@6",
  AJ: "[f#4 f#4@2 f#4@6 f#4!7]/2", AK: "f4@2 f4 f4@3 ~@2", AL: "c5 a4 g4!2", AM: "f4 f4@2 f4@3 ~@2",
  AN: "f4@2 f4@2 f4!2 ~@2", AO: "g4 g4@2 e4@3 ~@2", AP: "c5@2 ~ a4@3 ~@2", AQ: "[f4@2 f4!2 f4@2 ~ d4@5 ~@4]/2",
  AR: "e4!2 ~@2 e4!2 ~@2", AS: "b4!8", AT: "a4!8", AU: "a4!2 g4@14",
})).s("gm_piano").gain(0.36)

// other · piano · "PIANO4"
const piano_3 = note(`<
  A@2 B@2 A@2 C@2 ~ D ~ E ~ F G H ~ D ~ E ~ F G H ~@2 I J K L M J ~ N O ~ P Q R ~ S ~@2 T J I L M J ~ U V W@2 X Y Z AA
  AB AC AD@2 AE AF@2 AG ~ AH ~ AI Q R ~ AJ@2 ~ I J K L M J ~ AK AL W@2 X Y Z AA AB AC AD@2 AE AF@2 AG ~ D ~ E ~ F G H
  ~@2 I J K L M J ~ L M J ~ L M J ~
>`.pickRestart({
  A: "[a5@2 a5!3 b5 c6 c6@2 b5@2 g5 g5@4]/2", B: "[a5@2 a5!2 a5@2 b5 g5@2 ~@2 e5 e5@4]/2",
  C: "[a5@2 a5 a5@2 b5@2 g5@9]/2", D: "a4 a4@2 a4!2 a4@3", E: "a4!3 a4@3 ~@2", F: "a4!3 a4@2 a4 ~@2", G: "~@7 g4",
  H: "a4!2 a4@2 a4@2 ~@2", I: "~ g4@3", J: "a4!2 ~@6", K: "~ b4@3", L: "g4!2 ~@6", M: "~ c5@2 ~",
  N: "g4!2 ~@2 g4!2 g4@2", O: "e5@2 c5 c5@2 c5@3", P: "~ a4!2 a4@2 a4 ~@2", Q: "b4 ~@7", R: "~@2 a4@2 a4 ~@3",
  S: "~ a4 a4@2 a4@2 ~@2", T: "~ g4 ~@2", U: "g4!2 ~@3 e5!3", V: "d5!3 ~", W: "[c5!4 c5@2 ~ c5@2 c5@7]/2",
  X: "e4!2 ~@3 c5!3", Y: "a4 a4@2 a4@5", Z: "f#4!2 ~@2 f#4!2 ~@2", AA: "a4 a4@2 f4@5", AB: "f4!2 ~@2 f4!2 ~@2",
  AC: "d5!3 d5@2 d5!3", AD: "[c5!4 f5@2 ~ c5@2 c5@7]/2", AE: "e4!2 ~@6", AF: "[a4 a4@2 a4@6 a4!7]/2",
  AG: "a4@2 a4 a4@3 ~@2", AH: "a4 a4@2 a4@3 ~@2", AI: "~@2 a4@2 a4!2 ~@2", AJ: "[~@2 a4!2 a4@2 ~ g4@5 ~@4]/2",
  AK: "g4!2 ~@2 g4!2 ~@2", AL: "d5!8",
})).s("gm_piano").gain(0.36)

// other · alto sax · "PIANO4 SAX1 PIANO4"
const alto_sax = note("<~@84 A B@2 C D E@2 F ~@32>".pickRestart({
  A: "g5@4 g5@4 g5@3 g5 g5@2 g5@2", B: "[f5@4 f5@4 f5@3 f5@3 f5 f5@2 ~@3 c6@5 a5@2 g5@2 e5 d5@2]/2",
  C: "e5@8 ~@2 e5 g5 c6@2 d6 c6", D: "d6@2 b5 a5 f#5!2 d5 c#5 d5@4 ~@4",
  E: "[d5@2 b4 a4 f#4@2 e4 c#4 d4@4 f4@8 c5@3 d5 c5@3 ~ f4@4]/2", F: "d4 c4 a3@2 f4@7 ~@5",
})).s("gm_alto_sax").gain(0.46)

// other · piano · "PIANO1"
const piano_4 = note(`<
  A@2 B@2 C@2 D E ~ F G F H F I J K F G F H F I J L@2 M F N O M F N O F G F H F I J L@2 M F N O M F N O P Q R@2 S@2 T@2
  P Q R@2 S@2 T U F G F H F I J K@2 M F N O M F N O P Q R@2 S@2 T@2 P Q R@2 S@2 T U F G F H F I J L@2 M F N O M F N O M
  F N O M F N
>`.pickRestart({
  A: "[c4@11 e4 e4@3 d4]/2", B: "[c4@7 g3@4 c4 c4@4]/2", C: "[f2@11 e4 e4@3 d4]/2", D: "c4@7 g3", E: "g3",
  F: "f3 c3 f3 f#3", G: "g3 g#3 a3 g3", H: "g3 d3 c3 e3", I: "g3 d3 a2 g2", J: "f2", K: "g2", L: "g2/2", M: "~ c3@3",
  N: "~ g3@3", O: "c3 a2 g2 a2", P: "g2 ~@3", Q: "f2 ~@3", R: "c2@2 c2@2 e2 f2 g2@2 c2@2 c2@2 e2 f2 g2@2",
  S: "d2@2 d2@2 f#2 g2 a2@2 d2@2 d2@2 f#2 g2 a2@2", T: "f2@2 f2@2 a2 a#2 c3@2 f2@2 f2@2 a2 a#2 c3@2", U: "e4 d4 c4 b3",
})).s("gm_piano").gain(0.36)

// bass · piano · "PIANO1"
const bass = note(`<
  ~@9 A B A C A D E F A B A C A D E G@2 H A I J H A I J A B A C A D E G@2 H A I J H A I J K L ~@6 K L ~@5 M A B A C A D
  E F@2 H A I J H A I J K L ~@6 K L ~@5 M A B A C A D E G@2 H A I J H A I J H A I J H A I
>`.pickRestart({
  A: "f2 c2 f2 f#2", B: "g2 g#2 a2 g2", C: "g2 d2 c2 e2", D: "g2 d2 a1 g1", E: "f1", F: "g1", G: "g1/2", H: "~ c2@3",
  I: "~ g2@3", J: "c2 a1 g1 a1", K: "g1 ~@3", L: "f1 ~@3", M: "e3 d3 c3 b2",
})).s("gm_piano").gain(0.36)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A B@7 C B@6 C ~ D B E F E F E F G B@6 C ~ D B E F E F E F B C@2 B@6 C@2 B@13 C D B E F E F E F G C@2 B@6 C@2 B@12
  C ~ D B E F E F E F E F E ~@5
>`.pickRestart({
  A: "~@15 x", B: "x!2", C: "x", D: "~@10 x!4 ~@2", E: "x ~@7 x ~@4 x!3", F: "~@4 x ~@3 x ~@6 x", G: "x ~@7 x ~@6 x",
})).gain(0.36)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@119
  [~@4 x ~@3 x ~@6 x]
  [x ~@7 x ~@4 x!3]
  [~@4 x ~@3 x ~@6 x]
  [x ~@7 x ~@4 x!3]
  [~@4 x ~@3 x ~@6 x]
>`).gain(0.1)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A B@6 C D B@6 C ~ E F G H I H I H@2 B@6 C ~ E F G H I H I H@2 C J B@6 C J B@5 K B@6 C ~ E F G H I H I H@2 C J B@6
  C J B@5 K B@6 C ~ E F G H I H I H I H I H I H I H
>`.pickRestart({
  A: "x!2 ~ x ~ x ~@2 x!2 ~ x!5", B: "x ~@2 x!2 ~@3", C: "x", D: "~@11 x!4 ~", E: "~@10 x!5 ~", F: "x!2",
  G: "~@4 x ~@5 x!6", H: "~ x ~ x", I: "~@4 x ~@6 x!5", J: "x ~@10 x!4 ~", K: "~@10 x!4 ~ x",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B@6 C D B@6 C@3 B@14 C@3 B@8 E F B@6 E F B@12 C D C B@8 E F B@6 E F B@12 C@3 B@15
>`.pickRestart({
  A: "~@4 x ~@3 x ~@3 x!4", B: "x!4", C: "x!2", D: "x ~@7 x ~@6 x", E: "x", F: "x ~@14 x",
})).gain(0.51)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@8 A B@4 C B D E B@6 F ~ G H I H J H J H@2 B@6 F ~ G H I H J H J H@2 ~ E B@6 ~ E B@5 ~ B@4 C B D E G H I H J H J H@2
  ~ E B@6 ~ E B@5 ~ B@6 F ~ G H I H J H J H J H J ~@5
>`.pickRestart({
  A: "~@11 x!5", B: "x ~@2 x!2 ~@3", C: "x ~@2 x!3 ~@2", D: "x!2", E: "~@15 x", F: "x", G: "~@12 x!3 ~", H: "~ x ~ x",
  I: "~@4 x ~@5 x!6", J: "~@4 x ~@6 x!5",
})).gain(0.36)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@119 [~ x ~ x] [~@4 x ~@6 x!5] [~ x ~ x] [~@4 x ~@6 x!5] [~ x ~ x]>").gain(0.1)

// drums · crash
const crash = s("cr").struct("<~@8 A ~@17 B ~ B ~@14 B ~ B ~@30 B ~ B ~@30 B ~ B ~@12>".pickRestart({
  A: "~@7 x", B: "~ x ~@2",
})).gain(0.26)

stack(piano, piano_2, piano_3, alto_sax, piano_4, bass, kick, kick_soft, snare, hihat, mid_tom, mid_tom_soft, crash)

More by Billy Joel