Strudelify
Power of Love cover art

Power of Love

Huey Lewis

KeyC majorTempo124 bpm
0:00/0:00
// Power of Love — Huey Lewis
// 124 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 5 "Trumpet" voice oohs (copy of ch 4 "Syn Brass & Str" synth brass 2); ch 5 "Trumpet" string ensemble 1 (copy of ch 4 "Syn Brass & Str" string ensemble 1); ch 5 "Trumpet" synth brass 1 (copy of ch 4 "Syn Brass & Str" synth brass 1); ch 8 "Bass 2" lead 8 bass lead (copy of ch 7 "Bass 1" lead 8 bass lead); ch 7 "Bass 1" synth bass 2 (copy of ch 8 "Bass 2" synth bass 2); ch 7 "Bass 1" electric bass finger (copy of ch 8 "Bass 2" electric bass finger)
// note: Full arrangement: all 116 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/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 · synth brass 2 · "Syn Brass & Str"
const synth_brass_2 = note(`<
  A B C B C B D E F E G ~@8 E G ~@7 A B C B C B D H I J E F E G K ~@6 A B C B C B D H I ~@58
>`.pickRestart({
  A: "~@12 [f4,a4,c5,f5,a5,c6]@3 ~", B: "[e4,g4,c5,e5,g5,c6]@3 ~@9 [c4,e4,g4,c5,e5]@3 ~",
  C: "[c4,f4,a4,c5,f5]@3 ~@9 [f4,a4,c5,f5,a5]@3 ~", D: "[c4,f4,a4,c5,f5]@3 ~@13",
  E: "[d#4,g4,a#4,d#5] ~@5 [d#4,g4,a#4,d#5] ~@7 [f4,a4,c5,f5] ~", F: "~@14 [f4,a4,c5,f5] ~",
  G: "~@8 [f4,a4,c5,f5] ~@3 [f4,a4,c5,f5]@4", H: "[a#4,d5,f5,a#5,d6] [f4,a4,c5,f5,a5,c6]", I: "[g4,g5]",
  J: "[g4,g5,g6] ~@7", K: "[d#4,g4,a#4,d#5] ~@15",
})).s("gm_synth_brass_2").gain(0.36)

// chords · string ensemble 1 · "Syn Brass & Str"
const string_ensemble_1 = note("<~@58 A B@3 C D E F G ~@49>".pickRestart({
  A: "~@2 d#4 f4", B: "[g4@2 g#4@2 g4@2 f4 d#4@12 ~@5]/3", C: "d#4 a#3, c4@5 ~@3", D: "[a#3,d#4] [a#3,f4]",
  E: "[g#3,d#4]", F: "[a#3,d#4]", G: "[c4,d#4]",
})).s("gm_string_ensemble_1").gain(0.44)

// chords · synth brass 1 · "Syn Brass & Str"
const synth_brass_1 = note(`<
  ~@75 A ~ A ~ A B A ~ A ~ A ~ A B A C D E D E D E D F D E D E D E D F D E D E D E D F ~
>`.pickRestart({
  A: "[d#4,g4,a#4,d#5] ~@5 [d#4,g4,a#4,d#5] ~@7 [f4,a4,c5,f5] ~", B: "~@14 [f4,a4,c5,f5] ~",
  C: "~@12 [f4,a4,c5,f5,a5,c6]@3 ~", D: "[e4,g4,c5,e5,g5,c6]@3 ~@9 [e4,g4,c5,e5,g5,c6]@3 ~",
  E: "[f4,a4,c5,f5,a5,c6]@3 ~@9 [f4,a4,c5,f5,a5]@3 ~", F: "[f4,a4,c5,f5,a5,c6]@3 ~@9 [g4,b4,d5,g5,b5,d6]@3 ~",
})).s("gm_synth_brass_1").gain(0.36)

// chords · epiano2 · "El Piano"
const epiano2 = note(`<
  A@2 ~@5 B C B D B E F G B E F H B I B E F E F E F J ~@9 B C B D B E F E F E F J ~@8 K L K M N O P Q R S T F E F E F G
  U V U V U V W X U V U X U V U Y ~@25
>`.pickRestart({
  A: "[~@2 g3 ~ [f4,a4]@2 [f4,a4]@2 [e4,g4]@2 [e4,g4]@2 [d4,f4]@2 [e4,g4]@6 ~@12]/2", // F Em Dm Em
  B: "c4 ~ c4 ~ a#3 ~ c4 ~ [d#4,a#4] ~ [d4,a#4] ~ [d#4,a#4] ~ [f4,a4]@2", // D#5 Gm D#5 F
  C: "~@2 [f4,a4] ~@5 [d#4,a#4] ~ [d4,a#4] ~@3 [c4,a4] ~", D: "~@2 [f4,a4] ~@5 [a#3,a#4] ~@3 [c4,a4]@3 ~",
  E: "~@2 [f4,a4] ~@5 [d#4,a#4] ~ [d4,a#4] ~@3 c4@2", // F D#5 Gm
  F: "~@2 c4 ~ a#3 ~ c4 ~ [d#4,a#4] ~ [d4,a#4] ~ [d#4,a#4] ~ [f4,a4]@2", // D#5 Gm D#5 F
  G: "~@2 [f4,a4] ~@5 [d#4,a#4] ~@3 [d4,a#4] ~@3", H: "~@2 [f4,a4] ~@5 [a#3,a#4] ~@7",
  I: "~@2 [f4,a4] ~@5 [f4,a4] ~@3 [f4,a4]@3 ~", J: "~@2 [f4,a4] ~@5 d#4 ~ d#4 ~ f4 ~ a#3 ~", K: "[a#3,d#4,g4]",
  L: "[b3,d4,g4]", M: "~@3 f4@5, [a3,d#4,g4]", N: "[c4,d#4]", O: "[a#3,d#4]", P: "[c4,d#4,g4]", Q: "[g3,a#3,d#4]",
  R: "[g#3,c4,d#4]", S: "[d4,g4]!4", T: "[d4,g4]@3 ~@13",
  U: "[d#3,c4] ~ [d#3,c4] ~ [d3,a#3] ~ [d#3,c4] ~ [g3,d#4] ~ [f3,d4] ~ [g3,d#4] ~ [a3,f4]@2", // Cm Gm Cm Dm Cm Dm
  V: "~@2 [a3,f4] ~@5 [g3,d#4] ~ [f3,d4] ~@3 [d#3,c4] ~", // Dm Cm Dm Cm
  W: "[d#3,c4] ~ [d#3,c4] ~ [d3,a#3] ~ [d#3,c4] ~ [g3,d#4] ~@3 [g3,d#4] ~ [a3,f4]@2", // Cm Gm Cm Dm
  X: "~@2 [a3,f4] ~@3 [a3,f4] ~ [g3,d#4] ~@3 [f3,d4] ~@3", // Dm Cm Dm
  Y: "~@2 [a3,f4] ~@3 [a3,f4] ~ [g3,d#4] ~ [g3,d#4] ~ [a3,f4] ~ [d3,a#3] ~", // Dm Cm Dm Gm
})).s("gm_epiano2").gain(0.27).pan(0.4)

// bass · lead 8 bass lead · "Bass 1"
const bass = note(`<
  A B C B C B D ~@22 B C B C B E F G H ~@12 B C B C B E F G ~@33 B C B C B C B C B C B C B C B C B C B C B C B C ~
>`.pickRestart({
  A: "~@12 c2@3 ~", B: "c2!3 e1!5", C: "f1!3 g1!3 a1!2", D: "f1!3 g1!2 ~@3", E: "f1!3 g1!4 a1", F: "a#1!4 f1!4",
  G: "g1!8", H: "g1 ~@7",
})).s("gm_lead_8_bass_lead").gain(0.48).pan(0.4)

// bass · synth bass 2 · "Bass 2"
const bass_2 = note(`<
  A B C B C B D E@2 F@2 E@2 G H E@2 G I J@4 K@2 J@2 L@2 ~@9 E@2 F@2 E@4 J@2 G M@8 ~@12 J@4 N@2 O@4 P@4 O@2 G Q P@2 R@2
  ~@25
>`.pickRestart({
  A: "~@12 c2@3 ~", B: "c2!3 e1!5", C: "f1!3 g1!3 a1!2", D: "f1!3 g1!2 ~@3",
  E: "[c2!2 a#1 c2 d#2 ~ d#2 f2@2 f2 ~ f2!3 ~ g2]/2", F: "[c2!2 a#1 c2 d#2 ~ d#2 f2@2 f2 ~ f2 a#1 ~ c2 ~]/2",
  G: "c2!2 a#1 c2 d#2 ~ d#2 f2", H: "f2!2 ~ f2!4 ~", I: "f2!2 ~ f2 a#1 ~@3",
  J: "[c2!2 a#1 c2 d#2 ~ d#2 f2@2 f2 ~ f2!4 g2]/2", K: "[c2!2 a#1 c2 d#2 ~ d#2 f2@2 f2 ~ f2!2 ~ g2 ~]/2",
  L: "[c2!2 a#1 c2 d#2 ~ d#2 f2@2 f2 ~ d#2!3 f2 a#1]/2", M: "[~ f2 ~ d#2!3 f2 a#1@57]/8",
  N: "[c2!2 a#1 c2 d#2 ~ d#2 f2@2 f2 ~ f2 g2 f2 g2 ~]/2", O: "[c2!2 a#1 c2 d#2 ~ d#2 f2@2 f2 ~ f2 g2 f2 ~ g2]/2",
  P: "[c2!2 a#1 c2 d#2 ~ d#2 f2@2 f2 ~ f2 g2 f2!2 g2]/2", Q: "~ f2 ~ f2 g2 f2 ~ g2",
  R: "[c2!2 a#1 c2 d#2 ~ d#2 f2@2 f2 ~ f2 d#2!2 f2 a#1]/2",
})).s("gm_synth_bass_2").gain(0.27).pan(0.6)

// bass · electric bass finger · "Bass 2"
const bass_3 = note("<~@58 A B C D E F D F E G H ~@47>".pickRestart({
  A: "d#2", B: "d2", C: "c2", D: "f1", E: "g#1", F: "g1", G: "g1!4", H: "g1 ~@7",
})).s("gm_electric_bass_finger").gain(0.32).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@5 B C A C A C A C A C A C A C A C A C A C A C D A@7 E ~ C A C A C A C A C A C A@8 B C@7 A C A ~ C A C A C F C A C
  A C A C A C A C A C A C B A@15 D A@7 G ~
>`.pickRestart({
  A: "x!2", B: "x", C: "x ~@2 x!2 ~@3", D: "x ~@3 x!2 ~@2", E: "x ~@4 x ~@2", F: "x!2 ~@2", G: "x ~@2 x ~ x ~@2",
})).gain(0.41).pan(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~ A@5 B A@3 C A@9 C A@15 D ~ A@3 E A@11 F A@3 G A@10 H A@5 I A@15 G A@15 J A@7 D ~
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@4 x ~ x!2 ~@4 x ~@3", D: "~ x!3", E: "~ x!2 ~@3 x ~", F: "~@4 x ~@7 x ~ x!2",
  G: "~@2 x ~ x!4", H: "x", I: "~@2 x ~@2 x!2 ~@5 x ~ x!2", J: "~@4 x!4 ~@4 x ~@3",
})).gain(0.41).pan(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@61 A ~ A ~ B ~@8 A ~@41>".pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@3 x ~@2",
})).gain(0.41).pan(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@7 A B@2 C A B@8 C B@7 D ~@9 A B@2 ~ B@8 ~@8 A B@8 ~@2 A B@5 A B@2 E A B@2 C A F B@3 G B C ~@25
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x!2 ~@2", D: "x!3 ~", E: "x ~@3 x ~ x!3 ~ x!2 ~@2 x!2", F: "x ~@3 x ~@3 x!4 ~@2 x ~",
  G: "x ~@3 x ~@3 x!4 ~@4",
})).gain(0.32).pan(0.4)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@6 A B C@2 D B C@8 D C@7 E ~@8 F B C@2 A C@8 ~@8 B C@2 G C G C H C ~ F B C@5 B C@2 F B C@3 B E C G C E C E ~@25
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@3 x ~ x ~ x", C: "~ x ~ x ~ x ~ x", D: "~ x ~@3 x ~@2", E: "~ x ~ x ~@4", F: "~ x ~@6",
  G: "~ x ~ x ~@3 x", H: "~@3 x ~@3 x",
})).gain(0.18).pan(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@74 [~ x] ~@41>").gain(0.41).pan(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A@5 B ~@3 C ~@9 C ~@8 A@8 D ~@3 E ~@8 A@8 ~@9 A D ~@13 C ~@3 F ~ G ~@2 A@24 ~
>`.pickRestart({
  A: "x!8", B: "x!5 ~@3", C: "~@2 x!2", D: "x", E: "x ~ x!2", F: "~@5 x ~@2", G: "~@7 x",
})).gain(0.27).pan(0.4)

// drums · crash
const crash = s("cr").struct(`<
  A B ~@2 A B C B ~@3 B ~@6 A B ~ B ~@6 A B ~@2 A B ~ D B ~ B ~@3 B ~@6 A B ~@3 B ~ D B@2 ~@8 B ~ B ~@5 B ~@3 B ~@3 B
  ~@6 A B ~@2 A B ~@2 A B ~@3 B ~@2 E B ~@3 B ~@2 A ~
>`.pickRestart({
  A: "~@3 x", B: "x", C: "~ x ~@2", D: "x!2", E: "~@2 x!2",
})).gain(0.41).pan(0.4)

stack(
  synth_brass_2, string_ensemble_1, synth_brass_1, epiano2, bass, bass_2, bass_3, kick, snare, low_tom, hihat,
  hihat_soft, mid_tom, open_hat, crash
)

More by Huey Lewis