Strudelify

Stander on the Mountain

Bruce Hornsby

KeyG majorTempo82 bpm
0:00/0:00
// Stander on the Mountain — Bruce Hornsby
// 82 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 53, 4/4 at bar 54) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 97 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(82/4)

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

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

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A@3 B A@3 B C D E F C D E G A@3 B A@3 B H I@2 C D E F C D E G A@3 B A@3 B H J@2 K L K L K M N@5 O@2 P@4 Q@4 R S@8 T@7
  U@8 V@6
>`.pickRestart({
  A: "[c4,g4]", B: "[c4,g4]@3 [g3,c4,d4,g4]@12 ~", C: "[c4,f4,a4]", D: "[d4,g4] [c4,d4,g4]@3", E: "[d#4,f4,a#4]",
  F: "[d4,f4,a#4] [c4,e4,g4]", G: "[d4,f4,a#4]@2 [c4,e4,g4] [c4,f4,a4]", H: "[a3,c4,f4]@3 [g3,c4,e4]@8 ~ [a3,c4,g4]@4",
  I: "[[d4,g4]@19 [c4,d4,g4]@12 ~]/2", J: "[[d4,g4]@19 [c4,d4,g4]@11 [f4,a4,c5] ~]/2", K: "[f4,a#4,d5] [f4,a4,c5]",
  L: "[g4,c5]@7 [f4,a4,c5]", M: "[g4,d5] [c4,d4,a4]",
  N: "[[g4,a4]@5 ~@3 [g4,d5]@12 [g4,c5,d5]@4 [g4,d5]@12 [g4,c5,d5]@4 [g4,d5]@12 [g4,c5,d5]@4 [g4,d5]@12 [g4,c5,d5]@4 [g3,d4,a4]@8]/5", // Gsus2 G5 Gsus4 G5 Gsus4 G5 Gsus4 G5 …
  O: "[[g3,d4,a4] [g3,d4,a4]@2 [g3,d4,a4]]/2", // Gsus2
  P: "[[g3,d4,a4]@4 [g3,d4,a4]@8 [a3,c4,f4]@3 [d4,f4,a#4]@5 [a3,c4,f4]@3 [g3,b3,d#4]@5 [a3,c4,f4]@2 [c4,f4,a4]@2]/4", // Gsus2 F A# F Gaug F
  Q: "[[c4,e4,g4]@4 [g3,c4,e4]@4 [c4,d4,a4]@3 [a#3,c4,f4]@12 ~ [a3,c4,f4]@6 [d4,f4,a#4]@10 [a3,c4,f4]@6 [g3,b3,d#4]@10 [a3,c4,f4]@4 [c4,f4,a4]@4]/4", // C D7 A#sus2 F A# F Gaug F
  R: "[c4,e4,g4]@4 [g3,c4,e4]@4 [c4,d4,a4]@3 [a#3,c4,f4]@5", // C D7 A#sus2
  S: "[~@2 [a#3,c4,f4]@4 [a#3,c4,f4]@4 [a#3,c4,f4]@4 [a#3,c4,f4]@4 [c4,f4,a4]@4 [d4,g4] [c4,d4,g4]@3 [d#4,f4,a#4]@4 [d4,f4,a#4]@2]/8", // A#sus2 F G5 Csus2 D#sus2 A#
  T: "[[c4,e4,g4]@4 [c4,f4,a4]@4 [c4,g4]@16 [c4,g4]@16 [c4,g4]@16 [c4,g4]@3 [g3,c4,d4,g4]@12 ~ [c4,g4]@16 [c4,g4]@16 [c4,g4]@8]/7", // C F C5 Gsus4 C5
  U: "[~@8 [c4,g4]@3 [g3,c4,d4,g4]@12 ~ [a3,c4,f4]@3 [g3,c4,e4]@8 ~ [a3,c4,g4]@4 [g3,c4,e4]@12 [c4,f4,a4]@4 [d4,g4]@19 [c4,d4,g4]@11 [f4,a4,c5] ~ [d4,g4]@19 [c4,d4,g4]@12 ~ [g4,d5]@8]/8", // C5 Gsus4 F C Am7 C F G5 …
  V: "[~ [g4,c5,d5] [g4,d5]@3 [g4,c5,d5] [g4,d5]@3 [g4,c5,d5] [g4,d5]@3 [g4,c5,d5] [g4,d5]@3 [g4,c5,d5] [g4,d5]@3 [g4,c5,d5] ~@2]/6", // Gsus4 G5 Gsus4 G5 Gsus4 G5 Gsus4 G5 …
})).s("gm_synth_strings_1").gain(0.08)

// chords · piano · "A.PIANO 1"
const piano = note("<~@52 A B C D E F G@2 H ~@29 I J K J ~@3>".pickRestart({
  A: "~@7 [b3,d4,g4] ~ [b3,d4,g4] [a3,d4,g4] [g3,d4,g4] [a3,d4,g4] [g3,d4,g4]!2 [b3,d4,g4]", // G Dsus4 G5 Dsus4 G5 G
  B: "~ [b3,d4,g4] [a3,d4,g4] [g3,d4,g4] [g3,d4,g4]@2 ~ [b3,d4,g4] ~ [b3,d4,g4] [a3,d4,g4] [g3,d4,g4] [a3,d4,g4] ~ [g3,d4,g4] ~", // G Dsus4 G5 G Dsus4 G5 Dsus4 G5
  C: "[b3,d4,g4] ~ [a3,d4,g4] ~ [g3,d4,g4]@2 ~ [g4,b4,d5] ~ [g4,b4,d5]@2 ~ [g4,a4,d5] ~ [g4,d5] ~", // G Dsus4 G5 G Gsus2 G5
  D: "[g4,b4,d5] ~ [g4,a4,d5] ~ [g4,d5]@2 ~ [g3,d4,g4]@2 ~ [g3,d4,g4] ~ [g3,d4,g4] ~ [g3,d4,g4] ~", // G Gsus2 G5
  E: "[g3,d4,g4] ~ [g3,d4,g4] ~ [g3,d4,g4] ~ [g3,d4,g4] ~@6 d5 e5 ~", F: "g5 a5 b5 d6@2 ~ g5 ~@7 [g6,a6] [d6,g6]",
  G: "[e6 d6 a5 [d6,e6] f6 [d6,e6] g5 [a5,b5] c6 b5 g5 d5 ~ d5 ~ d5@3 ~@2 a4 [a#4,b4] [b4,d5] [a4,e5] [d5,e5] [d5,d#5] e5 [f5,f#5] [g5,g#5] a5 [a5,b5] [a#5,b5]]/2", // Dsus2 Asus2 Bmaj7 Bm A5 Dsus2 D#maj7 F#maj7 …
  H: "c6 [c#6,d6] [d#6,e6] [g6,a6] g6 a6 [d7,e7] [a6,a7] ~@8", // Dmaj7 Emaj7 Gsus2 Dsus2 A
  I: "~@7 [b3,d4,g4] ~ [b3,d4,g4] [a3,d4,g4] [g3,d4,g4] [c4,e4,g4]@2 ~ [b3,d4,g4]", // G Dsus4 G5 C G
  J: "~ [b3,d4,g4] [a3,d4,g4] [g3,d4,g4] [c4,e4,g4]@2 ~ [b3,d4,g4] ~ [b3,d4,g4] [a3,d4,g4] [g3,d4,g4] [a3,d4,g4] ~ [g3,d4,g4] ~", // G Dsus4 G5 C G Dsus4 G5 Dsus4 …
  K: "[b3,d4,g4] ~ [a3,d4,g4] ~ [g3,d4,g4]@2 ~ [b3,d4,g4] ~ [b3,d4,g4] [a3,d4,g4] [g3,d4,g4] [c4,e4,g4]@2 ~ [b3,d4,g4]", // G Dsus4 G5 G Dsus4 G5 C G
})).s("gm_piano").gain(0.5)

// chords · piano · "A.PIANO 1" · soft notes · G Dsus4 G5 G Dsus4 G5 C G …
const piano_soft = note(`<
  ~@94
  [[b3,d4,g4] ~ [a3,d4,g4] ~ [g3,d4,g4]@2 ~ [b3,d4,g4] ~ [b3,d4,g4] [a3,d4,g4] [g3,d4,g4] [c4,e4,g4]@2 ~ [b3,d4,g4]]
  [~ [b3,d4,g4] [a3,d4,g4] [g3,d4,g4] [c4,e4,g4]@2 ~ [b3,d4,g4] ~ [b3,d4,g4] [a3,d4,g4] [g3,d4,g4] [a3,d4,g4] ~ [g3,d4,g4] ~]
  [[b3,d4,g4] ~ [a3,d4,g4] ~ [g3,d4,g4]@2 ~ [b3,d4,g4] ~@8]
>`).s("gm_piano").gain(0.19)

// chords · piano · "A.PIANO 1"
const piano_2 = note("<~@55 A B C D@3 ~@36>".pickRestart({
  A: "~@9 f3 e3 ~ d3 ~ c3 ~", B: "b2 c3!2 ~ d3@3 ~ [a3,d4,a4]@4 ~@3 [e4,a4]",
  C: "~ [d4,g4] ~ [e4,a4] ~ [d4,g4] ~ [e4,a4] ~ [d4,g4] ~ [e4,a4]@3 ~@2", // G5 A5 G5 A5 G5 A5
  D: "[[d4,g4] ~ [e4,a4] ~ [d4,g4] ~ [d4,g4] ~ [a3,d4,g4]@2 ~ [e4,a4] ~ [d4,g4] ~ [a3,d4,g4]@3 ~@2 [e4,b4] ~ [a3,d4,g4] ~ [a3,d4,g4]@11 ~@13]/3", // G5 A5 G5 Dsus4 A5 G5 Dsus4 E5 …
})).s("gm_piano").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A@3 B A@4 C@7 D A@11 C@7 D A@3 E A@6 F C@6 G H@6 I J K@7 L M@4 N@3 C K@2 M J K@3 M@2 K@2 L N H@6 F
>`.pickRestart({
  A: "x ~@2 x ~@3 x", B: "x", C: "x ~@3 x ~@2 x", D: "x!2", E: "x ~@3 x!2 ~ x ~@6 x ~", F: "x ~@2 x ~@4",
  G: "x ~@7 x ~@6 x", H: "x ~@5 x ~ x ~@6 x", I: "x ~@2 x!3 ~@2", J: "~@4 x ~@2 x", K: "~@3 x!2 ~@2 x", L: "~ x",
  M: "~@3 x!2 ~@3", N: "x ~@2 x!2 ~@3",
})).gain(0.5)

// drums · rim
const rim = s("rim").struct("<~@52 A B@6 C ~@30 A B@3 D ~@2>".pickRestart({
  A: "~@8 x ~@2 x!2 ~ x!2", B: "~ x!2 ~ x ~ x!3 ~@2 x!2 ~ x!2", C: "~ x!2 ~ x ~ x!2 ~@8", D: "~ x!2 ~@13",
})).gain(0.44)

// drums · rim · soft notes
const rim_soft = s("rim").struct(`<
  ~@94
  [~@4 x ~ x!3 ~@2 x!2 ~ x!2]
  [~ x!2 ~ x ~ x!3 ~@2 x!2 ~ x!2]
  [~ x!2 ~ x ~ x!2 ~@8]
>`).gain(0.12)

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

// drums · clap
const clap = s("cp").struct(`<
  ~@8 A ~ A ~ A ~ A ~@8 A ~@3 A ~ A ~ A ~ A ~@8 A ~@3 A ~ A ~ A ~@11 B ~@3 B ~@2 B@4 C ~ C ~@8 C B@2 ~@2 C ~@7
>`.pickRestart({
  A: "~@7 x", B: "~@2 x!2 ~@4", C: "~@3 x ~@4",
})).gain(0.31)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@8 A@7 B ~@10 C A@7 B ~@10 C A@5 D E ~@6 F G ~ H ~ I ~ H ~ J@7 K G ~@2 L ~@4 J@2 ~@2 M J H ~@6
>`.pickRestart({
  A: "~@6 x!2 ~@8", B: "~@7 x!2 ~@7", C: "~@3 x", D: "~@6 x!2 ~@6 x!2", E: "x ~ x!2 ~@12", F: "~@7 x", G: "x",
  H: "~ x!2 ~@13", I: "~@2 x!2 ~@12", J: "~@14 x!2", K: "~@15 x", L: "~@13 x!2 ~", M: "~@4 x ~@9 x!2",
})).gain(0.37)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@8 ~@11 A@8 ~@11 A@6 ~@16 B A@7 C ~@7 B A C ~ B A D ~@6>".pickRestart({
  A: "x!16", B: "~@8 x!8", C: "x!8 ~@8", D: "x!7 ~@9",
})).gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@3 A ~@3 B C@7 D ~@10 E C@7 D ~@3 F ~@6 E C@5 G H ~@7 I ~@3 J K ~ K L M@3 N M@2 ~ K ~@3 O ~@3 M@2 ~@2 P M Q ~@6
>`.pickRestart({
  A: "x ~@2 x!2 ~@11", B: "~@7 x", C: "~@5 x ~@10", D: "~@14 x!2", E: "~@5 x ~@2", F: "~ x", G: "~@5 x ~@3 x!2 ~@5",
  H: "~@5 x!2 ~@9", I: "~@2 x!6 ~@8", J: "x ~@5 x!2 ~@8", K: "~@6 x!2 ~@8", L: "x ~@12 x ~@2", M: "~@13 x ~@2",
  N: "~@6 x!2 ~@5 x ~@2", O: "~@4 x!2 ~ x ~@8", P: "~@2 x ~@10 x ~@2", Q: "~@3 x!4 ~@9",
})).gain(0.5)

// drums · high tom
const high_tom = s("ht").struct("<~@3 A ~@11 B ~@10 C ~@7 B ~@10 C ~@29 D E ~@11 F ~@8>".pickRestart({
  A: "~@7 x!2 ~ x!3 ~@3", B: "~@4 x ~@5 x!4 ~@2", C: "~@9 x ~@6", D: "~@3 x", E: "~@2 x!4 ~@10", F: "~ x ~@14",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct(`<
  A ~@3 A ~@11 A ~@2 B A ~@14 A ~@2 C A ~@5 D A D A D A ~ E ~@5 F ~ F@3 G F@3 G ~@8 F ~@3 F ~@7 H ~ I ~@6
>`.pickRestart({
  A: "x", B: "~@2 x ~@2 x ~ x", C: "~@4 x!2 ~ x ~@8", D: "~@7 x", E: "x ~@2 x ~@4", F: "~ x", G: "x ~@7 x ~@2 x ~@4",
  H: "~@3 x!2 ~@3", I: "~@3 x ~@4",
})).gain(0.5)

// drums · tambourine
const tambourine = s("tb").struct("<~@52 A B@6 C ~@30 A B@2 D ~@3>".pickRestart({
  A: "~@8 x!8", B: "x!16", C: "x!8 ~@8", D: "x!10 ~@6",
})).gain(0.25)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@93 [~@10 x!6] [x!16]!2 [x!8 ~@8]>").gain(0.06)

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

// drums · claves
const claves = s("clave:2").struct("<~@9 A ~ A ~ A ~@14 A ~ A ~ A ~@41 B ~@22>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@4",
})).gain(2.13)

stack(
  bass, synth_strings_1, piano, piano_soft, piano_2, kick, rim, rim_soft, snare, clap, low_tom, hihat, mid_tom,
  high_tom, crash, tambourine, tambourine_soft, ride, claves
)

More by Bruce Hornsby