Strudelify

The Show Goes On

Bruce Hornsby

KeyD majorTempo78 bpm
0:00/0:00
// The Show Goes On — Bruce Hornsby
// 78 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 10, 4/4 at bar 10) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(78/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
const piano = note(`<
  A B C D E F G H I J K L M@2 N@3 O P@2 Q@4 R@2 ~@21 O P@2 S@2 ~@21 T U V W ~@6 X Y Z AA AB@2 AC AD AE@2 AF AG AH AI
  ~@22 O P@2 AJ O AK ~@3
>`.pickRestart({
  A: "~@13 a5 e6 ~", B: "d6@4 ~@3 [a4,d5] ~ [a4,d5] a5 ~ [d5,f#5]@4",
  C: "~@4 [b4,e5] e5 ~ a5 [d5,f#5]@4 ~@4, ~@5 b4@6 ~@5", D: "a4 [d4,e4,a4] ~ d5 [d4,f#4,g4,a4]@4 ~@4 a5 ~ a5 e6",
  E: "~ d6@4 ~@3 [a4,d5] ~ [a4,d5] a5 ~ [d5,f#5]@3", F: "~@4 [b4,e5] ~ e5 ~ a5 [d5,f#5]@4 ~@3, ~@3 b4@3 ~@2",
  G: "~ a4!2 ~ e5@4 ~ d4 ~ a4@4 ~, ~@2 d4@5 ~@2 a3@5 ~@2", H: "[b3,e4] ~ a4 [a3,b3,e4]@6 ~@4 [a3,d4]@3",
  I: "~@3 [a3,c#4]@4 ~@2 [f#4,a4,d5] b5 ~ a5 g5 ~ [a4,f#5,a5]", // A D
  J: "~ [e5,a5] [d5,a5] ~ [a4,d5] [c#5,d5] ~ [b4,d5] [a4,d5] ~ [g4,d5] [d4,a4,d5]@4 ~", // A5 D5 Dmaj7 Bm D5 G5 D5
  K: "~ [b3,d4,g4,a4] ~ [b3,f#4,a4] [b3,e4,a4] ~ [b3,d4,a4] [b3,d4,a4]@4 ~@3 [d4,a4,d5] [d4,a4,c#5,d5]", // G B7 Esus4 Bm7 D5 Dmaj7
  L: "~ [d4,b4,d5] [d4,a4,d5] ~ [a3,d4,g4,a4] [a3,f#4,a4] ~ [a3,e4,a4] [a3,d4,a4] ~ [b3,f#4,a4] ~ [b3,e4] ~ [a3,d4] [a3,b3]", // G D5 Dsus4 D A5 D5 B7 E5 …
  M: "[~ [a3,d4]@20 ~@11]/2", // D5
  N: "[~@2 [d5,e5,a5,d6]@4 ~@8 [a5,b5] [d5,d6]@5 ~@2 [e5,e6] [d5,d6]@2 ~ [e5,e6] [d5,d6]@2 ~ [e5,e6] [d5,d6]@2 ~ e5 d5@3 ~@3 a3 b3 d4!2 [b3,d4] [c#4,e4] ~]/3", // Dsus2 Asus2 D E D E D E …
  O: "[a3,d4,f#4]@2 ~ [d4,f#4] ~ a3 [b3,d4,g4,b4]@3 ~@3 a3 b3 d4 f#4", // D G
  P: "[[a3,c#4,e4]@2 ~ [a3,c#4] ~ a3 b3 [g3,a3,d4] ~ [a3,b3,e4] ~ [a3,d4,f#4] ~ [b3,d4,g4] ~ [a3,d4,f#4,a4]@2 ~ [d4,f#4] d4 ~ [a3,d4] [b3,d4,g4,b4]@3 ~@2 [d4,g4,a4]@2 ~ [d4,f#4,a4] ~]/2", // A Gsus2 Asus2 D G D D5 G …
  Q: "[[d4,f#4,a4] [c#4,e4,a4] ~ [c#4,e4,a4]@2 ~ [d4,f#4,a4] ~ [e4,f#4,a4] [d4,f#4,a4] [e4,f#4,a4] [d4,f#4,a4]@2 ~ [b3,f#4,a4] [d4,f#4,a4]@2 ~ [d4,f#4,b4] [d4,f#4,a4]@2 ~ [d4,g4,b4]@2 ~ [d4,g4,a4]@2 ~ [a4,d5] [a4,c#5,d5] [b4,d5] [e4,a4]@2 ~ [e4,b4] [e4,a4] ~ e4 [d4,f#4] [d4,g4] ~ [b3,f#4] [b3,e4] [b3,d4] [g3,b3,e4] [g3,b3,d4] [g3,b3,e4] [f#3,a3,d4]@2 ~ [a3,d4,f#4]!2 ~ d4 [b3,d4,g4]@2 ~ [b3,d4,f#4] a4 b4 ~ [b4,e5] ~ [a4,c#5,e5]]/4", // D A D F#m7 D F#m7 D B7 …
  R: "[~ [a4,c#5,e5] ~ [a4,d5]!5 [b4,d5] ~ [f#4,a4]!2 ~ [d4,f#4] [e4,g4] [d4,f#4,a4]@4 ~@13]/2", // A D5 Bm F#m D Em D
  S: "[[d4,f#4,a4] [c#4,e4,a4] ~ [c#4,e4,a4]@2 ~ [d4,f#4,a4] ~ [e4,f#4,a4] [d4,f#4,a4] [e4,f#4,a4] [d4,f#4,a4]@2 ~ [b3,f#4,a4] [d4,f#4,a4]@2 ~@15]/2", // D A D F#m7 D F#m7 D B7 …
  T: "[a3,d4,f#4] ~ [d4,f#4,b4] [d4,f#4,a4] ~ d4 [d4,g4,b4] [d4,g4,a4] ~ d4 f#4 a4 [d4,d5] [d4,c#5,d5] [d4,b4,d5] [e4,a4,d5]", // D Bm D G Dsus4 D Dmaj7 G …
  U: "~ e4 [e4,b4,e5] [e4,a4,d5] ~ [e4,a4,d5] [f#4,a4,d5] [g4,a4,d5] ~ [f#4,a4] [e4,a4] [d4,a4] [e4,a4]!4", // E5 Dsus2 D Gsus2 F#m A5 D5 A5
  V: "~ [f#4,a4]!2 [d4,a4] ~ [a3,d4] [b3,d4,a4,b4]@2 ~ g4 d4 [d4,b4,d5] ~ [d4,c#5,d5] ~ [d4,c#5,d5]", // F#m D5 Bm7 G Dmaj7
  W: "~ [d4,b4,d5] ~ [d4,b4,c#5,d5] ~ d4 [f#4,a4,d5] ~ [g4,a4,d5] [f#4,a4,d5] ~ [e4,a4,d5] ~ [d4,a4,d5]@2 ~", // G D Gsus2 D Dsus2 D5
  X: "[d4,e4]@4 ~@2 [g3,d4]@7 ~@3", Y: "[d4,f#4,g4]@4 ~@2 [d4,f#4,g4]@7 ~@3",
  Z: "~@2 [a3,d4] e4 a4 d4 e4 f#4 g4 a4 b4 d5 [e5,g5] f#5 e5 d5", // D5 Em
  AA: "e5 ~ c#5 a4 ~ a4 [a4,b4] d5 c#5 b4 a4 g4 [a4,b4] [g4,a4] f#4 e4", // Asus2 Gsus2
  AB: "[e4 f#4 d4 a3 ~ a3 b3 d4 ~ f#4 ~ g4 ~ a4 b4 ~ c#4 ~ f#4 e4@2 ~ a4 d4@2 ~ f#4 b3 ~ a3 [d4,e4] a4, ~@15 a4@2 ~@15]/2", // Dsus2
  AC: "[e4,f#4] f#4 g4 a4 b4 a4 [a4,d5] a5 [d5,e5] f#5 g5 a5 b5 d6 c#6 b5", // Esus2 D5 Dsus2
  AD: "b5 ~ a5 b5 a5 ~ f#5 g5 f#5 ~ d5 e5 [b4,d5] ~ e5 d5", // Bm
  AE: "[f#5 ~ [a4,d5,f#5]!2 [b4,e5,g5] ~ [b4,e5,g5]!2 [a4,d5,f#5] ~ [a4,d5,f#5] [b4,e5,g5] ~ [a4,d5,f#5] ~ [a4,c#5,e5]@2 ~ [a4,d5,f#5] [a4,c#5,e5] ~ e4 [e4,b4] [a4,b4] [a4,c#5] [a4,b4] [c#5,d5] [d5,f#5] [e5,f#5] [a5,c#6] [a5,b5] [c#6,d6]]/2", // D Em D Em D A D A …
  AF: "e6 f#6 d6 g5 ~ a5 [a5,d6] e6 a6 [f#6,g6] e6 [d6,e6] f#6 [d6,e6] c#6 [a5,b5]", // D5 Gmaj7 Dsus2 Asus2
  AG: "b5 c#6 a5 g5 f#5 e5 d5 e5 f#5 d5 a4 d5 [b4,e5,g5]!4", // Em
  AH: "~ [b4,e5,g5] ~ [b4,e5,g5]@2 ~ [a4,d5,f#5] ~ [b4,e5,g5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [f#4,a4,d5] [a4,c#5,e5]", // Em D Em D A
  AI: "~ a4!2 [d5,e5] a5 g5 f#5 e5 [e5,f#5] [d5,e5] c#5 b4 a4 g4 f#4 e4", // Dsus2 Esus2 Dsus2
  AJ: "[d4,f#4,a4] [c#4,e4,a4] ~ [c#4,e4,a4]@2 ~ [d4,f#4,a4] ~ [e4,f#4,a4] [d4,f#4,a4] [e4,f#4,a4] [d4,f#4,a4]@2 ~ [b3,f#4,a4] ~", // D A D F#m7 D F#m7 D B7
  AK: "[a3,c#4,e4]@2 ~ [a3,c#4] ~ a3 b3 ~@9", // A
})).s("gm_piano").gain(0.48)

// chords · piano · soft notes
const piano_soft = note("<~@124 A@2 B@2>".pickRestart({
  A: "[~@7 [g3,a3,d4] ~ [a3,b3,e4] ~ [a3,d4,f#4] ~ [b3,d4,g4] ~ [a3,d4,f#4,a4]@2 ~ [d4,f#4] d4 ~ [a3,d4] [b3,d4,g4,b4]@3 ~@2 [d4,g4,a4]@2 ~ [d4,f#4,a4] ~]/2", // Gsus2 Asus2 D G D D5 G Dsus4 …
  B: "[[d4,f#4,a4] [c#4,e4,a4] ~ [c#4,e4,a4]@2 ~ [d4,f#4,a4] ~ [e4,f#4,a4] [d4,f#4,a4] [e4,f#4,a4] [d4,f#4,a4]@2 ~ [b3,f#4,a4] [d4,f#4,a4]@2 ~@15]/2", // D A D F#m7 D F#m7 D B7 …
})).s("gm_piano").gain(0.12)

// chords · piano
const piano_2 = note("<A B@2 C D@2 E F G@2 H@2 I@3 J K ~@111>".pickRestart({
  A: "~@13 a4@2 ~", B: "[[a4,b4,d5]@3 ~@3 a4@3 ~@3 g4@3 ~, ~@9 g4@8 ~@4 a3@8 ~@3]/2",
  C: "~@2 e3@3 ~@2 [a4,b4], ~ b3@8 ~@7", D: "[~ [a4,b4,d5]@6 ~@6 a4@6 ~@6 g4@6 ~, ~@5 g4@4 ~@2 a3@4 ~]/2",
  E: "~@2 b3@5 ~@2 [e2,b2]@5 ~@2", F: "[d2,f#3]@8 ~@5 [g2,d3]@3",
  G: "[~@3 [a2,e3]@4 ~@2 [g3,b3,d4]@4 ~@2 [b2,f#3]@4 ~@2 [g2,d3]@4 ~@2 [a2,f#3]@4 ~]/2", // A5 G B5 G5 D
  H: "[~ a2@4 ~@2 [g2,d3]@4 ~@3 g3@4 ~@8 f#3 ~ e3 ~ d3 b2, ~@20 a2@9 ~@3]/2", I: "[~ [g2,d3]@36 ~@11]/3",
  J: "g2@3 ~ d3 ~ g2@4 ~@2 d3@2 ~ g2", K: "g2@3 ~ d3 ~ g2@5 ~@3 a2 ~",
})).s("gm_piano").gain(0.3)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@7 A@3 B@2 C@3 D@2 E F E F E F E F G H G H G H G H I J I J I K L M N K L M N K E F E F G H G H G H G H I J I J I K L
  M N K L M N K E F E F O P O P O P Q R E F E F E F E F E F E F I J I J I K L M N K L M N K L S N T L S N T E F E F E F
  E F ~
>`.pickRestart({
  A: "[[a3,b3,e4]@12 ~ [a3,d4]@6 [a3,c#4]@6 [f#4,g4,a4]@6 [d4,f#4,a4]@6 [b3,d4,g4]@6 [d4,a4,d5]@5]/3", // Asus2 D5 A F#m D G D5
  B: "[~ [b3,d4,g4,a4]@6 [b3,d4,a4]@12 ~ [b3,d4,g4,a4]@12]/2", C: "[~ [a3,d4]@47]/3", D: "[b3,d4,g4]/2",
  E: "[a3,d4,f#4]@3 [b3,d4,g4]@5", F: "[a3,c#4,e4]@3 [b3,d4,a4]@3 [b3,d4,g4]@2", G: "[d3,f#3,a3]@3 [g3,b3,d4]@5",
  H: "[e3,a3,c#4]@3 [b3,d4,f#4]@3 [g3,b3,d4]@2", I: "[c#4,e4,a4]", J: "[b3,d4,g4]@3 [a3,b3,e4,g4]@5",
  K: "[b3,d4,g4] [d4,f#4,a4] [a3,b3,e4,g4] [b3,d4,g4]", L: "[d4,f#4,a4]", M: "[b3,d4,g4]@3 [c#4,e4,a4]@5",
  N: "[d4,g4,a4]@3 [d4,f#4,a4]@5", O: "[c4,g4,a4]@3 [c4,d4,g4]@5", P: "[c4,e4,g4,a4]@3 [b3,d4,g4]@5", Q: "[c4,d4,e4]",
  R: "[d4,f#4,g4]", S: "[d4,g4,b4]@3 [c#4,e4,a4]@5", T: "[d4,g4,b4] [d4,f#4,a4] [b3,d4,g4]!2",
})).s("gm_synth_strings_1").gain(0.1)

// bass · electric bass finger
const bass = note(`<
  ~@17 A B C D E D E D F D G D F D G D H I J K H L M N O L M N O L A B C D F D G D F D G D H I J K H L M N O L M N O L A
  B C D P Q R S P T U V W D X Y E D E D Z D E D H I J K H L M N O L M N O L AA N AB L AA N AB L A B C D A B C D ~
>`.pickRestart({
  A: "d2@3 ~ d3 ~ g2@3 ~ d3@4 ~@2", B: "a2@3 ~ e3 ~ b2@4 ~@2 g2@3 ~", C: "d2@3 ~ d3 ~ g2@4 ~@2 d3@3 ~",
  D: "a2@3 ~ a3 ~ b2@4 ~@2 g2@3 ~", E: "d2@3 ~ d3 ~ g2@4 ~@2 g3@3 ~", F: "d2@3 ~ a3 ~ g2@7 ~@3",
  G: "d3@3 ~ a3 ~ g2@7 ~@3", H: "a2@3 ~ a3 ~ a2@4 ~@2 a3@3 ~", I: "g2@3 ~ a3 ~ e2@4 ~@2 e3 f#3 g3 ~",
  J: "a2@4 ~@2 a2@4 ~@2 a3@3 ~", K: "g2@3 ~ a3 ~ e2@3 ~ g2 ~ b2@3 ~", L: "g2@3 ~ f#2@3 ~ e2@3 ~ a2@3 ~",
  M: "d2@3 ~ d3 ~ d2@3 ~ d2 ~ d3@3 ~", N: "g2@3 ~ g3 ~ a2@4 ~@2 a3@3 ~", O: "b2@3 ~ g3 ~ a2@4 ~@2 a3@3 ~",
  P: "f3@4 ~@2 e3@7 ~@3", Q: "a2@4 ~@2 g2@3 ~ g3!2 g3@3 ~", R: "f3@4 ~@2 e3@4 ~@2 e3@3 ~",
  S: "a2@4 ~@2 g2@3 ~ d3 ~ d3@3 ~", T: "a2@4 ~@2 g2@4 ~@2 g2@3 ~", U: "c2@4 ~@2 c2@7 ~@3", V: "a2@4 ~@2 a2@7 ~@3",
  W: "d2@3 ~ f#3 ~ g2@4 ~@2 g3@3 ~", X: "d2@3 ~ f#3 ~ g2@4 ~@2 b3@3 ~", Y: "a2@3 ~ a3 ~ b2@4 ~@2 g3@3 ~",
  Z: "d2@3 ~ d3 ~ g2@4 ~@2 b3@3 ~", AA: "d2@3 ~ d3 ~ d2@4 ~@2 d3@3 ~", AB: "b2@3 ~ a3 ~ a2@3 ~ a3@4 ~@2",
})).s("gm_electric_bass_finger").gain(0.28)

// chords · distortion guitar
const distortion_guitar = note("<~@111 A B C D A B C D ~@9>".pickRestart({
  A: "[f#4,a4]@2 ~ [f#4,a4] ~@2 [f#4,a4]@3 ~ d4 ~ [f#4,a4] ~ d4 ~", // F#m
  B: "[d4,g4,b4]@2 ~ [d4,g4,b4] ~@2 [c#4,e4,a4]@7 ~@3", C: "[b3,g4]@4 ~@2 [f#4,a4]@5 ~@5",
  D: "[g4,b4]@3 ~ [d4,a4]@3 ~ [d4,g4]@3 ~ [d4,g4]@3 ~", // G D5 G5
})).s("gm_distortion_guitar").gain(0.22)

// drums · kick
const kick = s("bd").struct("<~@13 [x ~@5 x ~@5 x ~@2 x]!114 ~>").gain(0.36)

// drums · snare
const snare = s("sd").struct("<~@13 [~@3 x]!114 ~>").gain(0.4)

// drums · clap
const clap = s("cp").struct("<~@13 [~ x ~@2]!114 ~>").gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<~@13 [x!16]!114 ~>").gain(0.22)

stack(piano, piano_soft, piano_2, synth_strings_1, bass, distortion_guitar, kick, snare, clap, hihat)

More by Bruce Hornsby