Strudelify

Half on a Baby

R. Kelly

KeyG♯ minorTempo56 bpm
0:00/0:00
// Half on a Baby — R. Kelly
// 56 bpm, 4/4, key G# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 56 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(56/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(`<
  A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D
>`.pickRestart({
  A: "c#2@7 d#2", B: "g#1@11 ~ b1 ~@2 b1", C: "c#2@11 ~ d#2@4", D: "g#1@10 ~ g#1@3 b1@2",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · flute
const flute = note(`<
  A B C D E F G H E F G I A J G H A J G H E F G H E F C K E F C D E F G H E F G H E F C K E F C D E F C K E F C D
>`.pickRestart({
  A: "~@2 g#3@2 b3@2 b3@2 b3 ~ b3@2 ~@2 d#4@2, [c#3,e4], c#4@13 c#4@3, g#4@11 ~@5, b3 ~@2 [b3,g#4]", // C#m E
  B: "[b3,c#4] ~@3 c#4 ~@3 f#4@2 ~@3 c#4 [g#2,b3]@2, g#2@7 ~, [g#3,f#4]@9 ~ [g#3,f#4]@6, d#4 d#4@5 d#4@2, ~ b3@4 b3@9 ~@2", // Bsus2 G#m G#7
  C: "g#3 ~ b3!4 ~ d#4, [c#3,e4], c#4@13 c#4@3, b3 ~@2 [b3,f#4], ~@2 g#3@7 ~ g#3@6", // C#m B5
  D: "[b3,c#4] ~@3 c#4@2 ~@2 f#4@2 ~ f#4 d#4 c#4 [b3,d#4]@2, g#2, g#3@9 ~ g#3@6, d#4 d#4@5 ~@2, ~ b3@5 b3@8 ~@2", // Bsus2 B
  E: "g#4@5 ~ g#4@2, [c#3,c#4,e4], b3@9 ~ b3@6", F: "g#3@9 ~@5 g#2@2, [b3,d#4,f#4], g#2@7 ~, ~@5 g#3@3",
  G: "g#3@9 ~@3 f#4@4, [c#3,b3,c#4,e4], ~@5 g#3@3", H: "g#3@9 ~@5 d#4@2, [g#2,b3], d#4@13 ~@3, ~@5 g#3@3",
  I: "g#3@9 ~@5 [g#2,d#4]@2, b3, [g#2,d#4]@7 ~, ~@5 g#3@3", // G#5
  J: "[b3,c#4] ~@3 c#4@2 ~@2 f#4@2 ~@3 c#4 [g#2,b3]@2, g#2@3 d#4, [g#3,f#4]@9 ~ g#3@6, d#4@2 d#4@9 f#4@5, ~ b3@5 b3@8 ~@2", // Bsus2 G#m G#7
  K: "[b3,c#4] ~@3 c#4 ~@3 f#4@2 f#4@2 d#4 c#4 [g#2,b3,d#4]@2, g#2@7 ~, g#3@9 ~ g#3@6, d#4 d#4@5 ~@2, ~ b3@4 b3@9 ~@2", // Bsus2 G#m
})).s("gm_flute").gain(0.3)

// chords · synth strings 1
const synth_strings_1 = note(`<
  A B C D ~@6 C D A B C D A B ~@6 A B C D A B C D E F ~@6 A B C D A B C D A B C D A B C D
>`.pickRestart({
  A: "[c#3,c#4,e4,g#4]", B: "[g#2,b3,d#4,f#4]", C: "[c#3,b3,c#4,e4]", D: "[g#2,b3,d#4]", E: "c#3", F: "g#2",
})).s("gm_synth_strings_1").gain(0.19)

// other · string ensemble 2
const string_ensemble_2 = note(`<
  A@2 B C ~@6 B C A@2 B C A@2 ~@6 A@2 B C A@2 B C ~@8 A@2 B C A@2 B C A@2 B C A@2 B C
>`.pickRestart({
  A: "[e5@15 d#5@7 g#4@6 a#4@2 b4@2]/2", B: "c#5@14 b4 a#4", C: "g#4@2 a#4 b4",
})).s("gm_string_ensemble_2").gain(0.14)

// drums · kick
const kick = s("bd").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 B
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!3 ~@2",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("~ x ~ x").gain(0.35)

// 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 B
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~",
})).gain(0.25)

// drums · cabasa
const cabasa = s("cabasa:4").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 B
>`.pickRestart({
  A: "~@3 x ~@3 x ~ x ~ x ~@4", B: "~@3 x ~@3 x ~ x ~@6",
})).gain(1.26)

// drums · shaker
const shaker = s("sh").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 B
>`.pickRestart({
  A: "~@13 x!3", B: "~@13 x ~ x",
})).gain(0.2)

stack(bass, flute, synth_strings_1, string_ensemble_2, kick, snare, hihat, cabasa, shaker)

More by R. Kelly