Strudelify

(Your Love Keeps Lifting Me) Higher & Higher

Jackie Wilson

KeyG majorTempo220 bpm
0:00/0:00
// (Your Love Keeps Lifting Me) Higher & Higher — Jackie Wilson
// 220 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 6 "acoustic bass" acoustic bass (copy of ch 7 "slap bass" slap bass 1)
// note: Full arrangement: all 115 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(220/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 · electric guitar muted · "muted guitar"
const electric_guitar_muted = note(`<
  ~@2 A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A
  B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F I@3
>`.pickRestart({
  A: "~@4 [b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4] ~@5", B: "[b3,d4,g4]@2 ~@4 [b3,d4,g4]@2 ~@4 [b3,d4,g4]@3 ~",
  C: "~@2 [c4,e4,g4]!4 ~@2", D: "[c4,e4,g4]@2 ~@4 [c4,e4,g4]@2 ~@4 [c4,e4,g4]@3 ~", E: "~@2 [c4,e4,a4]!4 ~@2",
  F: "[c4,e4,a4]@2 ~@4 [c4,e4,a4] ~@5 [c4,e4,a4]@2 b4 ~", G: "~@2 [b3,d4,g4]!4 ~@2",
  H: "[b3,d4,g4] ~@5 [c4,e4,g4] ~@3 [c4,e4,g4]@2 ~@2 [b3,d4,g4]@2", // G C G
  I: "[[g3,d4,g4]@3 ~@3 [g3,c4,g4]@3 ~@3 [g3,d4,g4]@34 ~@2]/3", // G5 C5 G5
})).s("gm_electric_guitar_muted").gain(0.72).pan(0.6)

// chords · synth brass 1 · "SYN BRASS RHYTHM"
const synth_brass_1 = note("<~@98 A B C D E F A G A B C D E F H@3>".pickRestart({
  A: "~@4 [d4,g4,b4] ~@5 [d4,g4,b4] ~@5", B: "[d4,g4,b4] ~@5 [d4,g4,b4] ~@9", C: "~@4 [e4,g4,c5] ~@5 [e4,g4,c5] ~@5",
  D: "[e4,g4,c5] ~@5 [e4,g4] ~@9, ~@3 c5 ~@4", E: "~@4 [e4,a4,c5] ~@5 [e4,a4,c5] ~@5",
  F: "[e4,a4,c5] ~@5 [e4,a4,c5] ~@9", G: "[g4,b4] ~@5 [d4,g4,b4] ~@9, d4 ~@7",
  H: "[[d4,g4,b4]@3 ~@3 [e4,g4,c5]@3 ~@3 [d4,g4,b4]@34 ~@2]/3", // G C G
})).s("gm_synth_brass_1").gain(0.5).pan(0.1)

// chords · drawbar organ · "hammond organ"
const drawbar_organ = note(`<
  ~@10 A@2 B@2 C@2 D@2 E ~ F@2 G@2 D@4 F@2 G@2 D@4 H@2 I@2 J@4 H@2 K@2 D@2 L M@2 N@2 O@2 P@2 Q@2 R@2 O@2 S D@2 H@2 I@2
  J@4 H@2 K@2 D@2 L M@2 N@2 O@2 P@2 Q@2 R@2 O@2 S D@2 F@2 G@2 D@4 F@2 G@2 T@3
>`.pickRestart({
  A: "[[d4,g4,b4]@31 ~]/2", B: "[g4,c5,e5]/2", C: "[c5,e5,a5]/2", D: "[d5,g5,b5]/2", E: "[d5,g5,b5] ~@15",
  F: "[c5,e5,g5]/2", G: "[[c5,e5]@15 ~, a5]/2", H: "[[e5,g5,c6]@31 ~]/2", I: "[e5,a5,c6]/2", J: "[[d5,g5,b5]@31 ~]/2",
  K: "[[e5,a5,c6]@31 ~]/2", L: "[d5,g5,b5] ~@3 [d5,g5,b5]@12",
  M: "[[d5,g5,b5]@5 ~ [d5,g5,b5]@5 ~ [d5,g5,b5]@7 ~ [e5,g5,c6]@11 ~]/2", // G C
  N: "[[e5,g5,c6]@5 ~ [e5,g5,c6]@5 ~ [e5,g5,c6]@8 [e5,a5,c6]@12]/2", // C Am
  O: "[[e5,a5,c6]@5 ~ [e5,a5,c6]@5 ~ [e5,a5,c6]@8 [d5,g5,b5]@12]/2", // Am G
  P: "[[d5,g5,b5]@5 ~ [d5,g5,b5]@5 ~ [d5,g5,b5]@8 [d5,g5,b5]@11 ~]/2", // G
  Q: "[[d5,g5,b5]@5 ~ [d5,g5,b5]@5 ~ [d5,g5,b5]@7 ~ [e5,g5,c6]@12]/2", // G C
  R: "[[e5,g5,c6]@5 ~ [e5,g5,c6]@5 ~ [e5,g5,c6]@7 ~ [e5,a5,c6]@12]/2", S: "[d5,g5,b5]@5 ~ [d5,g5,b5]@5 ~ [d5,g5,b5]@4",
  T: "[[d5,g5,b5]@3 ~@3 [e5,g5,c6]@3 ~@3 [d5,g5,b5]@34 ~@2]/3", // G C G
})).s("gm_drawbar_organ").gain(0.45)

// other · synth brass 2 · "brass"
const synth_brass_2 = note(`<
  ~@17 A B C D@2 E@2 F@2 G@2 H@2 I@2 J@2 ~@48 K L M N O P K L K Q R S T U K A B C D@2 E@2 F@2 G@2 H@2 I@2 V@3
>`.pickRestart({
  A: "~ [b3,b4] [d4,d5] [b3,b4]", B: "[d4,d5]", C: "[b3,b4]@5 d5 [b3,b4]@2, ~@10 d4 ~@5",
  D: "[[g3,g4]@18 ~@2 [d3,d4]@2 [d3,d4] ~ [e3,e4]@2 [g3,g4] ~@3 e3@2, ~@30 e4 ~]/2", // G D E G
  E: "[[g3,g4]@19 ~ [d3,d4] ~ [d3,d4] ~ [e3,e4]@2 [g3,g4] ~@3 [e3,e4] ~]/2", F: "[[g3,g4]@5 [b3,b4] [d4,d5] [b3,b4]]/2",
  G: "[[d4,d5]@15 ~ b3@10 d5@2 [b3,b4]@4, ~@15 b4@10 ~ d4 ~@5]/2", // D B
  H: "[[g3,g4]@19 ~ d3@2 [d3,d4]@2 [e3,e4]@2 g4@2 ~@2 [e3,e4]@2, ~@20 d4 ~@5 g3 ~@5]/2", // G D E
  I: "[[a3,a4]@19 ~ [d3,d4] ~ [d3,d4]@2 [e3,e4]@2 [g3,g4] ~@3 [e3,e4]@2]/2", J: "[[g3,g4]@31 ~]/2",
  K: "~@4 [d4,g4,b4] ~@5 [d4,g4,b4] ~@5", L: "[d4,g4,b4] ~@5 [d4,g4,b4] ~@9", M: "~@4 [e4,g4,c5] ~@5 [e4,g4,c5] ~@5",
  N: "[e4,g4,c5] ~@5 [e4,g4] ~@9, ~@3 c5 ~@4", O: "~@4 [e4,a4,c5] ~@5 [e4,a4,c5] ~@5",
  P: "[e4,a4,c5] ~@5 [e4,a4,c5] ~@9", Q: "[d4,g4,b4] ~@4 g4 [d4,b4] ~@9",
  R: "~@4 [e4,g4,c5] ~@5 [g4,c5] ~@5, ~@5 e4 ~@2", S: "[g4,c5] ~@5 [e4,g4,c5] ~@9, e4 ~@7",
  T: "~@4 [a4,c5] ~@5 [e4,a4,c5] ~@5, ~@2 e4 ~@5", U: "[a4,c5] ~@5 [a4,c5] ~@9, e4 ~@2 e4 ~@4",
  V: "[[g3,g4]@2 ~@4 [g3,g4,g5]@3 ~@3 [g3,g4,g5,d6]@31 ~@5]/3", // G G5
})).s("gm_synth_brass_2").gain(0.5)

// chords · clavinet · "clavi"
const clavinet = note(`<
  ~@10 A B C D E F G H A B C D E I G H A B C D E I G H ~@16 A B C D E F G H A B C D E F G H ~@16 A B C D E F G H A B C D
  E I G H A B C D E F G H A B C D E I J@3
>`.pickRestart({
  A: "~@4 [b4,d5,g5]@7 ~ [d5,g5] ~@3, ~@6 b4 ~", B: "[b4,d5,g5] ~@2 [b4,d5,g5] ~@2 [b4,d5,g5] ~",
  C: "~@4 [c5,e5,g5]@7 ~ [c5,e5] ~@3, ~@6 g5 ~", D: "[c5,e5,g5]@2 ~@4 [c5,e5,g5] ~@5 [e5,g5] ~@3, ~@6 c5 ~",
  E: "~@4 [c5,e5,a5]@7 ~ [c5,e5,a5]@2 ~@2", F: "[c5,e5,a5]@2 ~@4 [e5,a5] ~@5 [c5,e5,a5]@2 ~@2, ~@3 c5 ~@4",
  G: "~@4 [b4,d5,g5]@7 ~ [b4,d5,g5] ~@3", H: "[b4,d5] ~@2 [b4,d5,g5] ~@2 [b4,d5,g5] ~, g5 ~@15",
  I: "[c5,e5,a5] ~@2 [c5,e5] ~@2 [c5,e5,a5] ~, ~@6 a5 ~@9", J: "[[g3,d4,g4] ~@2 [g3,c4,g4] ~@2 [g3,d4,g4]@18]/3",
})).s("gm_clavinet").gain(0.45).pan(0.4)

// bass · slap bass 1 · "slap bass"
const bass = note(`<
  ~@8 A B C@4 D@2 E@2 F G F H I J F G F G F H I J F G C@4 D@2 E@2 C@4 D@2 E@2 C@4 D@2 E@2 C@4 D@2 E@2 C@4 D@2 E@2 C@4
  D@2 E@2 C@4 D@2 E@2 C@4 D@2 E@2 F G F H I J F G F G F H I J K@2 ~
>`.pickRestart({
  A: "g2@2 g2@3 ~ g2 ~ g2 ~ g2@3 ~ g2@2", B: "~@2 g2@2 e2@4 d2@3 ~ e2@4",
  C: "[g2@4 ~@2 g2@3 ~@3 g2@7 ~ d2 ~ d2@2 e2@2 g2@2 ~@2 e2 ~]/2",
  D: "[g2@4 ~@2 g2@2 ~@4 g2@7 ~ d2 ~ d2 ~ e2@2 g2 ~@3 e2 ~]/2",
  E: "[g2@5 ~ g2@3 ~@3 g2@7 ~ d2 ~ d2@2 e2@2 g2 ~@3 e2 ~]/2", F: "g2 b2 c3 d3", G: "e2@4 g2@3 ~ g2@2 e2@2 g2@3 ~",
  H: "e2@4 g2@3 ~ g2@2 e2@2 g2@4", I: "a2 b2 c3 d3", J: "e2@4 g2@3 ~ a2@2 g2@2 a2@3 ~",
  K: "[g2@3 ~@3 g2@3 ~@3 g2@20]/2",
})).s("gm_slap_bass_1").gain(0.45).pan(0.8)

// chords · brass section · "BRASS"
const brass_section = note(`<
  ~@17 A B C D@2 E@2 F@2 B G H@2 I@2 J@2 ~@16 K L M N O P K L K L Q R O S K T ~@16 K L M N O P K L K L Q R O S K A B C
  D@2 E@2 F@2 B G H@2 I@2 U@3
>`.pickRestart({
  A: "~ [b3,b4] [d4,d5] [b3,b4]", B: "[d4,d5]", C: "[b3,b4]@5 [d4,d5] [b3,b4]@2",
  D: "[[g3,g4]@18 ~@2 [d3,d4]@2 [d3,d4] ~ [e3,e4]@2 [g3,g4] ~@3 [e3,e4]@2]/2", // G D E G E
  E: "[[g3,g4]@19 ~ [d3,d4] ~ [d3,d4] ~ [e3,e4]@2 [g3,g4] ~@3 [e3,e4] ~]/2", F: "[[g3,g4]@5 [b3,b4] [d4,d5] [b3,b4]]/2",
  G: "[b3,b4]@5 d5 [b3,b4]@2, ~@10 d4 ~@5", // B
  H: "[[g3,g4]@19 ~ d3@2 [d3,d4]@2 [e3,e4]@2 g4@2 ~@2 [e3,e4]@2, ~@20 d4 ~@5 g3 ~@5]/2", // G D E
  I: "[[a3,a4]@19 ~ [d3,d4] ~ [d3,d4]@2 [e3,e4]@2 [g3,g4] ~@3 [e3,e4]@2]/2", J: "[[g3,g4]@31 ~]/2",
  K: "~@4 [d4,g4,b4] ~@5 [d4,g4,b4] ~@5", L: "[d4,g4,b4] ~@5 [d4,g4,b4] ~@9", M: "~@4 [e4,g4,c5] ~@5 [e4,g4,c5] ~@5",
  N: "[e4,g4,c5] ~@5 [e4,g4] ~@9, ~@3 c5 ~@4", O: "~@4 [e4,a4,c5] ~@5 [e4,a4,c5] ~@5",
  P: "[e4,a4,c5] ~@5 [e4,a4,c5] ~@9", Q: "~@4 [e4,g4,c5] ~@5 [g4,c5] ~@5, ~@5 e4 ~@2",
  R: "[g4,c5] ~@5 [e4,g4,c5] ~@9, e4 ~@7", S: "[a4,c5] ~@5 [a4,c5] ~@9, e4 ~@2 e4 ~@4",
  T: "[g4,b4] ~@5 [d4,g4]@2 ~@4 [d4,g4,b4] ~@3, d4@2 ~@4 b4 ~@9", // G G5 G
  U: "[[g3,g4]@2 ~@4 [g3,g4,g5]@3 ~@3 [g3,g4,g5,d6]@31 ~@5]/3", // G G5
})).s("gm_brass_section").gain(0.5).pan(0)

// drums · kick
const kick = s("bd").struct(`<
  ~@10 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C ~@2
>`.pickRestart({
  A: "x ~@2 x ~ x ~@2", B: "x!2", C: "~ x ~ x",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A B C@7 D C@7 D C@7 E C@15 F C@15 G C@15 F C@7 D C@7 G C@7 D C@5 D H ~@2
>`.pickRestart({
  A: "~@4 x!2 ~@4 x!2 ~@4", B: "x!2 ~@6 x!8", C: "~@4 x!2 ~@6 x!2 ~@2", D: "~@4 x!2 ~@2 x!8", E: "~@2 x!9 ~ x!4",
  F: "~@4 x!2 ~@4 x!5 ~", G: "~@4 x!12", H: "x!2 ~@4 x!2 ~@8",
})).gain(0.45)

// drums · clap
const clap = s("cp").struct("<~@34 [~ x ~ x]!16 ~@16 [~ x ~ x]!16 ~@33>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@2 [~ x ~ x]!8 [x!2]!102 [x ~@3 x ~@3 x ~@3 x!2 ~@2] ~@2>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@10 [~ x ~ x]!102 ~@3>").gain(0.35)

// drums · crash
const crash = s("cr").struct("<~@10 A ~@7 A ~@7 A ~@23 A ~@7 A ~@23 A ~@7 A ~@7 A ~@7 A ~@5 B ~@2>".pickRestart({
  A: "x", B: "x ~@2 x ~@2 x ~",
})).gain(0.4)

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

// drums · shaker
const shaker = s("sh").struct(`<
  A B ~@48 C D C D C D C D C D C D C D C D ~@16 C D C D C D C D C D C D C D C D ~@17
>`.pickRestart({
  A: "x!2", B: "x!3 ~ x ~@3", C: "~@2 x ~@2 x ~@2", D: "x!4",
})).gain(0.4)

stack(
  electric_guitar_muted, synth_brass_1, drawbar_organ, synth_brass_2, clavinet, bass, brass_section, kick, snare, clap,
  hihat, open_hat, crash, ride, shaker
)

More by Jackie Wilson