Strudelify

Heaven Help

Lenny Kravitz

KeyA majorTempo88 bpm
0:00/0:00
// Heaven Help — Lenny Kravitz
// 88 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 69 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(88/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@2 B@2 C D@2 E@5 F@4 G@4 H@4 I J@7 K@4 L@8 M@2 N@5 O@4 P@4 Q R@8 ~>".pickRestart({
  A: "[[b2,a3,d4,f#4]@14 ~@4 [a3,c#4,e4]@22 ~@12 a4@4 ~@3 b4@5 ~ [a3,d4,f#4]@12 e4@6 d4@6 a3@3 ~@4, ~@18 f#2@26 ~@3 [e2,b3]@16 ~@2 d2@26 ~@5, ~@47 [e4,g#4]@11 ~@38]/2", // Bm7 A D E5 E
  B: "[[b2,f#3,a3,d4]@15 ~@3 e3@17 ~@12 [e4,g#4]@11 e4@3 ~@5 [a3,d4]@25 ~@5, ~@17 f#2@27 ~@3 [e2,b3]@17 ~ [d2,f#4]@26 ~@5, ~@17 [a3,c#4]@19 ~@60]/2", // Bm7 E D5 E5 D A
  C: "[b2,f#3,d4]@11 ~, a3@5 ~", D: "[[f#2,c#4]@44 ~@3 [b2,f#3,d4]@45 ~@4, [e3,a3]@39 ~@8 a3@41 ~@8]/2",
  E: "[[f#2,a3,c#4]@44 ~@4 [b2,f#3,a3]@41 ~@6 [f#2,e3,a3,c#4]@9 ~@3 [e2,e3,g#3,b3]@8 ~@5 [d2,d3,f#3,a3]@15 ~@3 [d2,f#3,a3,d4]@43 ~@5 [d2,e4]@50 ~@4, e3@40 ~@7 d4@40 ~@98 [a3,c#4]@50 ~@5]/5", // F#m B7 F#m7 E D Dsus2 A
  F: "[a3@18 [f#2,c#4,e4]@25 ~@4 a3@19 [c#4,e4]@8 ~@3 e3@6 a3@12 a3@18 ~ e3@24 ~@5 [e2,e3,g3,b3]@15 ~@4 [a2,e3,c#4]@26 ~@4, b2@41 ~@6 [b2,d4,f#4]@36 ~@12 b2@66 ~@31, [d4,f#4]@36 ~@30 a3@17 ~@12 d4@96 ~, ~@18 a3@29 ~@19 f#2@25 ~@4 f#3@14 ~@4 [f#2,c#4]@23 ~@56, ~@19 a3@8 a3@5]/4", // F#7 C#m Em A Bm D F#5
  G: "[a3@17 [f#2,c#4,e4]@27 ~@4 a3@18 [f#2,c#4,e4]@24 ~@5 [e2,g3,b3]@13 ~@6 [a3,d4]@23 ~ d4@53 ~, [b2,d4,f#4]@48 f#4@66 f#4@29 ~@49, ~@17 a3@30 b2@96 ~@49, ~@48 d4@47 d4@19 ~@23 a3@46 ~@9, ~@66 a3@48 d2@18 ~@5 [d2,d3,f#3]@50 ~@5]/4", // F#7 Em D5 Bm D
  H: "[~@12 a3@5 ~ [f#2,e3]@21 ~@14 a4@3 ~@3 b4@5 ~@2 d2@23 ~@6 [b2,a3]@16 ~@3 [f#2,a3,c#4,e4]@22 ~@7 e4@9 ~@3 e4@6 ~ a3@17 ~@13, b2@29 ~@4 a3@9 ~@54, ~@5 f#3@11 ~ [a3,c#4]@20 ~@10 [b3,e4]@15 ~@3 [d4,f#4]@18 ~@12 [d4,f#4]@24 ~@42 f#4@18 ~@13, ~@12 d4@24 ~@11 [e2,g#4]@11 ~@85 [e2,b3,g#4]@17 ~ [d2,d4]@31]/4", // F#7 B7 F#m7 A E5 D E D
  I: "[d4,f#4]@5 ~@3, b2@5 ~, a3 ~", // D
  J: "[[c#4,e4]@30 ~@8 b3@8 ~ b2@27 ~@22 a3@17 ~@13 e3@17 [a3,d4,f#4]@18 ~@30 [f#2,c#4,e4]@11 ~@2 e2@10 ~@2 [d2,d4,f#4,a4]@16 ~@2 [a3,d4,f#4]@19 ~@29 d3@30 ~@24, f#2@46 ~@49 [f#2,c#4]@48 b2@26 ~@34 [b3,e4,g#4]@9 ~@69 [d4,f#4]@32 ~@23, a3@23 ~@7 a3@16 [a3,d4,f#4]@20 ~@30 e4@47 ~@48 a3@17 ~@26 d2@44 ~@3 [d2,a3]@22 ~@33]/7", // C#m D F#7 D F#5 E D D5
  K: "[a3@18 [f#2,c#4,e4]@25 ~@4 [b2,a3]@19 [c#4,e4]@8 ~@3 e3@6 a3@12 a3@18 ~ [e3,a3]@24 ~@5 [e2,e3,g3,b3]@15 ~@4 [a2,e3,c#4]@26 ~@4, [d4,f#4]@27 ~@20 f#4@35 ~@110, b2@14 ~@4 a3@29 d4@26 ~@89 a3@30, ~@66 f#2@25 ~@4 [b2,d4]@25 ~@72, ~@66 a3@17 ~@12 f#3@14 ~@4 [f#2,c#4]@23 ~@56]/4", // F#7 B7 C#m A5 Em A D Bm …
  L: "[[a3,d4]@17 [f#2,c#4,e4]@27 ~@4 [a3,d4]@18 [f#2,a3,c#4,e4]@24 ~@5 [e2,g3,b3]@13 ~@6 [d2,d4]@21 ~@3 d4@18 ~@48 a3@6 [e3,c#4]@22 ~@14 a4@3 ~@3 b4@3 ~@3 d4@29 ~@12 a3@6 ~ a3@29 b3@19 [a2,e3,a3,c#4]@30, b2@35 ~@12 b2@60 ~@30 d3@48 ~@7 b2@48 [e4,g#4]@11 ~@7 f#4@47 [f#2,c#4]@22 ~@8 [e2,g3]@25 ~@24, f#4@30 ~@18 f#4@39 ~@8 d4@17 ~@2 f#4@65 ~@25 d4@6 a3@16 ~@14 b3@16 ~@2 a3@22 ~@7 b2@48 ~@49, ~@17 a3@30 ~@67 a3@13 ~@10 f#3@60 f#3@96 f#3@13 e3@22 ~@56, ~@137 [d2,a3]@23 ~@50 f#2@28 ~ e2@15 ~@4 d2@35 ~@6 d4@30 ~@6 d4@30 ~@19]/8", // D5 F#7 D5 F#m7 Em D C#m A …
  M: "[[d3,a3]@5 ~@3 [c#3,g#3,c#4,f4]@7 ~, f#4@5 ~@3, d4@35 ~@61]/2", // D5 C#
  N: "[[c#3,g#3,e4]@45 ~@2 [f#2,c#4,e4]@44 ~@23 [a2,a3]@23 [a3,d4]@18 ~@31 d3@44 ~@10, b3@96 [e2,g3,b3]@35 ~@6 d2@43 ~@5 [d2,f#3]@48 ~@7, ~@47 a3@12 ~@36 d4@23 ~@19 d3@36 ~@12 a3@21 ~@34, ~@114 [c#4,e4]@17 ~@6 f#3@48 d4@30 ~@25]/5", // C#m F#7 A D5 Em D C#m
  O: "[a3@18 [f#2,c#4,e4]@25 ~@4 a3@19 [c#4,e4]@8 ~@3 e3@6 a3@12 a3@18 ~ e3@24 ~@5 [e2,g3,b3]@12 ~@7 [e3,a3]@30, [b2,d4,f#4]@24 ~@23 d4@24 ~@42 [f#2,c#4]@23 ~@56, ~@18 a3@29 f#4@35 ~@32 a3@48 ~@30, ~@47 b2@12 ~@7 f#2@25 ~@4 [b2,d4]@25 ~@42 [a2,c#4]@26 ~@4, ~@66 a3@17 ~@12 f#3@29 ~@19 e3@19 ~@30]/4", // F#7 C#m Em A5 Bm F#5 Bm A
  P: "[[a3,d4]@17 [f#2,c#4,e4]@27 ~@4 [a3,d4]@18 [f#2,a3,c#4,e4]@24 ~@5 [g3,d4]@19 [d2,a3,d4,f#4]@16 ~@8 d4@23 ~@31, [b2,f#4]@36 ~@11 b2@30 ~@18 [e2,b3]@12 ~@30 [d2,f#3]@25 ~@30, ~@17 a3@30 ~ f#4@36 ~@53 d3@20 ~@35, ~@137 a3@12 ~@43]/4", // D5 F#7 D5 F#m7 G5 D B5 E5 …
  Q: "~@11 a3@6 ~ e3@29 g#4, b2@35 ~@13, ~@5 f#3@12 [f#2,a3]@31, ~@11 d4@13 ~@24, ~@17 c#4@22 ~@9", // F#m
  R: "[~@5 a4@4 ~@2 b4@4 ~@45 a3@5 ~ f#2@29 g#3@12 ~@7 d2@12 ~@29 a3@7 f#2@27 ~@8 a4@4 ~@2 b4@5 ~@44 a3@5 ~ f#2@22 ~@49 [a2,d3]@55, [e2,b3]@59 d4@6 a3@30 [e2,b3,e4]@67 e3@47 [a3,d4,f#4]@12 e4@31 d4@35 [g#3,e4]@80 ~@17, e4@18 a3@24 a3@11 f#3@61 [a3,d4]@35 f#3@42 e4@18 d2@36 f#3@42 [e2,b3]@68 ~@29, ~@17 d2@18 d4@12 b2@67 f#3@30 b2@18 [a3,c#4]@29 [e2,b3]@66 c#4 e3@48 [a3,d4]@49 ~@29, ~@17 f#4 d4@12 e4@35 c#4 e3@89 d4@36 g#4@36 d4@6 a3@6 b2@19 a3@48 [d2,f#3]@67 ~@11]/8", // D5 E5 D C#m D5 E5 A E5 …
})).s("gm_piano").gain(0.64)

// bass · fretless bass
const bass = note("<~@4 A B@4 C@3 D E@3 F@4 G H I@2 J@8 D E@3 K@4 L M N O P Q R@2 S@3 T U@3 V@5 W@4 X@5>".pickRestart({
  A: "b1", B: "[f#1@41 ~ e1@2 f#1@3 b1@48 f#1@42 e1@3 f#1@3 b1@49]/4",
  C: "[f#2@11 e2@12 d2@16 ~@3 d2@43 ~@4 d2@37 e2@3 ~@2 a2@11 ~@2, ~@130 f#2@3 ~@11]/3", D: "b1@17 ~ f#2@29 ~",
  E: "[b1@17 f#2@29 ~ b1@18 f#2@29 ~ e1@18 ~ a1@21 ~@9]/3",
  F: "[b1@18 f#2@29 b1@19 f#2@25 ~@4 e2@19 d2@23 d1@46 ~@9]/4", G: "b1@17 f#2@31", H: "e2@17 d2@30 ~",
  I: "[b1@17 f#2@30 e2@18 d2@27 ~@4]/2",
  J: "[b1@47 f#1@41 ~ e1@3 f#1@3 b1@48 f#1@42 e1@3 f#1@3 b1@48 f#2@11 e2@12 d2@16 ~@3 d2@43 ~@5 d2@37 e2@3 ~@2 a2@11 ~@2, ~@370 f#2@3 ~@11]/8",
  K: "[b1@18 f#2@29 b1@19 f#2@25 ~@4 e2@19 d2@23 d1@49 ~@6]/4", L: "b1@3 f#2@5",
  M: "e2@18 d2@6 c#2@5 b1@6 ~ a1@5 f#1@7", N: "b1@18 f#1@29 ~", O: "e2@7 ~@3 e2@7 ~ a1@9 ~@2 a1@7 b1@5 c#2@6 ~",
  P: "d2@17 d2@22 d2@9", Q: "c#2@13 ~@5 c#2@12 g#1@6 c#2@5 g#1@7",
  R: "[c#2@12 ~@6 c#2@8 ~@9 c#2@3 ~@3 g#1@6 f#1@15 ~@3 f#2@11 ~ b1@6 ~ c#2@5 d2@6 ~, ~@19 b1@5 ~@24]/2",
  S: "[e2@14 ~@3 a1@23 ~ d2@48 ~@32 f#2@4 a2@6 b2@3 a2@3 f#2@5 ~@2, ~@89 d2@47 ~@8, ~@119 e2@4 ~@21]/3",
  T: "~@18 f#2@29 ~, b1 ~", U: "[b1@12 ~@5 f#2@29 ~ b1@12 ~@6 f#2@29 ~@20 a1@21 ~@9, ~@95 e1@25 ~@24]/3",
  V: "[b1@18 f#2@29 b1@13 ~@6 f#2@25 ~@4 e2@12 ~@7 d2@19 ~@59 b1@18 f#2@24 ~@6, ~@137 d1@68 ~@35]/5",
  W: "[~@23 c#2@6 b1@7 a1@5 ~@6 b1@12 ~@7 f#1@29 ~@18 d2@24 ~ a1@6 b1@17 ~ f#2@30, e2 ~@7, ~@17 d2@13 ~@11 e1@29 ~@25 e1@55 ~@42]/4",
  X: "[~@22 c#2@7 b1@3 ~@3 a1@6 b1@24 f#1@29 ~@20 d2@23 d1@67 ~@36, e2@2 ~@13, ~@17 d2@13 ~@64 e1@32 ~@114]/5",
})).s("gm_fretless_bass").gain(0.64)

// other · electric guitar muted
const electric_guitar_muted = note("<~@12 A@4 B C@3 ~@12 D@4 E F@3 ~@11 G@4 H I@4 ~@9>".pickRestart({
  A: "[~@2 f#3@2 ~@5 f#3@2 ~@6 f#3@9 ~@3 e3@3 ~@3 f#3@4 ~@8 e3@2 f#3@2 ~@6 f#3@3 ~@5 f#3@8 ~@4 e3@3 ~@3 f#3@4 ~@8 e3@3 f#3@3 ~@4 f#3@3 ~@5 f#3@7 ~@4 e3@3 ~@4 f#3@4 ~@8 g3@5 ~@6 g3@3 ~@5 a3@11 ~@19, e3 ~@47]/4",
  B: "e3@2 f#3@2 ~@5 f#3@2 ~@6 f#3@6 ~@6 e3@4 ~@2 f#3@3 ~@10",
  C: "[e3@2 f#3@3 ~@5 f#3@2 ~@5 f#3@4 ~@9 e3@4 ~ f#3@5 ~@7 g3@4 ~@9 g3@3 f#3@3 e3@22 ~ d3@25 ~@30]/3",
  D: "[~@2 f#3@2 ~@5 f#3@2 ~@6 f#3@9 ~@3 e3@3 ~@3 f#3@4 ~@10 f#3@2 ~@6 f#3@3 ~@5 f#3@8 ~@4 e3@3 ~@3 f#3@4 ~@8 e3@3 f#3@3 ~@4 f#3@3 ~@5 f#3@7 ~@4 e3@3 ~@4 f#3@4 ~@8 g3@5 ~@6 g3@3 ~@5 a3@11 ~@19, e3@4 ~@43 e3@4 ~@141]/4",
  E: "e3@2 f#3@2 ~@5 f#3@3 ~@5 f#3@6 ~@6 e3@4 ~@2 f#3@3 ~@10",
  F: "[e3@2 f#3@3 ~@5 f#3@2 ~@5 f#3@4 ~@9 e3@3 ~@2 f#3@5 ~@7 g3@4 ~@9 g3@3 f#3@3 e3@22 ~ d3@12 ~@43]/3",
  G: "[~@2 f#3@2 ~@5 f#3@2 ~@6 f#3@9 ~@9 f#3@4 ~@10 f#3@3 ~@5 f#3@3 ~@5 f#3@8 ~@10 f#3@4 ~@11 f#3@3 ~@4 f#3@4 ~@4 f#3@7 ~@11 f#3@4 ~@8 g3@11 ~@8 a3@11 ~@19, e3@29 e3@17 ~ e3@30 e3@18 e3@29 e3@67 ~, ~@154 g3@13 ~@25]/4",
  H: "~@2 f#3@2 ~@5 f#3@2 ~@6 f#3@6 ~@6 e3@4 ~@2 f#3@3 ~@10, e3 ~",
  I: "[~@2 f#3@3 ~@5 f#3@3 ~@4 f#3@4 ~@9 e3@5 f#3@5 ~@7 g3@13 ~@3 f#3@3 e3@23 d3@72 ~@31, e3 ~@14 g3@2 ~@31]/4",
})).s("gm_electric_guitar_muted").gain(0.56)

// other · string ensemble 2
const string_ensemble_2 = note("<~@12 A@7 ~@13 A@7 ~@12 B@8 ~@10>".pickRestart({
  A: "[f#5@143 g5@18 a5@30 f#5@96 g5@19 f#5@27 ~@3]/7", B: "[f#5@143 g5@12 ~@6 a5@30 f#5@93 ~@3 g5@19 f#5@74 ~@4]/8",
})).s("gm_string_ensemble_2").gain(0.31)

// drums · kick
const kick = s("bd").struct("<~@4 A@15 ~ A@19 ~ A@9 ~ B A@7 ~ A@8 ~@2>".pickRestart({
  A: "x!2", B: "~@4 x!4",
})).gain(0.56)

// drums · snare
const snare = s("sd").struct("<~@4 A@15 ~ A@11 B A@7 ~ A@3 C A@5 ~ D A@7 ~ A@3 E A@4 ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@5 x ~ x!3 ~", C: "~@2 x ~@2 x!3", D: "~@4 x!4", E: "~@2 x ~@3 x!2",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~@3 A B@15 ~ B@19 ~ B@9 ~@2 B@7 ~ B@8 ~@2>".pickRestart({
  A: "~@3 x", B: "x!8",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@3 A ~@5 B@2 ~@7 B ~@10 B@2 ~@7 B ~@9 B@2 ~@7 B ~@5 C ~@2 B ~@2>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A@2 ~@7 A ~ B ~@8 A@2 ~ B ~@5 A ~ B ~@3 B ~@3 A@2 ~ B ~@5 A ~ B ~@3 B ~@2 A ~@2
>`.pickRestart({
  A: "~@7 x", B: "x",
})).gain(0.48)

// drums · ride
const ride = s("rd").struct("<~@3 A ~@16 B ~@11 B ~@7 B ~@3 B ~@6 B ~@7 B ~@3 B ~@5>".pickRestart({
  A: "~@3 x", B: "x",
})).gain(0.32)

stack(piano, bass, electric_guitar_muted, string_ensemble_2, kick, snare, hihat, open_hat, crash, ride)

More by Lenny Kravitz