Strudelify

The Old Playground

Bruce Hornsby

KeyG majorTempo198 bpm
0:00/0:00
// The Old Playground — Bruce Hornsby
// 198 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 157 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(198/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@3 C@2 D@4 E F G@3 H@4 I J@2 K L M@3 N O J@2 K L P@4 Q@2 R L S@2 T@2 U@2 R L S@2 T@2 U@2 V@3 W@4 I J@2 K L M@3 N O
  J@2 K L P@4 Q@2 R L S@2 T@2 U@2 R L S@2 T@2 U@2 X Y@3 Z AA AB AC AD AE AF AG AH AI AJ@2 AK@2 AL AM@3 AL AN AK@2 AL AN
  AK@2 AO AP AQ AR R L S@2 T@2 U@2 R L S@2 T@2 U@2 AS AT AU AV AS AT AU AV AW
>`.pickRestart({
  A: "~@5 g5 d6 e6", B: "[~ [g4,d5]@20 d5 a5 b5, g6@7 ~]/3",
  C: "[~@6 [c4,g4]@7 g4 d5 e5, d6@13 ~@3, ~ [f4,c5,g5]@12 ~@3]/2", // C5 Fsus2
  D: "[~@21 g4 a4 b4 d5 c5 b4 a4 b4 g4 ~ c4, g5@21 ~@11, ~ g3@31, ~ d4@29 d4@2]/4", E: "[e4,g4,c5] [d4,g4,b4]",
  F: "[d4,f#4,a4] [c4,e4,g4]", // D C
  G: "[~ [d4,f4]@2 [d4,f4]!2 [c4,e4]@2 [c4,e4]@2 [b3,d4]@2 [b3,d4]@2 [a3,d4]@2 [a3,d4]@2 [g3,d4]@3 [g3,d4]@2 a3 [b3,d4]]/3", // Dm C Bm D5 G5 Bm
  H: "[[a3,d4]@2 [a3,d4] [g3,d4]@2 [g3,d4]@2 [g3,d4]@2 [d4,f4]@2 [d4,f4]!2 [c4,e4]@2 [c4,e4]@2 [b3,d4]@2 [b3,d4]@2 [a3,d4]@2 [a3,d4]@2 [g3,d4]@3 [e3,g3] g3 a3 [b3,d4]]/4", // D5 G5 Dm C Bm D5 G5 Em …
  I: "a3 b3 a3 [g3,d4]@2 [g3,d4]@2 e3, d4@3 ~@5", J: "[[d4,e4,g4]@3 [d4,b4] [d4,b4]@4, ~@3 g4@5]/2",
  K: "[d4,g4,b4] [c4,g4]", L: "[d4,f#4,a4]", M: "[[d4,e4,g4]@6 [d4,g4,b4]@6 ~@3 [d4,e4,g4]@5 [a3,d4,f#4]@4]/3",
  N: "g3@3 g3@2 d3 e3 g3, d4 ~", O: "g3!2 e3 d3 g3!2 e3 g3",
  P: "[[d4,e4,g4]@6 [d4,g4,b4]@6 ~@3 [d4,e4,g4]@5 [a3,d4,f#4]@3 [c4,e4,g4]@9]/4", // Em7 G Em7 D C
  Q: "[[a3,d4,f#4]@3 [a3,d4,f#4]@2 d4 g4 a4@2 g4 d5@2 e4 g4 d5@2]/2", R: "[d4,g4,b4]",
  S: "[[d4,g4,a4]@13 [a3,d4,f#4]@3]/2", T: "[d4,g4]/2", U: "[c4,f4,g4]/2",
  V: "[~ [d4,f4]@2 [d4,f4]!2 [c4,e4]@2 [c4,e4]@2 [b3,d4]@2 [b3,d4]@2 [a3,d4]@2 [a3,d4]@2 [g3,d4] [g3,d4]@2 ~ g3 a3 b3, ~@7 d4]/3", // Dm C Bm D5 G5
  W: "[a3 b3 a3 [g3,d4]@2 [g3,d4]@2 [g3,d4]@2 [d4,f4]@2 [d4,f4]!2 [c4,e4]@2 [c4,e4]@2 [b3,d4]@2 [b3,d4]@2 [a3,d4]@2 [a3,d4]@2 [g3,d4] [g3,d4]@2 e3 g3 a3 [b3,d4], d4@3 ~@29]/4", // G5 Dm C Bm D5 G5 Bm
  X: "e4 b3 d4 e4@3 a4 d4", Y: "[g4 a4@3 b4 g4 a4 b4@2 a4@2 g4@2 d4@2 c4@2 g4 c4 a3 b3@2 b3 d4]/3",
  Z: "e4 b3 d4 e4 g4 d4 e4 g4", AA: "a4 d4 g4 a4 b4 g4 a4 b4", AB: "~ e5@2 d5@2 g4@2 [b4,d5]",
  AC: "~ b4 a4 [g4,d5] [g4,d5]@2 [g4,d5] d4, ~ d5@2 ~@5", AD: "~ g4 b4 a4 d5 e5 d5 a5", AE: "d5 g5 a5 b5 c6@2 c6 b5",
  AF: "c6@2 c6 b5 c6@2 c6 b5", AG: "c6@2 b5!2 g5@2 a5 g5", AH: "a5 b5 d6@2 a5@2 d5@2 d5 e5 g5@2 e5@2 a4@2",
  AI: "a4 b4 d5@2 a4@2 d4@2 a4 b4 d5@2 a4@2 d4@2", AJ: "[[f#4,a4] e4 d4 [e4,g4] ~ [d4,g4] g3 c4@2 g4 c4 a3 b3 ~@3]/2",
  AK: "[[f#4,g4,a4]@3 [f#4,g4,a4]@5]/2", AL: "[c4,d4,g4]@7 b3", AM: "[c4 g4 c4 a3 b3@3 [f#4,g4,a4]@7 [f#4,g4,a4]@10]/3",
  AN: "c4 g4 c4 a3 b3@3 ~", AO: "[c4,d4,g4]@7 ~", AP: "[d4,e4,g4]!2", AQ: "[d4,f#4]", AR: "[b3,d4]",
  AS: "~ [g3,d4] ~ [g3,d4] ~ [g3,d4] e3 d3", AT: "[g3,d4]!2 [g3,c4,e4]!2", AU: "~ [g3,g4] ~ [g3,g4] ~ [g3,g4] e4 d4",
  AV: "[f4,a#4]@2 [e4,a4]@2 [d4,g4]@2 a#3!2", AW: "[b3,d4,g4] ~",
})).s("gm_piano").gain(0.38)

// other · drawbar organ
const drawbar_organ = note(`<
  ~@6 A@4 B C D@2 E F D@2 E G H@2 I J H@2 K L@2 H@2 I J H@2 K L J@2 M N O@2 P@2 Q@2 M N O@2 P@2 Q@2 R@2 S T R@2 S T H@2
  I J H@2 K L@2 H@2 I J H@2 K L J@2 M N O@2 P@2 Q@2 M N O@2 P@2 Q@2 U J S V U J S V U J S V U J S V W@2 L V W@2 L V W@2
  L V W@2 L X J@2 M N O@2 P@2 Q@2 M N O@2 P@2 Q@2 Y@2 M Z Y@2 M Z AA
>`.pickRestart({
  A: "[d4,g4]/4", B: "[e4,g4,c5] [d4,g4,b4]", C: "[d4,f#4,a4] [c4,e4,g4]", D: "[g3,b3,d4]/2", E: "[a3,c4,d4]",
  F: "[g3,d4] [a3,c4,d4]", G: "[g3,d4]!2", H: "[a3@3 g3@5]/2", I: "e3 c3", J: "d3", K: "e3 d3", L: "c3", M: "g3",
  N: "f#3", O: "[e3@3 d3]/2", P: "c4/2", Q: "[f3@13 e3@3]/2", R: "g3/2", S: "c4", T: "f3 c4", U: "e3", V: "a3 g3",
  W: "[e3@3 d3@5]/2", X: "a3 c4", Y: "[g3@3 g3]/2", Z: "f3!2 e3@2", AA: "b3 ~",
})).s("gm_drawbar_organ").gain(0.14)

// bass · electric bass finger
const bass = note(`<
  ~@10 A B@2 C D E F C D G H I J K H L M N@2 H I J K H L M O P@2 Q R S T U V W X Q R S T U V Y X F C D E F C D G H I J K
  H L M N@2 H I J K H L M O P@2 Q R S T U V W X Q R S T U V Y X Z AA AB AC Z AA AB AC Z AA AB AC Z AA AB AD AE@2 AF AG
  AE@2 AF AG AE@2 AF AG AE@2 AF A AH AI Q R S T U V W X Q R S T U V Y X AB@3 X AB@3 X AJ
>`.pickRestart({
  A: "a1 c2", B: "[e2@4 f2@3 g2@8 d2]/2", C: "g2@7 g2", D: "c3@7 c2", E: "f2@4 c2@3 d2", F: "g2@7 d2", G: "f2 d2",
  H: "a1@6 ~ g2", I: "g2@2 ~ g2 ~ g2 ~ g1", J: "e2 c2", K: "d2@3 d3 ~ d3 ~ d2", L: "g2", M: "e2 d2",
  N: "[c2 c3@2 c3]/2", O: "c2 c3", P: "[d2 d3@2 d3]/2", Q: "g1 g2", R: "f#2 f#3", S: "e2@3 e3 ~ e3 ~ e3",
  T: "e2 ~ e3 ~@2 d2@3", U: "c2@4 ~ c3 ~ c3", V: "c2@2 c2@2 ~ c3@3", W: "f2@4 ~ f3@2 f3", X: "f2@2 f2@2 ~ e2@3",
  Y: "f2@7 c2", Z: "b2@2 ~@5 b2", AA: "a2@2 a2@2 ~@3 a2", AB: "g2@2 ~@5 g2", AC: "a2@2 a2@2 ~ d3@3",
  AD: "a2@2 a2@2 ~ d3@2 g2", AE: "[e2@3 d2@5]/2", AF: "c2@3 b1@2 c2@3", AG: "a2 g2", AH: "d2", AI: "d2@2 b2@4 g2 d2",
  AJ: "b2 ~",
})).s("gm_electric_bass_finger").gain(0.36)

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

// drums · snare
const snare = s("sd").struct(`<
  A B A C A B A C A B A C ~ D@3 ~ D@3 ~ D@3 ~ D@4 ~ D@3 ~ D@21 ~ D@3 ~ D@3 ~ D@3 ~ D@4 ~ D@3 ~ D@37 ~ D@3 ~ D@3 ~ D@3 ~
  D@21 ~ D@3 ~ D@3 E
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~", B: "~@2 x ~@2 x ~@2", C: "~ x!2 ~@2 x ~ x", D: "~ x", E: "x",
})).gain(0.35)

// drums · clap
const clap = s("cp").struct(`<
  ~@12 A B@3 A B@3 A B@3 A B@4 A B@3 A B@21 A B@3 A B@3 A B@3 A B@4 A B@3 A B@37 A B@3 A B@3 A B@3 A B@21 A B@3 A B@3 C
>`.pickRestart({
  A: "~@3 x ~@4", B: "~ x", C: "x",
})).gain(0.35)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!156 x>").gain(0.25)

stack(piano, drawbar_organ, bass, kick, snare, clap, hihat)

More by Bruce Hornsby