Strudelify

All I Wanna Do Is Make Love to You

Heart

KeyG majorTempo112 bpm
0:00/0:00
// All I Wanna Do Is Make Love to You — Heart
// 112 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 1 "Track 1" slap bass 1 (copy of ch 11 "Track 11" 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(112/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 · epiano1 · "Track 5"
const epiano1 = note(`<
  ~@2 A@8 B@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2 K@2 L M N@2 O@2 P@2 Q@2 R@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2 K@2 L M
  N@2 O@2 P@2 Q@2 R@2 S T U V W X Y@2 Z@2 AA@2 AB ~ J@2 K@2 L M N@2 AC O@2 P@2 Q@2 R@2 O@2 P@2 Q@2 AD@4 ~
>`.pickRestart({
  A: "[[g2,b3,d4,g4]@20 ~@2 [a3,d4,f#4]@3 ~ [b3,d4,g4]@3 ~ [g3,c4,e4]@23 ~ [g3,c4,e4]@3 ~ [a3,d4,f#4]@3 ~ [b3,d4,g4]@23 ~ [a3,d4,f#4]@3 ~ [b3,d4,g4]@3 ~ [g3,c4,e4]@23 ~ [g3,c4,e4]@3 ~ [g3,c4,e4]@5 ~]/8", // G D G C D G D G …
  B: "[g2,d3,g3,b3]/2", C: "[b2@13 ~@2 d4, f#4, d4@15 ~, b3@7 b3, ~@13 b2@3]/2",
  D: "[[c3,g3,c4,e4]@23 ~@5 d4@4, ~@23 [c3,g3]@9, ~@3 [c4,e4]]/2", // C C5 C
  E: "[~@11 d3 ~@2 d4 ~, g2@15 ~, [g3,b3]@12 g3@3 ~, ~@13 b3@2 ~]/2", // G
  F: "[~@3 [a3,d4], [g2,b3], d4@3 ~, g3@11 g3@5, ~@5 d3@3]/2", G: "[[b2,b3,d4,f#4]@3 [b2,b3,d4,f#4]]/2",
  H: "[g3@7 ~@2 [d4,g4]@7, [c3,e4], g4@9 ~@7, c4 c4, ~@7 g3@9]/2", // G5 C
  I: "[[d3,a3,d4,f#4]@6 a3@8 ~@4 a3@4 ~@2 [b3,d4,f#4]@4 [d3,a3,d4,f#4]@3 ~, b3 ~@2 [d4,f#4]@6 [d4,f#4]@3 ~@4, ~@3 d3@5 d3@6 ~@2, ~@7 a3@2 ~@2 a3@3 ~@2]/2", // D Bm D
  J: "[~@3 [a3,d4]@2 ~@5 [a3,d4] ~@3 g3@2, g2, [g3,b3]@5 d4@4 g3@4 [b3,d4]@3, d4@3 ~@2 b3@6 d4 d3@4, ~@2 d3@3 ~@2 d3@4 a3@5]/2", // D5 G Bm
  K: "[e3@2 e3 ~@11 g4@2, [e2,g3] e3, b3@4 b3@2 b3@3 ~ b3 g4@2 e4@3, ~@3 e3@4 [d4,f#4]@2 g4@2 b4@5, ~@5 [e4,g4]@4 e4@3 b3@4]/2", // Em D Em
  L: "c4@2 ~@3 c4@2 c4, [c3,e4], g4@3 [d4,g4]@5, ~@2 c4@3 ~@3", // C G5
  M: "~@3 g4@2 g4 ~ c4, c3, e4@3 d4@2 e4@3, g4 c4@2 [d4,g4], c4 g3@7", // G5
  N: "[f#4@4 ~@4 [e4,g4]@4 a3 ~@3 a4@2 ~@8 a4@2 [e4,a4]@2 d4 ~, [d3,a3,d4]@6 d3@5 d4@4 ~, ~@4 [f#4,a4]@8 d4@6 a4@2 a3@2 a4@2 [d3,a3]@7 ~, ~@3 f#4 e4@3 ~, ~@7 a3@2 f#4@4 f#4@2 ~]/2", // Em A5 D5 F#m D5
  O: "[~@13 [b3,d4]@3, [b4,d5]@9 g3 [a3,d4] d3 g3@4, g3@5 g4@11, g4@3 a4@13, ~@2 d4@5 [g3,b3,d4] g2@8]/2", // Bm D5 G
  P: "[[c4,e4,g4]@3 ~@5 g3 ~@5 c4@2, c3@9 g4@2 g3@5, g3@6 c4@4 g3@4 [d4,g4]@5 ~ c3@12, ~@3 e4@6 e4@7, ~@3 g4@3 c4@3 c4@4 [d4,g4]@3]/2", // C G5
  Q: "[[b3,d4]@3 ~@2 [b3,d4,g4]@2 b3@2 b3@2 b3@2 ~ d3@2, g3, g2 g2@3, ~@3 [b3,d4]@2 ~@2 [d4,g4]@4 [d4,g4]@5, ~@13 b3@3]/2", // Bm G Bm G5
  R: "[g3@4 ~@14 [d4,g4]@2 ~@8 [d4,g4]@3 ~, e4@20 g4@2 c3@9 ~, c3@20 d4@6 g3@5 ~, c4@10 g3@4 c4@10 [c4,e4]@7 ~, g4@2 g3 [d4,g4]@5 g3@4 g4@2 ~@2]/2", // G5 C G5
  S: "[d3,a3,d4,f#4,a4]@14 [d3,a3,e4,g4,a4] ~", T: "~ a3@3 ~@2 d4@2, ~ [d3,f#4]@7, ~ d4@5 ~@2, ~ a4@4 [e4,a4]@3, ~ a3",
  U: "[g4,b4]@5 [d4,g4,b4]@3, [e3,g3,b3,e4]", V: "~@5 [d4,g4,b4]@3, e3, b3@3 [g4,b4] b3@4, [e4,g4,b4]@3 e4@5, ~ g3@3",
  W: "g4@3 ~@4 c4, [c3,g3,e4], c4@7 ~, ~@3 [d4,g4]@5", // C G5
  X: "[c4,e4,g4]@6 ~@6 c4@3 ~, c3@15 ~, g3@6 g4@2 g3@7 ~, ~@6 e4@9 ~, ~@6 c4@4 [d4,g4]@5 ~", // C G5
  Y: "[~@24 [a3,d4]@7 ~, [g2,b3]@31 ~, d4@3 ~, g3@22 g3@9 ~, ~@20 d3@11 ~]/2", // D5 G
  Z: "[[b2,b3,d4,f#4]@24 [b2,b3,d4,f#4]@7 ~]/2", // Bm
  AA: "[g3@7 ~@2 [d4,g4]@2 ~@5, c3@31 ~, e4@11 ~@5, g4@8 c4@3 ~@5, c4@7 g3@4 ~@5]/2", // G5
  AB: "[d3,a3,d4,f#4]@3 a3@4 a3, b3, ~@3 [d3,d4,f#4]@5", // D
  AC: "[d3,a3,d4,f#4]@4 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4]@3 ~ [d3,a3,d4,f#4]@4 ~@2", // D
  AD: "[g3@2 ~@7 [d4,g4] ~@4 [d4,g4]@2 [g2,b3,d4,g4]@16, e4@10 g4 c3@16 ~@5, c3@10 d4@3 g3@16 ~@3, c4@5 g3@2 c4@5 [c4,e4]@16 ~@4, g4@2 g3 [d4,g4]@5 g3@4 g4@2 ~@18]/4", // G5 G C G5
})).s("gm_epiano1").gain(0.57)

// bass · electric bass finger · "Track 11"
const bass = note(`<
  ~@2 A B C D A E C D A E F@2 C G A@3 E F@2 C G H I J K L M C@2 H I N E C@2 A E C@2 A E F@2 C G A@3 E F@2 C G H I J K L
  M C@2 H I N E O P A E C@2 I@2 Q M C@2 A E F@2 C G H R J K L M C@2 H I S T E C@2 A E C@2 N E C@2 A E C@2 U@3
>`.pickRestart({
  A: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", B: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1@2 d2@2",
  C: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", D: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@2 d2@2",
  E: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1@2", F: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  G: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@2", H: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2 a1@2",
  I: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", J: "g1@2 g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~",
  K: "g1 ~ g1 ~ g1 ~ g1 ~ g1@2 g2@2 g1@2 g2@2", L: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~",
  M: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1@2", N: "g1@2 g1@2 g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~",
  O: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@2 c2 ~", P: "c2 ~ c2 ~ c2 ~ c2 ~ c2@2 c2 ~ c2 ~ c2 ~",
  Q: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2 b1@2", R: "d2 ~@7", S: "d2 ~ d2 ~ d2@2 a1@2 d2@2 a1@2 d2@3 ~",
  T: "g1@2 g1@2 g1 ~ g1 ~ g1@2 g1 ~ g1 ~ g1 ~", U: "[g1@11 ~@5]/3",
})).s("gm_electric_bass_finger").gain(0.5)

// chords · string ensemble 1 · "Track 16"
const string_ensemble_1 = note(`<
  ~@2 A@8 B@2 ~@7 C D@2 E@2 F@2 G@6 H@2 I@4 J@2 K@2 B@2 ~@7 C D@2 E@2 F@2 G@6 H@2 I@4 J@2 K@2 L@2 M@2 N@2 ~ C D@2 O@2 P
  ~ G@6 H@2 Q R@4 S@2 T@2 U@4 V@2 W@2 X@2 ~
>`.pickRestart({
  A: "[b5@22 a5@4 b5@3 ~ c6@23 b5@4 ~ c6@3 ~ b5@24 a5@4 b5@3 ~ [e5,g5,c6]@32 ~@2, [d5,g5]@29 ~ [e5,g5]@31 ~ [d5,g5]@31 ~@35]/8", // C G5 Em G5
  B: "[b3@15 ~, d4@3 ~, g4 ~@3]/2", C: "~@2 b5 d6", D: "[f#6@31 ~]/2", E: "[[c6,e6]@15 ~]/2", F: "[[a5,d6]@31 ~]/2",
  G: "[~@4 g5@4 a5@4 b5@8 g5@4 a5@4 ~@8 g5@3 ~ a5@4 ~@8 g5@4 a5@4 ~@12 a5@4 ~@12 a5@4 b5@3 ~, [g4,b4,d5]@28 b5@12 ~@4 b5@8 ~@8 b5@7 ~ g5@15 ~@3 g5@10, ~@32 e4@29 ~@15 b5@12 ~@8, ~@34 b4@27 ~@3 c5@32, ~@48 e5@9 ~@9 e5@17 ~ e5@12]/6", // G
  H: "[~@16 d6@15 ~, [d5,f#5]@31 ~, ~@8 a5@23 ~]/2", I: "[[b4,d5]@31 ~ [c5,e5]@31 ~, g5@63 ~]/4",
  J: "[[b4,d5,g5]@31 ~]/2", K: "[[c5,e5,g5]@31 ~]/2", L: "[d5,f#5,a5]/2", M: "[e5,g5,b5]/2",
  N: "[~@16 b5@4 ~@4 e6@7 ~, [c5,e5,g5]@31 ~, ~@20 c6@11 ~]/2", O: "[[c6,e6]@31 ~]/2", P: "[a5,d6]",
  Q: "[a5,d6,a6]@15 ~", R: "[[b4,d5]@31 ~@17 e6@8 g6@8, g5@63 ~, d6@47 ~@17, ~@32 [c5,e5]@31 ~]/4",
  S: "[b4,d5,g5,d6]/2", T: "[g6@9 f#6@2 g6@2 f#6 e6@2, [c5,e5,g5]@31 ~]/2",
  U: "[d6@11 g6@2 f#6@3 g6@13 f#6@2 e6, g5@63 ~, [b4,d5]@31 ~ [c5,e5]@31 ~]/4", // Bm C
  V: "[d6@22 f#6@3 ~ g6@6, [b4,d5,g5]@31 ~]/2", W: "[e6@11 d6@2 e6@3, [c5,e5,g5]@31 ~]/2", X: "[g4,d5,b5]/2",
})).s("gm_string_ensemble_1").gain(0.24)

// chords · string ensemble 1 · "Track 16" · soft notes
const string_ensemble_1_soft = note(`<
  ~@18 A@2 B@2 C@2 D@2 ~@4 E ~@2 F ~@16 A@2 B@2 C@2 D@2 ~@4 E ~@2 F ~@14 A@2 B@2 C@2 G ~@5 E ~@2 F ~@20
>`.pickRestart({
  A: "[g5@29 ~@3, b5@5 ~@3, d5 ~]/2", B: "[~@16 b5@15 ~, ~@12 d6@19 ~]/2", C: "[g5@31 ~]/2", D: "[f#5@31 ~]/2",
  E: "e5 ~@15", F: "~@8 f#6@7 ~", G: "f#5",
})).s("gm_string_ensemble_1").gain(0.14)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@87 [~@2 x!2] ~@8 [~@3 x ~ x ~ x] ~@15 [~@3 x ~@2 x ~] ~@3>").gain(0.48)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A@32 B@3 C D B C@2 A@24 E C B C@2 F C ~ B@4 F G H A@6 I A@8 J B F@2 B G B C F B C B C B@3 D ~@3
>`.pickRestart({
  A: "x!8", B: "~ x ~@4 x ~", C: "~ x ~@6", D: "~@3 x", E: "x ~@2 x", F: "~ x!2 ~@5", G: "~ x ~@3 x ~@2", H: "~ x!7",
  I: "x", J: "~ x ~@2",
})).gain(0.42)

// drums · mid tom
const mid_tom = s("mt").struct("<~@87 [~ x!2 ~@2 x ~@2] ~@24 [~@2 x ~@8 x ~@4] ~@3>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@41 A ~@31 A ~@5 A ~@7 A ~@16 A ~@7 A B ~@2>".pickRestart({
  A: "~@7 x", B: "x",
})).gain(0.54)

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

// drums · ride
const ride = s("rd").struct(`<
  ~@34 A B C D E F G B ~@24 H D@2 B E F D B I D@2 B J D ~@17 E K L B M N O B P Q D R S O T U ~@3
>`.pickRestart({
  A: "~@2 x!3 ~ x ~", B: "x ~ x!3 ~ x ~", C: "x ~@3 x!2 ~@2 x ~@2 x!2 ~@3", D: "x ~ x ~ x!3 ~", E: "~@2 x ~ x!3 ~",
  F: "x ~ x!3 ~ x!2", G: "x ~@3 x ~@3 x ~ x ~ x!2 ~@2", H: "~ x!3", I: "~@2 x ~ x ~ x!2",
  J: "x ~@3 x ~@3 x!3 ~ x ~ x ~", K: "x!3 ~ x ~ x!2", L: "x ~ x ~ x ~ x!2", M: "~@4 x ~@3 x!3 ~ x ~@3", N: "x ~ x!5 ~",
  O: "x ~@3 x ~ x ~ x ~ x!3 ~ x ~", P: "~@2 x!5 ~", Q: "x ~@3 x ~ x ~ x ~@2 x!2 ~ x ~",
  R: "x ~@3 x!2 ~@2 x!2 ~ x!2 ~@3", S: "~@2 x ~ x!2 ~@2 x!3 ~ x ~@3", T: "x ~@3 x ~ x ~ x ~@3 x!3 ~", U: "x",
})).gain(0.42)

stack(
  epiano1, bass, string_ensemble_1, string_ensemble_1_soft, kick, snare, low_tom, hihat, mid_tom, open_hat, crash, ride
)

More by Heart