Strudelify

I Belong To You

Lenny Kravitz

KeyG minorTempo89 bpm
0:00/0:00
// I Belong To You — Lenny Kravitz
// 89 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: bank select 127 on channel 2 is ignored: the parts fit General MIDI, not the Roland MT-32 map it names
// note: ch 1 "Toy-Piano" named as a piano, played on piano (its shamisen patch is not one); ch 5 "Toy-Piano 2" named as a piano, played on piano (its shamisen patch is not one)
// note: Full arrangement: all 93 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(89/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 · "Bass"
const bass = note(`<
  ~@4 A@2 B C D E F G D E F G H I J K H I J K L M N C O P N C Q M N C Q M N C Q M N C H I J K H I J K H I J R S T J K S
  T J K S T J K S T J K S T J K S T J K S T J K U@8 V
>`.pickRestart({
  A: "c2 ~ c2!2 ~ c2 ~ b1 c2 ~@7", B: "g1 ~ g1!2 ~ g1 ~ g1!2 ~@4 e1 f1 gb1", C: "g1 ~ g1!2 ~ g1 ~ gb1 g1 ~@3 b1@4",
  D: "c2!2 ~@4 c2!2 ~@8", E: "c2!2 ~@4 c2!2 ~@4 c2@4", F: "g1!2 ~@4 g1!2 ~@8", G: "g1!2 ~@4 g1!2 ~@4 bb1@4",
  H: "c2 ~ g2!2 ~ g2 ~ g2 c2 ~@4 bb1 b1 c2", I: "c2 ~ g2!2 ~ g2 ~ g2 c2 ~@3 d2@4", J: "g1 ~ d2!2 ~ d2 ~ d2 g1 ~@3 g2@4",
  K: "g1 ~ d2!2 ~ d2 ~ d2 g1 ~@3 c2@4", L: "c2 ~ c2!2 ~ c2 ~ b1 c2 ~@4 bb1 b1 c2", M: "c2 ~ c2!2 ~ c2 ~ c2!2 ~@3 d2@4",
  N: "g1 ~ g1!2 ~ g1 ~ g1!2 ~@4 f1 gb1 g1", O: "c2 ~ c2!2 ~ c2 ~ c2!2 ~@4 c2 g2 bb2",
  P: "c3 ~ c2!2 ~ c2 ~ c2!2 ~@3 d2@4", Q: "c2 ~ c2!2 ~ c2 ~ c2!2 ~@4 c2 g1 bb1", R: "g1 ~ d2!2 ~ d2 ~ d2 g2 ~@3 c2@4",
  S: "c2 ~ g2!2 ~ g2 ~ g2 bb2 ~ a2 ~ g2 bb1 b1 c2", T: "c2 ~ g2!2 ~ g2 ~ g2 bb2 ~ a2 ~ g2@4",
  U: "g1 ~ d2!2 ~ d2 ~ d2 g1 ~@3 f2@4", V: "g1 ~ d2!2 ~ d2 ~ d2 g1 ~@7",
})).s("gm_electric_bass_finger").gain(0.63).pan(0.7)

// other · piano · "Toy-Piano"
const piano = note(`<
  A@15 B C D A E C D A E C D A E C D A E C D A E C D A E C D A E C D A E C D A E C D A E C D A E C D A E C D A E C D A E
  C D A E C D A E C D A E A@8 F
>`.pickRestart({
  A: "g4 ~@7 g4 ~@7", B: "g4 ~@5 d5 db5", C: "c5 ~@7 c5 ~@7", D: "c5 ~@7 c5 ~@3 db5@2 d5@2",
  E: "g4 ~@7 g4 ~@3 d5@2 db5@2", F: "g4 ~@15",
})).s("gm_piano").gain(0.3).pan(0.3)

// other · piano · "Toy-Piano 2"
const piano_2 = note(`<
  ~@16 A@2 B C A@2 B C ~@20 A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C ~@9
>`.pickRestart({
  A: "bb4@2 eb4 bb4@2 eb4 bb4@2 eb4 bb4@2 eb4 bb4@2 eb4 ~", B: "g4@2 d4 g4@2 d4 a4@2 d4 a4@2 d4 a4@2 d4 ~",
  C: "bb4@2 g4 bb4@2 g4 a4@2 g4@2 d4 g4@2 d4 g4@2",
})).s("gm_piano").gain(0.1).pan(0.7)

// chords · distortion guitar · "Guitar"
const distortion_guitar = note(`<
  ~@14 A B C D E F C D E F ~@18 A B C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F ~@9
>`.pickRestart({
  A: "[d3,g3,d4,g4]!2 ~@4 [d3,g3,d4,g4]!2 ~@4 [d3,g3,d4,d5] ~ [d3,g3] ~", // G5
  B: "[d3,g3,d4,g4]!2 ~@4 [d3,g3,d4,g4]!2 ~@4 [d3,g3,d4,d5] ~ [d3,g3,d4,d5] ~", // G5
  C: "[c3,g3,c4] ~ [c3,g3,c4]!2 ~ [c3,g3,c4] ~ [c3,g3,c4]!2 ~@3 [c3,g3,c4] ~ [c3,g3,c4] ~", // C5
  D: "[c3,g3,c4] ~ [c3,g3,c4]!2 ~ [c3,g3,c4] ~ [c3,g3,c4]!2 ~@3 [c3,g3,c4]!2 ~ [c3,g3,c4]", // C5
  E: "[g2,d3,g3] ~ [g2,d3,g3]!2 ~ [g2,d3,g3] ~ [g2,d3,g3]!2 ~@3 [g2,d3,g3]!2 ~ [g2,d3,g3]", // G5
  F: "[g2,d3,g3] ~ [g2,d3,g3]!2 ~ [g2,d3,g3] ~ [g2,d3,g3]!2 ~@3 [g2,d3,g3]!4", // G5
})).s("gm_distortion_guitar").gain(0.23).pan(0.4)

// chords · overdriven guitar · "Guitar2"
const overdriven_guitar = note("<~@36 A B C D A B C D ~@49>".pickRestart({
  A: "[c4,g4,c5]!2 ~@2 [c4,g4,g5]!2 [c4,g4,c5]!2 ~@4 [c4,g4,g5]!2 c4 ~", // C5
  B: "[c4,g4,c5]!2 ~@2 [c4,g4,g5]!2 [c4,g4,c5]!2 ~@4 [c4,g4,g5]!4", // C5
  C: "[g3,d4,g4]!2 ~@2 [g3,d4,d5]!2 [g3,d4,g4]!2 ~@4 [g3,d4,d5]!2 g3 ~", // G5
  D: "[g3,d4,g4]!2 ~ [g3,d4,d5]!3 [g3,d4,g4]!2 ~@4 [g3,d4,d5]!4", // G5
})).s("gm_overdriven_guitar").gain(0.19)

// chords · overdriven guitar · "Lead Guitar"
const overdriven_guitar_2 = note("<~@60 A@2 B C D E F@2 G ~@24>".pickRestart({
  A: "[~@8 bb4@10 c5!2 ~ bb4 c5 ~ bb4@2 g4@6]/2", B: "g4!2 ~ g4 ~ g4 f4 ~ g4@2 bb4 ~@5",
  C: "~@5 eb5 f5 d5 c5 d5 c5 g4@2 d5 ~ [g4,bb4], ~@2 d5 ~@5", // Gm
  D: "[g4,bb4] ~ [g4,bb4]!3 ~ [g4,bb4] ~ [f4,bb4]@2 [g4,bb4]!2 ~@3 [g4,bb4]", // Gm Bb5 Gm
  E: "[g4,bb4] ~ [g4,bb4]!3 ~ [g4,bb4] ~ [f4,bb4]@2 [g4,bb4] ~@3 [g4,bb4] ~", // Gm Bb5 Gm
  F: "[[g4,bb4] [f4,bb4] ~ [f4,bb4]@3 ~@2 g3 a3 bb3 c4 d4 ~ d4 c4@7 f4 ~ c4@6 bb3 ~]/2", G: "g3@3 ~",
})).s("gm_overdriven_guitar").gain(0.38).pan(0.7)

// chords · overdriven guitar · "Lead Guitar" · soft notes · Gm
const overdriven_guitar_soft = note("<~@62 [~@12 g4@2 bb4 ~] [g4@2 bb4 ~ g4@2 bb4 ~@9] [~@12 [g4,bb4] ~@3] ~@28>")
  .s("gm_overdriven_guitar").gain(0.19).pan(0.7)

// chords · string ensemble 1 · "Flächen"
const string_ensemble_1 = note(`<
  ~@16 A@2 B@2 A@2 B@2 ~@20 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@9
>`.pickRestart({
  A: "[[g5,g6]@6 [a5,a6] [bb5,bb6]]/2", B: "[[d5,g5,g6]@6 [e5,a5,a6] [f5,bb5,bb6]]/2",
})).s("gm_string_ensemble_1").gain(0.06).pan(0.4)

// drums · kick
const kick = s("bd").struct("x ~ x!2 ~ x ~ x!2 ~@7").gain(0.7).pan(0.4)

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!92 [~ x ~@2]>").gain(0.7).pan(0.4)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!16]!8 [x!12 ~@4]!8 [x!16]!12 [x!12 ~@4]!16 [x!16]!40 [x!12 ~@4]!9>")
  .gain(1.42).pan(0.4)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct(`<
  [~ x ~ x ~ x ~@2]!8
  [~ x ~ x ~ x ~ x]!8
  [~ x ~ x ~ x ~@2]!12
  [~ x ~ x ~ x ~ x]!16
  [~ x ~ x ~ x ~@2]!40
  [~ x ~ x ~ x ~ x]!8
  [~ x ~ x ~ x ~@2]
>`).gain(0.31).pan(0.4)

stack(
  bass, piano, piano_2, distortion_guitar, overdriven_guitar, overdriven_guitar_2, overdriven_guitar_soft,
  string_ensemble_1, kick, rim, cabasa, woodblocks
)

More by Lenny Kravitz