Strudelify
Higher Ground cover art

Mother's Milk

Higher Ground

Red Hot Chili Peppers

KeyE minorTempo140 bpm
0:00/0:00
// Higher Ground — Red Hot Chili Peppers
// 140 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 118 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/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.

// bass · slap bass 1
const bass = note(`<
  A B A C A C A C A C A C A B A C A B A C D E F G A C A C A B A C A B A C D E F G A C A C H I H I H I J K A C A C A B A
  C A B A C D E F G A C A C A B A C A B A C D E F G A C A C H I H I H I J K A C A C A C A C A C A C A C A C ~@6
>`.pickRestart({
  A: "e1@2 e1 e2@2 e1 g1!2 g2 a1!2 a2", B: "e1@4 e1@2 e2@4 e1@2 g1@2 g1@2 g2@2 g1@2 a2@3 ~",
  C: "e1@4 e1@2 e2@4 e1@2 g1@2 g1@2 g2@2 a1@2 a2@3 ~", D: "f#1@2 f#1 f#2@2 f#1 a1!2 a2 b1!2 b2",
  E: "f#1@4 f#1@2 f#2@4 f#1@2 a1@2 a1@2 a2@2 a1@2 b2@3 ~", F: "a1@2 a1 a2@2 a1 c2!2 c3 d2!2 d3", G: "a1@3 d2!6 c#2!3",
  H: "a2@4 ~@2 a2@3 ~ g2@2 a2@3 ~ g2@2 a2@3 ~ g2@2", I: "e3@2 e3@2 e3@2 d3@3 ~ b2@2 e3@2 e3@2 e3@2 d3@4 b2@2",
  J: "f#2!4 c#3 e3 f#3 c#3 a2 f#2@3", K: "a2!12",
})).s("gm_slap_bass_1").gain(0.32)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@4 A B A C A B A C ~@8 D@2 E C A B A C F ~ G ~ G ~ G ~ D@2 E C A B A H I ~ J@2 K ~ L M A B A C ~@8 D@2 E C A B A H F
  ~ G N@2 ~ G O D@2 E C A B A H I ~ J@2 K ~ L M A B A C A B A C A B A C A B A C ~ P Q R@3
>`.pickRestart({
  A: "[e3,b3,e4] b4 ~ b4@2 ~@2 b4@6 ~@2 [g3,d4,g4,b4] ~ [g3,d4,g4,b4] [a3,a4]@2 [g3,g4]@2 [e3,e4]@2, ~ [g3,d4,g4] ~ [g3,d4,g4]@3 ~@6", // E5 G A G E G5
  B: "[e3,b3,e4,b4] ~ [g3,d4,g4,b4]@2 ~@3 b4@5 a3@2 b3@2 d4@2 a3@2 b3@2 d4@2, ~ [g3,d4,g4] ~@2", // E5 G G5
  C: "[g3,d4,g4,b4] ~ [g3,d4,g4,b4] ~ [g3,d4,g4,b4] ~@3 [d4,a4,d5]@2 [d4,a4,d5]@2 [d4,a4,d5]@2 [d4,a4,d5]@2 [d4,a4,d5]@2 [c#4,g#4,c#5]@2 [c#4,g#4,c#5]@2 [c#4,g#4,c#5]@2", // G D5 C#5
  D: "e4 ~ e4 ~ e4 ~ e4!3 f#4@3", E: "e4 ~ e4 ~ e4 ~ e4!3 e4@3", F: "~@9 [g4,g5]!3", G: "~@9 [g4,d5,g5]!3",
  H: "[g3,d4,g4,b4] ~ [g3,d4,g4,b4] ~ [g3,d4,g4,b4] ~@3 [d4,a4,d5]@2 [d4,a4,d5]@2 [d4,a4,d5]@2 [d4,a4,d5]@2 ~@2 [c#4,g#4,c#5]@2 [c#4,g#4,c#5]@2 ~@2", // G D5 C#5
  I: "e3@3 ~@3 e3@4 g3@6 e3@5 ~ d3@2", J: "[e3@3 ~@3 e3@3 g3@2 ~ a3@4 g3@2 e3@4 d3@4 ~@22]/2",
  K: "e3@2 ~ e3@2 e3 d3@3 c#3 ~@2", L: "f#2!4 c#3 e3 f#3 c#3 a2 f#2@3", M: "a2!12, e3",
  N: "[~@12 e4 d4 e4 d4 e4 d4 e4 d4 e4 d4 e4 d4@3 ~@16 [g4,d5,g5]@2 [g4,d5,g5]@2 [g4,d5,g5]@2]/2", O: "a4",
  P: "~@9 [e3,b3,e4]!3", // E5
  Q: "~ [e3,b3,e4]@3 [g3,d4,g4]@4 [a3,e4,a4]@4 [g3,d4,g4]@3 [e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]@2 ~ [e3,b3,e4]@2", // E5 G5 A5 G5 E5
  R: "[~ [g3,d4,g4]@4 [a3,e4,a4]@4 [g3,d4,g4]@3 [e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]@2 ~ [e3,b3,e4]@3 [g3,d4,g4]@4 [a3,e4,a4]@4 [g3,d4,g4]@3 [e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]@2 ~ [e3,b3,e4]@3 [g3,d4,g4]@4 [a3,e4,a4]@4 [g3,d4,g4]@3 [e3,b3,e4]@3 ~@15]/3", // G5 A5 G5 E5 G5 A5 G5 E5 …
})).s("gm_distortion_guitar").gain(0.36)

// bass · synth bass 1 · "Slap Bass 1"
const bass_2 = note("<~@4 A@8 ~@12 A@4 ~@12 A@4 ~@8 A@4 ~@12 A@4 ~@12 A@4 ~@8 A@16 ~@6>".pickRestart({
  A: "e2 ~@2 e2 ~@2 e2@6 g2@6 a2@6",
})).s("gm_synth_bass_1").gain(0.28).pan(0)

// chords · overdriven guitar · "Overdriven Guitar (1)"
const overdriven_guitar = note(`<
  ~@4 A@3 B A@4 ~@8 C@2 D E A@4 ~@8 C@2 D E A@4 F G F G F G H I A@4 ~@8 C@2 D E A@4 ~@8 C@2 D E A@4 F G F G F G H I A@16
  J@2 K L@3
>`.pickRestart({
  A: "[e2,b2,e3]@5 [e2,b2,e3] [e2,b2,e3]@6 [g2,d3,g3]@5 [g2,d3,g3] [a2,e3,a3]@6", // E5 G5 A5
  B: "[e2,b2,e3]@5 [e2,b2,e3] [e2,b2,e3]@6 [d3,a3,d4]@5 [d3,a3,d4] [c#3,g#3,c#4]@6", // E5 D5 C#5
  C: "f#3 ~ f#3 ~ f#3 ~ f#3 c#3 a2 f#2@3", D: "a2 ~ a2 ~ a2 ~ a2!3 b2@3", E: "a2",
  F: "[g4,d5,g5]@2 [g4,d5,g5]@2 ~@2 [g4,d5,g5]@5 ~ [g4,d5,g5]@2 [g4,d5,g5]@2 ~@2 [g4,d5,g5]@5 ~", // G5
  G: "[e3,b3,e4]!3 [g3,d4,g4]@2 [g3,d4,g4] [e3,b3,e4]!3 [g3,d4,g4]@2 [g3,d4,g4]", H: "[f#2,c#3,f#3]", I: "[a2,e3,a3]",
  J: "[[e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]@2 ~ [e3,b3,e4]@3 [g3,d4,g4]@4 [a3,e4,a4]@4 [g3,d4,g4]@3 [e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]@2 ~ [e3,b3,e4]@3 [g3,d4,g4]@4 [a3,e4,a4]@4 [g3,d4,g4]@3 [e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]@2]/2", // E5 G5 A5 G5 E5 G5 A5 G5 …
  K: "~ [e3,b3,e4]@3 [g3,d4,g4]@4 [a3,e4,a4]@4 [g3,d4,g4]@3 [e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]@2 ~ [e3,b3,e4]@2", // E5 G5 A5 G5 E5
  L: "[~ [g3,d4,g4]@4 [a3,e4,a4]@4 [g3,d4,g4]@3 [e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]@2 ~ [e3,b3,e4]@3 [g3,d4,g4]@4 [a3,e4,a4]@4 [g3,d4,g4]@3 [e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]@2 ~ [e3,b3,e4]@3 [g3,d4,g4]@4 [a3,e4,a4]@4 [g3,d4,g4]@3 [e3,b3,e4]@3 ~@15]/3", // G5 A5 G5 E5 G5 A5 G5 E5 …
})).s("gm_overdriven_guitar").gain(0.22)

// chords · distortion guitar
const distortion_guitar_2 = note(`<
  ~@12 A@8 B@2 C@2 ~@4 A@8 B@2 C@2 ~@16 A@8 B@2 C@2 ~@4 A@8 B@2 C@2 ~@34
>`.pickRestart({
  A: "[e2,b2]!6 [g2,d3,g3]@3 [a2,e3,a3]@3", B: "[f#2,c#3]!6 [a2,e3]@3 [b2,f#3]@3", C: "[a2,e3,a3]/2",
})).s("gm_distortion_guitar").gain(0.32)

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

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

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@113
  [~@18 x ~@4 x]
  [~@4 x ~@5 x ~@4 x ~@4 x ~@3]
  [~ x ~@5 x ~@4 x ~@4 x ~@4 x ~]
  [~@4 x ~@4 x ~@4 x ~@4 x ~@4]
  [~ x ~@22]
>`).gain(0.59)

// drums · mid tom
const mid_tom = s("mt").struct("<~@59 [~@11 x] ~@15 [~@11 x] ~@42>").gain(0.46)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~@3 A ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~ A ~
  A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@7 B C
>`.pickRestart({
  A: "x", B: "~@23 x", C: "~ x!2 ~@5",
})).gain(0.39)

// drums · ride
const ride = s("rd").struct("<~@45 A ~ A ~ A ~ A ~@37 A ~ A ~ A ~ A ~@22>".pickRestart({
  A: "~@3 x ~@5 x ~ x",
})).gain(0.52)

stack(
  bass, distortion_guitar, bass_2, overdriven_guitar, distortion_guitar_2, kick, snare, hihat, open_hat, mid_tom, crash,
  ride
)

More by Red Hot Chili Peppers