Strudelify

You Make Me Feel Loved

Zucchero

KeyG majorTempo128 bpm
0:00/0:00
// You Make Me Feel Loved — Zucchero
// 128 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 121 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 27.
setcpm(128/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 · electric bass finger
const bass = note(`<
  ~@8 A B C D A E A F A B C D A@2 G H A@2 G H A@2 G I A@2 G I A@2 G H A@2 G H ~ A@2 G I A@2 G I A C J K A C J@2 ~@20 A@2
  G H A@2 G H A@2 G I A@2 G I A C J K A C J@2 A C J K A C J@2 A C J K A C J L
>`.pickRestart({
  A: "g1!8", B: "b1!8", C: "c2!8", D: "d2!6 d2@2", E: "f1 g1!7", F: "f1 g1!4 d2 f2 g2", G: "e1!8", H: "e1!5 d1!3",
  I: "d1!6 e1 d1", J: "d2!8", K: "e2!7 d2", L: "d2@2 d2@2 d2@2 d2@2 d2@2 d2@2 d2@3 ~",
})).s("gm_electric_bass_finger").gain(0.66)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@12 A@2 B@2 C@2 D C E@2 F G E@2 F G A@2 H I A@2 H I E@2 F G E@2 F G ~ A@2 H I A@2 H I J K I H J K L I ~@20 E@2 F G
  E@2 F G A@2 H I A@2 H I J K I H J K L I J K I H J K L I J K I H J K L M
>`.pickRestart({
  A: "[g3,d4,g4]/2", B: "[c4 d4, [g3,g4]@15 ~]/2", C: "[g3,d4,g4]@3 [g3,d4,g4]@5", D: "[g3,c4,g4]@3 [g3,c4,g4]@5",
  E: "[g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~", // G5
  F: "[g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ g3 ~ [g3,d4] ~", // G5
  G: "[g3,d4] ~ [g3,d4] ~ g3 ~ [g3,d4] ~ [g3,d4] ~ [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2", H: "[e3,b3,e4]",
  I: "[d3,a3,d4]", J: "[g3,d4,g4]", K: "[g3,c4,g4]", L: "[a3,d4,a4]", M: "[d3,a3,d4]@7 ~",
})).s("gm_distortion_guitar").gain(0.33).pan(0.6)

// chords · epiano1
const epiano1 = note("<~@61 A B A B A B A B A B A B A B A ~@45>".pickRestart({
  A: "~@2 g3 ~ a#3 b3 ~@2 [g3,b3,d4]@3 [g3,a#3,c4,e4]@2 ~ [g3,a#3,d4] ~, ~@4 [g3,d4]@3 ~@9", // G C7 Gm G5
  B: "~@2 g3 ~ [a#3,b3] ~@3 [g3,b3,d4]@2 ~ [a#3,c4,e4]@2 ~ [g3,a#3,d4] ~, ~@4 g3@4 ~@2 g3@3 ~@3, ~@2 d4 ~@5", // Bmaj7 G C7 Gm
})).s("gm_epiano1").gain(0.33)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  A@16 B@5 ~@7 C@2 D E C@2 D E ~@9 C@2 D E C@2 D E F G H I F G J@2 ~@28 C@2 D E C@2 D E F G H I F G J@2 K G H I F G J@2
  K G H I F G L@2
>`.pickRestart({
  A: "[~@3 [g3,g4] ~@4 g3@2 ~@4 g3@2 ~@3 [g3,g4] ~@4 g3@2 ~@4 g3@2 ~@3 [g3,g4] ~@4 g3@2 ~@4 g3@2 ~@3 [g3,g4] ~@4 g3@2 ~@4 [g3,a4]@2, [g3,g4]@3 ~ g4@3 g4@3 g4@3 g4@3 ~@4 g4@3 g4@3 g4@3 g4@3 ~@4 g4@3 g4@3 g4@3 g4@3 ~@4 g4@3 g4@3 g4@3 g4@3, ~@2 b4@6 a4@3 a4@3 a4@4 b4@6 a4@3 a4@3 a4@4 b4@6 a4@3 a4@3 a4@4 b4@6 a4@3 a4@3 ~@2, ~@4 g3@2 g3@2 ~@2 g3@2 g3@2 ~@2 [g3,g4]@3 ~ g3@2 g3@2 ~@2 g3@2 g3@2 ~@2 [g3,g4]@3 ~ g3@2 g3@2 ~@2 g3@2 g3@2 ~@2 [g3,g4]@3 ~ g3@2 g3@2 ~@2 g3@2 g3@2 ~@2, ~@5 d5@11 ~@5 d5@11 ~@5 d5@11 ~@5 d5@11]/8", // G Gsus2 G
  B: "[~@3 [g3,g4] ~@4 g3@2 ~@4 g3@2 ~@3 [g3,g4] ~@4 g3@2 ~@4 a4@4 ~@6, [g3,g4]@3 ~ g4@3 g4@3 g4@3 g4@3 ~@4 g4@3 g4@3 g4@3 g4@3 ~@8, ~@2 b4@6 a4@3 a4@3 a4@4 b4@6 a4@3 a4@3 ~@10, ~@4 g3@2 g3@2 ~@2 g3@2 g3@2 ~@2 [g3,g4]@3 ~ g3@2 g3@2 ~@2 g3@2 g3@2 g3@2 ~@8, ~@5 d5@11 ~@5 d5@11 ~@8]/5", // G
  C: "[g3,b3,d4,g4]/2", D: "~ e4@15, [e3,g3,b3]", E: "[d3,f#3,a3,d4]", F: "[g3,b3,d4,g4]", G: "[g3,c4,e4,g4]",
  H: "~ d4@15, [d3,f#3,a3]", I: "[e3,g3,b3,e4]", J: "[~ d4@31, [d3,f#3,a3]]/2", K: "[d4,g4]",
  L: "[~ d4@30 ~, [d3,f#3,a3]@15 ~]/2", // D
})).s("gm_overdriven_guitar").gain(0.33).pan(0.4)

// chords · electric guitar muted
const electric_guitar_muted = note("<~@20 A B C D A B C D ~@8 A B C D A B C D ~@37 A B C D A B C D ~@32>".pickRestart({
  A: "~@2 [d3,g3] ~ [d3,g3] ~ [d3,g3] ~ d3 ~ [d3,g3] ~ [d3,g3] ~ [d3,g3] ~", // G5
  B: "[d3,g3] ~ [d3,g3] ~ [d3,g3] ~ [d3,g3] ~ [d3,g3] ~ d3 ~ [d3,b3] ~ [d3,a3] ~", // G5 G D5
  C: "[e3,g3] ~ e3 ~ [e3,g3] ~ [e3,g3] ~ [e3,g3] ~ [e3,g3] ~ [e3,g3] ~ [e3,g3] ~", // Em
  D: "[e3,g3] ~ [e3,g3] ~ [e3,g3] ~ [e3,g3] ~ [e3,g3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // Em D5
})).s("gm_electric_guitar_muted").gain(0.26).pan(0.3)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note("<~@61 A@16 ~@44>".pickRestart({
  A: "[~@3 f4@14 ~@2 e4@12 ~, ~@2 g3@31 ~ g3@28 ~@2, ~@2 d4@15 ~ c4@13 ~]/4",
})).s("gm_acoustic_guitar_steel").gain(0.59).pan(0.6)

// chords · distortion guitar
const distortion_guitar_2 = note(`<
  ~@4 A@2 B@2 A@2 C@2 A@2 C@2 A@2 C@2 ~@8 D E F G D E F G ~@9 D E F G D E F G D H I J D H I G ~@28 D E F G D E F G D H I
  J D H I G D H I J D H I G D H I J D H I K
>`.pickRestart({
  A: "[~ b3@7, g2, ~ f3@15]/2", B: "[~@2 b3 ~@4 e4@9, g2, ~ g3@15, ~@3 c4@13]/2",
  C: "[~@7 e4@9, c4@3 c4@13, ~ g3@15]/2", D: "[g3,d4,g4]@3 [g3,d4,g4]@2 [g3,d4,g4] [g3,d4]!2, ~@3 g4",
  E: "[g3,d4,g4]!3 [g3,d4,g4]@2 [g3,d4,g4]!3", F: "e4!2 [g3,e4,g4] [g3,e4,g4]@2 [g3,e4,g4]!3, [g3,g4] ~@3",
  G: "[a3,d4]!2 [a3,d4,a4] [a3,d4,a4]@2 [a3,d4,a4]!3, a4 ~@3", H: "[g3,c4,g4]!3 [g3,c4,g4]@2 [g3,c4,g4]!3",
  I: "d4!2 [a3,d4,a4] [a3,d4,a4]@2 [a3,d4,a4]!3, [a3,a4] ~@3", // D5 A
  J: "[b3,e4]!2 [b3,e4,b4] [b3,e4,b4]@2 [b3,e4,b4]!3, b4 ~@3", // E5
  K: "[a3,d4]@2 [a3,d4]@2 [a3,d4,a4]@2 [a3,d4,a4]@4 [a3,d4,a4]@2 [a3,d4,a4]@3 ~, a4 ~@3", // D5
})).s("gm_distortion_guitar").gain(0.39).pan(0.4)

// chords · harmonica
const harmonica = note("<~@61 A B@2 C A B@2 D A B@2 C A B@2 E@5 ~@40>".pickRestart({
  A: "b4@2 [d4,g4]@3 [d4,g4]@3 b4@3 c5@3 b4@2", B: "[d4,g4]@2 [d4,g4]!2 [d4,g4]@2 [d4,g4]@2 b4@3 c5@3 b4@2, ~ b4 ~@2",
  C: "d5@4 d5@4 d5 a#4 c5 g4 a#4 g4 f4 d4", D: "d5@2 f5@2 d5@2 f5@2 d5 c#5 c5 a4 a#4 g4 f4 d4", E: "d5/5",
})).s("gm_harmonica").gain(0.39).pan(0.4)

// other · piano
const piano = note("<~@58 A@3 ~@41 B@3 ~@5 B@3 ~@8>".pickRestart({
  A: "[~@10 b5@9 a5@8 g5@7 f#5@3 ~ e5@8 ~@2]/3", B: "[~@10 b5@8 ~ a5@8 g5@7 f#5@3 ~ e5@8 ~@2]/3",
})).s("gm_piano").gain(0.05)

// drums · kick
const kick = s("bd").struct("<~@4 [x!4]!40 x [x!4]!31 x [x ~@2 x ~@2 x ~@9]!4 [x!4]!39 [x ~ x ~ x!3 ~]>").gain(0.8)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@12 A@32 ~ A@15 ~ A@15 ~@5 A@31 ~ A@8>".pickRestart({
  A: "~ x ~@6",
})).gain(0.24)

// drums · low tom
const low_tom = s("lt").struct("<~@77 [x ~@2 x ~@2 x ~@9]!4 ~@40>").gain(0.8)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@4 [~@3 x ~ x ~ x]!8 ~@65 [~ x ~@2 x!2 ~ x ~ x ~@2 x ~@3]!4 ~@40>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@43 [~@7 x] ~@17 [~ x ~@3 x ~@2]!15 ~@12 [~@7 x] ~@32>").gain(0.56)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@12 [x!8]!32 ~ [x!8]!31 x ~@4 [x!8]!39 [x!7 ~]>").gain(0.4)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@12
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!32
  ~
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!31
  ~@5
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!39
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2]
>`).gain(0.24)

// drums · ht
const ht = s("ht").struct("<~@77 [~@8 x ~@2 x ~@4]!4 ~@40>").gain(0.64)

stack(
  bass, distortion_guitar, epiano1, overdriven_guitar, electric_guitar_muted, acoustic_guitar_steel,
  distortion_guitar_2, harmonica, piano, kick, snare, snare_soft, low_tom, hihat, hihat_soft, open_hat, crash,
  tambourine, tambourine_soft, ht
)

More by Zucchero