Strudelify

You Remind Me Of Something

R. Kelly

KeyB minorTempo65 bpm
0:00/0:00
// You Remind Me Of Something — R. Kelly
// 65 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 66 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(65/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 · "Piano"
const epiano1 = note("<A@3 B C@8 D@8 E@3 F@6 G@3 H I@8 J@8 K@7 L M@8 ~>".pickRestart({
  A: "[~@31 [e4,g4] [c4,e4,g4]@25 ~@7 [b3,d4]@24 ~@7 b4, ~@31 b4@25 ~@7 [f#4,a4]@25 ~@8]/3", // Em C Bm F#m
  B: "~ c4@24 ~@6 [f#4,a4], [e4,g4]@25 ~@7", // F#m Em
  C: "[[b3,d4]@24 ~@8 c4@24 ~@8 [b3,d4]@25 ~@7 [c4,e4]@25 ~@7 [b3,d4]@25 ~@7 [c4,e4]@25 ~@7 [b3,d4]@24 ~@8 [c4,e4]@25 ~@6 [f#4,a4], ~@31 [e4,g4]@26 ~@6 [f#4,a4]@26 ~@6 [g4,b4]@26 ~@6 [f#4,a4]@26 ~@6 [g4,b4]@26 ~@6 [f#4,a4]@26 ~@6 [g4,b4]@26 ~@7]/8", // Bm C Bm C Bm C F#m Em …
  D: "[[b3,d4]@24 ~@8 [c4,e4]@25 ~@7 [b3,d4]@25 ~@7 [c4,e4]@25 ~@7 [b3,d4]@24 ~@8 [c4,e4]@24 ~@9 b3@24 ~@8 c4@24 ~@7, ~@31 [g4,b4]@26 ~@6 [f#4,a4]@26 ~@6 [g4,b4]@26 ~@6 [f#4,a4]@25 ~@7 [g4,b4]@25 ~@7 a4@25 ~@7 b4@25 ~@8, ~@192 [d4,f#4]@25 ~@7 [e4,g4]@25 ~@7]/8", // Bm C Bm C Bm C G F#m …
  E: "[~ b3@24 ~@7 [c4,e4]@28 ~@4 [b3,d4]@24 ~@7 g4, [f#4,a4]@25 ~@6 [g4,b4]@28 ~@4 f#4@25 ~@8]/3", // C Bm F#m G
  F: "[[c4,e4]@25 ~@7 b3@23 ~ [b3,d4,f#4,a4] ~ [b3,d4,f#4] ~@5 [c4,e4]@25 ~@7 b3@24 ~@8 [c4,e4]@25 ~@8 b3@24 ~@6 b4, ~@31 [f#4,a4]@24 ~@8 [g4,b4]@26 ~@6 [f#4,a4]@26 ~@6 [g4,b4]@26 ~@6 [f#4,a4]@25 ~@8, ~@20 d4@3 ~]/6", // C Bm7 Bm C F#m G F#m G …
  G: "[~ c4@24 ~@7 b3@24 ~@9 c4@24 ~@7, [e4,g4]@25 ~@6 [f#4,a4]@25 ~@7 [g4,b4]@26 ~@7, ~@64 e4@25 ~@7]/3", // Em F#m G
  H: "~ b3@24 ~@7, [d4,f#4,a4]@25 ~@7", // D
  I: "[~ c4@24 ~@8 b3@24 ~@7 [c4,e4]@25 ~@7 b3@24 ~@9 c4@24 ~@7 b3@24 ~@8 [c4,e4]@25 ~@8 b3@25 ~@5 g4, [e4,g4]@25 ~@6 [f#4,a4]@25 ~@7 [g4,b4]@26 ~@6 f#4@25 ~@7 b4@25 ~@71 a4@26 ~@7, ~@128 [e4,g4]@25 ~@6 [f#4,a4]@26 ~@6 [g4,b4]@26 ~@7 [d4,f#4]@26 ~@6]/8", // C Em F#m G Em F#m G D
  J: "[[c4,e4]@25 ~@7 [b3,d4]@24 ~@8 [c4,e4]@25 ~@5 a4 d4 [b3,d4]@27 ~@5 c4@24 ~@8 [b3,d4] [b3,d4]@24 ~@7 [c4,e4]@25 ~@7 [b3,d4]@24 ~@7 b4, ~@31 [f#4,a4]@25 ~@7 [g4,b4]@25 ~@7 f#4@28 ~@4 [e4,g4,b4]@25 ~@7 [f#4,a4]@25 ~@7 [g4,b4]@26 ~@6 [f#4,a4]@25 ~@8]/8", // C Bm C Bm C Bm F#m G …
  K: "[~ c4@24 ~@7 [b3,d4,f#4]@27 ~@5 [c4,e4,g4]@25 ~@6 f#4 [b3,d4,f#4]@24 [b3,d4,f#4,a4] ~ [b3,d4,f#4,a4] ~@5 [c4,e4]@26 ~@6 [b3,d4]@24 ~@9 c4@24 ~@6 [f#4,a4], [e4,g4]@25 ~@6 a4@27 ~@5 b4@25 ~@7 a4@25 ~@7 [g4,b4]@26 ~@6 [f#4,a4]@25 ~@7 b4@25 ~@8, ~@192 [e4,g4]@25 ~@7]/7", // Bm C Bm Bm7 C Bm F#m Em …
  L: "[b3,d4,f#4]@16 [b3,d4,f#4] ~@15, ~@8 a4 ~@7", // Bm
  M: "[[c4,e4,g4,b4]@25 ~@7 [b3,d4]@25 ~@7 [c4,e4]@25 ~@7 [b3,d4]@23 ~ [b3,d4,f#4,a4] ~ [b3,d4,f#4,a4] ~@5 [c4,e4]@25 ~@7 [b3,d4]@24 ~@8 [c4,e4]@25 ~@7 [b3,d4]@24 ~@8, ~@31 [f#4,a4]@26 ~@6 [g4,b4]@25 ~@7 f#4@24 ~@8 [g4,b4]@26 ~@6 [f#4,a4]@25 ~@7 [g4,b4]@25 ~@7 [f#4,a4]@25 ~@8]/8", // Cmaj7 Bm C Bm Bm7 C Bm C …
})).s("gm_epiano1").gain(0.26)

// chords · epiano1 · "Piano" · soft notes
const epiano1_soft = note(`<
  ~@4 A@2 ~@14 B ~ C@2 D ~ E ~@3 E ~ A@2 E F@2 ~ E ~ A@2 ~ G@2 ~@11 H ~@2 I@2 ~@5
>`.pickRestart({
  A: "[~@31 b4@25 ~@8]/2", B: "~ d4@24 ~@7", C: "[a4@24 ~@7 b4@25 ~@8]/2", D: "d4@23 ~@4 a4 ~@4", E: "d4@3 ~",
  F: "[~@4 d4@3 ~, ~@31 a4@25 ~@8]/2", G: "[~@31 a4@27 ~@6]/2", H: "a4 ~", I: "[~@31 a4@24 ~@9]/2",
})).s("gm_epiano1").gain(0.15)

// bass · synth bass 1 · "bass"
const bass = note(`<
  ~ A B A C A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A D E ~ A B A B A B A B A B A F A B
  A B A B A B G
>`.pickRestart({
  A: "a1@12 ~@2 a1@2 e1@3 ~@5 g1@3 ~@5", B: "b1@12 ~@2 b1@2 e1@3 ~@5 g1@3 ~@5", C: "b1@13 ~ b1@2 e1@3 ~@5 g1@3 ~@5",
  D: "b1@6 ~ b1 e1 ~@3 g1@2 ~@2", E: "a1@6 ~ a1 e1@2 ~@2 g1@2 ~@2", F: "b1@6 ~ b1 e1 ~@7", G: "a1@3 ~@5",
})).s("gm_synth_bass_1").gain(0.31)

// other · piano · "Intro Piano"
const piano = note("<[d5 b4 a4 g4] [~@12 g2 ~@3]!43 ~ [~@12 g2 ~@3]!11 ~ [~@12 g2 ~@3]!8 ~>").s("gm_piano").gain(0.36)

// other · string ensemble 2 · "Chorus Str"
const string_ensemble_2 = note("<~ A@4 ~@7 B C D E F A@8 ~@7 B C D E F A@6 G@2 H I@2 J A@6 K@2 A@8 ~>".pickRestart({
  A: "[d6@7 b5]/2", B: "~@6 b5 d6", C: "f#6@5 d6@8 a6@3", D: "f#6@2 e6 f#6", E: "d6", F: "b5",
  G: "[~@16 [e2,e3,e4]@5 [f#2,f#3,f#4]@3 [g2,g3]@2 [a2,a3,a4,a5]@2 [b2,b3,b4]@2 [d3,d4,d5]@2, d6@57 ~@7]/2", // E F# G A B D
  H: "[f#4,f#5]@6 [g4,g5] [d4,d5]@9", I: "[[f#4,f#5]@16 [e4,e5]@8 [f#4,f#5]@4 [g4,g5]@2 ~ d5@33, ~@15 d4@17]/2",
  J: "[b3,b4]@29 ~@3", K: "[d6@57 ~@7]/2",
})).s("gm_string_ensemble_2").gain(0.2)

// other · string ensemble 2 · "Chorus Str" · soft notes · G
const string_ensemble_2_soft = note("<~@44 [e5@10 ~ f#5@5 [g4,g5]@5 ~@3 b5@3 ~ d6@4] ~@21>")
  .s("gm_string_ensemble_2").gain(0.1)

// other · piano · "Lead Piano"
const piano_2 = note("<~@12 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@7 A ~@3 A ~>".pickRestart({
  A: "~@2 e3 [g3,g4]", // G
})).s("gm_piano").gain(0.26)

// other · piano · "Lead Piano" · soft notes
const piano_soft = note("<~@12 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@7 A ~@3 A ~>".pickRestart({
  A: "~@2 e4 ~",
})).s("gm_piano").gain(0.15)

// chords · brass section · "Horn Hit"
const brass_section = note("<~@24 A ~@27 B ~@3 C ~@3 D ~@5>".pickRestart({
  A: "~@24 [f#4,b4,f#5,a5]@2 [b3,d4,f#4,a4,b4,d5,f#5,a5] ~@5, ~@24 [b3,d4,a4,d5] ~@7", // B7 Bm7
  B: "~@24 [b3,d4,f#4,a4,b4,d5,f#5,a5] ~ [b3,d4,f#4,a4,b4,d5,f#5,a5] ~@5", C: "~@16 [d4,f#4,d5,f#5] ~@15",
  D: "~@24 [b3,d4,f#4,a4,b4,d5,f#5,a5]@2 [b3,d4,f#4,a4,b4,d5,f#5,a5] ~@5", // Bm7
})).s("gm_brass_section").gain(0.46)

// chords · brass section · "Horn Hit" · soft notes · B7
const brass_section_soft = note("<~@56 [~@16 [b3,a4,b4,a5] ~@15] ~@9>").s("gm_brass_section").gain(0.26)

// other · brass section · "Horns"
const brass_section_2 = note("<~@24 A ~@27 B ~@3 C ~@3 D ~@5>".pickRestart({
  A: "~@24 [a4,a5]@2 [b4,b5] ~@5", B: "~@24 [d5,d6]@2 [e5,e6] ~@5", C: "~@16 [d5,d6] ~@15",
  D: "~@24 [f#4,f#5]@2 [g4,g5] ~@5", // F# G
})).s("gm_brass_section").gain(0.46)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@7 B A@3 B A@7 B A@3 B ~
>`.pickRestart({
  A: "x ~@6 x!2 ~@7", B: "x ~@6 x!2 ~@4 x ~@2",
})).gain(0.46)

// drums · clap
const clap = s("cp").struct("<[~@3 x] [~ x ~ x]!55 [~ x ~@2] [~ x ~ x]!8 ~>").gain(0.46)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C A B
  A B A B A B ~
>`.pickRestart({
  A: "x!3 ~ x!7 ~ x!4", B: "x ~ x ~ x ~@3 x ~ x ~ x ~ x ~ x ~ x!3 ~@3 x ~ x ~ x ~ x ~", C: "x!3 ~ x!5 ~@7",
})).gain(0.31)

// drums · open hat
const open_hat = s("oh").struct("<~ [~@3 x ~@7 x ~@4]!55 [~@3 x ~@12] [~@3 x ~@7 x ~@4]!8 ~>").gain(0.31)

// drums · splash
const splash = s("cr").struct("<~ x ~@64>").gain(0.51)

// drums · congas
const congas = s("conga:13").struct("<~ [~ x ~ x]!55 [~ x ~@2] [~ x ~ x]!8 ~>").gain(1.31)

// drums · shaker
const shaker = s("sh").struct("<~@3 [~@11 x ~@4] ~@62>").gain(0.1)

// drums · triangle
const triangle = s("triangles:35").struct("<~ [~@3 x ~@7 x ~@4]!3 [~@11 x ~@4] [~@3 x ~@7 x ~@4]!60 ~>").gain(2.23)

stack(
  epiano1, epiano1_soft, bass, piano, string_ensemble_2, string_ensemble_2_soft, piano_2, piano_soft, brass_section,
  brass_section_soft, brass_section_2, kick, clap, hihat, open_hat, splash, congas, shaker, triangle
)

More by R. Kelly