Strudelify

Can't Get Enough of Your Love, Babe

Barry White

KeyF majorTempo112 bpm
0:00/0:00
// Can't Get Enough of Your Love, Babe — Barry White
// 112 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level. 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 · piano · "Ac Piano"
const piano = note(`<
  ~ A@2 B@2 C@2 D@2 C@2 D@2 A@2 E@4 F G H I J K L M F G H I J K L M N@2 O P N@2 O P N@2 E@4 F G H I J K L M F G H I J K
  L M N@2 O P N@2 O P N@2 E@4 F G H I J K L M F G H I J K L M F G H I J K L M Q@3 ~
>`.pickRestart({
  A: "[[a4,d5]@3 [f4,a4]@3 ~@8 f4 [d4,f4,a4], [bb2,f5], ~@3 d5@13, ~@3 c4@5, ~@6 [f4,a4]@7 d4@2 ~]/2", // D5 F Dm Bb5 F
  B: "[[c4,e4,g4]@12 [g3,c4,e4]@7 ~ [f2,e4]@2 [g2,bb3,d4,f4] ~@3 [a2,c4,e4,g4] ~@5, a2@19 ~ [g3,c4] ~@11]/2", // C Fmaj7 Gm7 Am7 C5
  C: "[~@7 a4@3 ~@5 [a4,d5], bb2, f5@5 f5@3, [a4,d5]@7 d5@3 a4@3 [g4,c5]@3, ~@5 [g4,c5]@6 d5@4 ~]/2", // D5 C5
  D: "[[g4,c5]@6 g4@6 [c4,g4]@7 ~ [a3,c4] ~ [g2,bb3,d4] ~@3 [a2,c4,e4]@5 ~, a2@19 ~ f2@2 ~@10, ~@6 [e4,c5]@13 ~@7 f4 ~@5]/2", // C5 Am Gm Am C
  E: "[[c3,f4]@3 ~@7 f4@2 ~@4 [f4,bb4,c5]@2 ~@8 [c4,c5] ~@5 [f4,bb4,c5]@2 ~@6 c3@2 [c4,c5] ~@11 c3@2 ~@6 [d5,e5] c5, bb4@6 ~@4 [bb4,c5]@6 ~@6 c5@4 ~ [c4,c5]@2 c4@13 ~ [c4,c5]@2 [c4,c5]@2 [c4,c5]@2 [c4,c5]@2 [c4,c5]@2 [c4,c5]@6 [b6,c7,d7]@5, ~@3 f4@3 [f4,bb4,c5]@4 ~@3 f4@3 ~@3 [f4,bb4,c5]@3 [f4,bb4]@10 ~@3 [f4,bb4,c5]@3 [f4,bb4]@22 [e6,f6,g6,a6]@4, ~@4 c3@4 c3@4 c3@2 c3@4 c3@2 c3@4 c3@4 c3@2 c3@4 c3@2 c3@4 ~@2 c3@2 c3@2 c3@2 c3@2 c3@2 c3@2 ~@2 c3@5 [a5,b5,c6,d6]@3, ~@29 c5@3 ~@6 c5@4 ~@16 [e7,f7,g7,a7]@4 [f5,g5]@2]/4", // F5 Fsus4 C Fsus4 C Dsus2 Bbsus2 C …
  F: "c4 ~@2 [c4,f4]@3 ~@6 f2@2 [g3,a3,c4,g4] ~, f2@3 ~, [a3,a4]@3 [g3,a3,c4,e4]@4 ~", // F5 Am7 A Am7
  G: "g3@2 bb2 g3 ~@2 [bb3,d4,f4] c3, [bb3,d4,f4]@5 g3@2 ~, ~@8 c3@5 ~@3", // Bb
  H: "[c4,f4,a4]@5 ~ c4@6 c4 ~ [c4,e4,g4] ~, f2@7 ~, ~@3 [a3,e4,g4]@4 ~", // F C A7
  I: "g3@4 g3@4 ~@2 [g3,bb3,d4,f4] ~ c3 g3 c3@2, [bb3,d4,f4]@9 ~@4 [bb3,d4,f4]@2 ~, bb2@7 ~ c3@4 ~@4", // Gm7 Bb
  J: "[c4,f4,a4]@5 ~ [c4,e4,g4]@6 a3@2 [c4,e4,g4] ~, f2@7 ~, ~@6 a3@5 ~@5", // F C
  K: "bb2@7 ~@3 [g3,bb3,d4,f4] ~@2 [g3,bb3,d4] c3@2, [g3,bb3,d4,f4]@10 ~@3 f4@2 ~, ~@8 c3@5 ~@3", // Gm7 Gm Gm7
  L: "[c4,f4,a4]@5 ~ [c4,e4,g4]@6 a3@2 [c4,e4,g4] ~, f2@15 ~, ~@6 a3@5 ~@5", // F C
  M: "[bb2,g3]@6 g3@2 ~@2 [bb3,d4,f4]@4 g3 ~, [bb3,d4,f4]@10 g3@3 ~@3, ~@8 c3@7 ~", // Eb Bb
  N: "[[bb2,a3,d4,f4]@12 ~@2 c4@8 d4@7 ~ [a3,d4,f4] ~, ~@6 bb2@9 ~, ~@14 [a3,f4]@15 ~@3]/2", O: "[a2,g3,c4,e4]@15 ~",
  P: "~@12 [f3,f4]@2 [g3,g4] ~, [d2,c4]@15 ~, f3@3 ~, ~@8 [d3,d4]@7 ~, ~@10 [e3,e4]@5 ~", // F G D7 D E
  Q: "[~@19 c6@29, f2@9 f4@32 ~@7, ~ c3@5 c5@16 ~@2, ~ g3@3 f5@8, ~@3 a3@16 ~@5]/3",
})).s("gm_piano").gain(0.22)

// bass · fretless bass · "El Bass"
const bass = note(`<
  ~ A@2 B@2 A@2 B@2 A@2 B@2 A@2 C D E F G H I J G K G L G H I J G K G L M N O P M N Q R M N C D E F G H I J G K G L G H
  I J G K G L M N O P M N Q R M N C D E F G H I J G K G L G H I J G K G L G H I J G K G L S@2 ~@2
>`.pickRestart({
  A: "[bb1@30 g1 ~]/2", B: "[a1@20 f1@2 g1 ~@3 a1@2 ~@4]/2", C: "c2@4 ~@3 c2!2 ~@7", D: "c2@2 ~@5 c2!2 ~@7",
  E: "c2@2 ~@5 c2 c2@2 ~@6", F: "c2@2 ~@2 c2@2 ~ c2!2 ~ f1 ~ g1@2 a1 ~", G: "f1@2 ~@5 f1!2 ~@6 bb1",
  H: "bb1@2 ~@5 c2 c2@2 ~@5 f1", I: "f1@2 ~@5 f1 f1@2 ~@5 bb1", J: "bb1 ~@6 c2!2 ~@6 f1", K: "bb1 ~@6 c2 c2@2 ~@5 f1",
  L: "bb1 ~@6 c2 c2@2 ~@2 c2@3 ~", M: "bb1@2 ~@5 bb1 bb1@2 ~@6", N: "bb1@2 ~@5 bb1 bb1@2 ~@4 g1 ~",
  O: "a1@2 ~@5 a1 a1@2 ~@6", P: "d2@2 ~@5 d2 d2@2 e2@2 f2@2 c2@2", Q: "a1@2 ~@5 a1 a1@2 ~@4 c2 a1",
  R: "d2@2 ~@6 d2 a1 c2 ~ d2@2 c2 ~", S: "f1/2",
})).s("gm_fretless_bass").gain(0.51)

// chords · epiano2 · "Rhodes"
const epiano2 = note(`<
  ~ A@2 B@2 C@2 D@2 E@2 F@2 G@2 H I H J K L K L K M N L K L K L K M N L O@2 P@2 Q R S@2 O@2 H I H J K L K L K M N L K L
  K L K M N L O@2 P@2 Q R S@2 O@2 H I H J K L K L K M N L K L K L K M N L K L K L K M N L T@3 ~
>`.pickRestart({
  A: "[[c4,d4,f4,a4]@29 ~ [d4,f4,a4] ~]/2", B: "[[c4,e4,g4]@19 ~ c4@2 [d4,f4] ~@3 [c4,e4,g4]@5 ~, ~@20 e4 ~@11]/2",
  C: "[[f4,a4]@7 ~ f4@7 ~, [c4,d4]@31 ~, ~@14 c5@17 ~, ~@15 a4@16 ~]/2", // F Csus2
  D: "[[e4,g4,c5]@18 ~@2 c4@2 [d4,f4] ~@3 [e4,g4]@5 ~, ~@20 e4 ~@11]/2", // C Dm Em
  E: "[~@14 a4@14 ~@2 [d4,f4,a4] ~, f4@7 ~, a4@7 ~@9, d4@3 d4@4 ~, ~@5 c4@9 ~@2]/2", // Dm
  F: "[[c4,e4,g4]@19 ~ [c4,e4]@2 [d4,f4] ~@3 [e4,g4]@6]/2", // C Dm Em
  G: "[c4@5 ~@2 a4@7 [d4,f4,a4]@2, f4@7 ~, a4@7 ~@9, d4@3 d4@4 ~, ~@5 c4@9 ~@2]/2", H: "[c4,d4,f4]@5 ~ [c4,d4,f4]@9 ~",
  I: "[c4,d4,f4]@4 ~@2 [c4,d4,f4]@9 ~", J: "[c4,d4,f4]@5 ~ c4 ~@5 f4@2 g4 ~, ~@6 [d4,f4]@4 d4@5 ~, ~@8 c4@7 ~",
  K: "[f3,a3,c4]@7 ~ [c4,e4,g4]@7 ~", L: "[bb3,d4,f4]@7 ~", M: "[bb3,d4,f4]@15 ~", N: "[f3,a3,c4]@3 ~ [c4,e4,g4]@3 ~",
  O: "[[a4,d5,f5]@12 ~@2 [a4,d5,f5]@14 ~@2 [a4,d5,f5] ~]/2", // Dm
  P: "[[g4,c5,e5]@12 ~@2 [f4,c5,e5]@7 ~ d5@4 e5@4 f5 ~, ~@22 [f4,c5]@9 ~]/2", // C Fmaj7 F5
  Q: "[a4,d5] ~ [g4,c5,e5] ~ [a4,d5,f5] ~@3 [a4,d5,f5]@8, f5 ~@7", R: "~@2 [a4,d5,f5] ~@5 [a4,d5,f5] ~ [a4,d5,f5]@5 ~",
  S: "[[g4,c5,e5]@9 ~ [g4,c5,e5] ~@3 [f4,c5,e5]@8 f4 ~ [f4,c5,d5]@7 ~]/2", // C Fmaj7 Dm7
  T: "[g4@16 ~@3 c4@29, [a3,c5]@2 ~, c4@19 ~@29, ~ g4@2]/3", // Am
})).s("gm_epiano2").gain(0.19)

// chords · string ensemble 1 · "Lo Str"
const string_ensemble_1 = note(`<
  ~@4 A B@2 C@2 D@2 E@2 F@2 G@2 H@2 I J I J I J I J I J I J I J I J B@2 K@2 L@2 M@2 B@2 G@2 H@2 I J I J I J I J I J I J
  I J I J B@2 K@2 L@2 M@2 B@2 G@2 H@2 I J I J I J I J I J I J I J I J I J I J I J I J N@3 ~
>`.pickRestart({
  A: "~@4 [f2,c3,e3,a3]@2 [g2,d3,f3] ~@3 [a2,e3,g3,c4]@6", B: "[[bb2,f3,a3,d4]@15 [bb2,f3,a3,d4]]/2",
  C: "[[a2,e3,g3,c4]@20 [f2,c3,e3,a3]@2 [g2,d3,f3] ~@3 [a2,e3,g3,c4]@6]/2", // Am7 Fmaj7 G7 Am7
  D: "[[bb2,f3,a3,d4]@29 ~ [bb2,f3,a3,d4] ~]/2", // Bbmaj7
  E: "[[a2,e3,g3,c4]@20 [f2,c3,e3,a3]@2 [g2,d3,f3,bb3] ~@3 [a2,e3,g3,c4]@6]/2", F: "[bb2,f3,a3,d4]/2",
  G: "[c3,bb3,f4]/2", H: "[[bb3,f4]@24 ~ c4@7, c3]/2", I: "[f2,c3] [f2,e3]", J: "[g2,d3] c3",
  K: "[[a2,e3,g3,c4]@7 [d2,a2,f3,c4]@9]/2", L: "[[bb2,f3,a3,d4]@7 [bb2,f3,a3,d4]@8 [bb2,f3,a3,d4]]/2",
  M: "[[a2,e3,g3,c4]@14 [a2,f3,c4]@17 ~, ~@7 d2@7 ~@2]/2", N: "[[f2,c3]@11 ~]/3",
})).s("gm_string_ensemble_1").gain(0.19)

// chords · string ensemble 1 · "Hi Str"
const string_ensemble_1_2 = note(`<
  ~@4 A B@2 C D B@2 C D B@2 E@2 F@2 G@2 H@2 I@2 J@2 G@2 H@2 I@2 J@2 K@2 L M K@2 L M K@2 E@2 F@2 G@2 H@2 I@2 J@2 G@2 H@2
  I@2 J@2 K@2 L M K@2 L M K@2 E@2 F@2 G@2 H@2 I@2 J@2 G@2 H@2 I@2 J@2 G@2 H@2 I@2 J@2 N@3 ~
>`.pickRestart({
  A: "~@12 d5 e5 f5 g5", B: "[[c5,a5]@10 [a4,c5]@2 [bb4,d5] [bb4,b4,g5,ab5] [c5,a5]@10 f5@2 g5@6]/2",
  C: "[e4,c5]@10 a4 bb4 c5 d5 a4 bb4", D: "c5@12 [f4,d5] [g4,e5] [a4,f5] [bb4,g5]", E: "c5/2",
  F: "[c6@12 c5 d5 f5 g5]/2",
  G: "[[c5,a5]@3 [a4,f5] ~@2 [a4,c5]@18 [a4,f5] ~ [a4,f5] [bb4,g5] ~ [a4,f5] [f4,d5] [bb4,b4,g5,ab5]]/2", // F Dm Am Dm Eb Dm
  H: "[[c5,a5]@12 [a4,f5] [bb4,g5] [c5,a5] [d5,bb5]]/2", I: "[[c5,a5]@3 [a4,f5] ~@2 [a4,c5]@17 ~ f5!5 ~ c5 f5]/2",
  J: "[~ f5!2 ~@3 [c5,a5]@18 [c4,c5]@2 [d4,d5]@2 [f4,f5]@2 [g4,g5] ~]/2", // F C D F G
  K: "[[c5,a5]@9 ~ [a4,c5]@2 [bb4,d5] [bb4,b4,g5,ab5] [c5,a5]@10 f5@2 g5@6]/2", // F Am Bb F
  L: "[e4,c5]@9 [g5,ab5,bb5,b5] [a5,c6]@5 [g5,ab5,bb5,b5]", // C Am
  M: "[f5,a5]@8 [f4,d5]@2 [g4,e5]@2 [a4,f5]@2 [f4,d5] [bb4,b4,g5,ab5]", N: "[f5@11 ~]/3",
})).s("gm_string_ensemble_1").gain(0.19)

// chords · electric guitar jazz · "Jz Gtr"
const electric_guitar_jazz = note(`<
  ~ A B C D A B C D A B C D A B E@2 F G H I J K L M N O P I J K L M N O Q R S T U V W X Q R E@2 F G H I J K L M N O P I
  J K L M N O Q R S T U V W X Q R E@2 F G H I J K L M N O Y I J K L M N O Y I J K L M N O ~@4
>`.pickRestart({
  A: "[d5,f5]@3 ~@9 [a4,d5]@3 ~", B: "~@14 [f4,a4,d5] ~", C: "[e4,g4,c5] ~@5 [e4,g4] ~@5 [c4,e4] ~@3",
  D: "~@4 c4 ~@5 c4 ~@5", E: "c5!2 ~ c5 ~@2 c5!2 ~ c5 ~@2 c5!2 ~@2", F: "c6!16",
  G: "c6!7 [bb5,b5] a5 [g5,ab5,b5] [gb5,a5,bb5] [e5,f5,ab5] [eb5,gb5,g5,bb5,b5] [db5,d5,f5,a5] [c5,eb5,e5,g5,ab5] [bb4,b4,d5,gb5]", // Bmaj7 G Gb E Bmaj7 Dm Abmaj7 Bm
  H: "[a4,c5,db5,e5,f5] [ab4,b4,eb5] [a4,bb4,db5,d5] [c4,ab4,c5] [bb4,b4] [c4,a4] [d4,ab4] ~ c4 ~@5 [a4,c5] ~", // Fmaj7 Abm Dmaj7 Fm Bmaj7 F Ddim Am
  I: "[f4,a4] ~@15", J: "~@3 c4 ~ c4 d4 ~ c4 ~@5 [c5,e5] ~", K: "[a4,c5] ~@15", L: "~@10 a3 c4 ~ c4 d4 ~", M: "c4 ~@15",
  N: "~@14 [c5,e5] ~", O: "[a4,c5] ~@9 f4 ~@2 f4 ~@2", P: "~@3 c4 ~ c4 d4 ~ c4 ~@5 [a4,c5] ~",
  Q: "~@3 [f5,a5] ~@2 [d5,f5] ~", R: "~@6 [a4,d5]@2 [g4,c5]@2 [a4,d5] ~@5", S: "~@7 [a5,c6]",
  T: "[a5,c6] ~ [f5,a5] ~ [f5,a5]@3 ~@7 d5 ~", U: "~@8 [f5,a5]@3 ~@3 [d5,f5]@2", V: "~@3 [g4,c5]@2 ~@3",
  W: "~@6 c5!3 ~ c5 ~ c6@2 f5@2, ~@3 a5", X: "~@12 c5@2 d5 ~",
  Y: "[a4,c5,e5] [ab4,b4,eb5] [a4,bb4,db5,d5] [c4,ab4,c5] [bb4,b4] [c4,a4] [d4,ab4] ~ c4 ~@5 [a4,c5] ~", // Am Abm Dmaj7 Fm Bmaj7 F Ddim Am
})).s("gm_electric_guitar_jazz").gain(0.19)

// other · brass section · "Brass"
const brass_section = note("<~@24 A B ~@28 A B ~@28 A B ~@6 A B ~@6 A B ~@5>".pickRestart({
  A: "~@8 [f3,f5]!5 ~ [c3,c5] [f3,f5]", B: "~ [f3,f5]!2 ~@13",
})).s("gm_brass_section").gain(0.28)

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

// drums · snare
const snare = s("sd").struct("<~@14 A B@3 C B@7 D B@7 D B@13 C B@7 D B@7 D B@13 C B@7 D B@7 D B@7 D ~@4>".pickRestart({
  A: "~@11 x!2 ~@3", B: "~ x ~ x", C: "~@4 x ~@3 x!8", D: "~@4 x ~@2 x!6 ~ x!2",
})).gain(0.45)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@6 A ~ B ~ B ~ C ~ D ~ A@2 ~@2 A ~ A ~ A ~ E ~ A ~ A ~ A ~ E ~ A ~ A ~ A ~@3 A ~ A@2 ~@2 A ~ A ~ A ~ E ~ A ~ A ~ A ~
  E ~ A ~ A ~ A ~@3 A ~ A@2 ~@2 A ~ A ~ A ~ E ~ A ~ A ~ A ~ E ~ A ~ A ~ A ~ E ~@4
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~@3 x ~@4", D: "~ x", E: "~ x ~@6",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct(`<
  ~@15 A ~@2 B A ~@7 A ~@7 A ~@9 A ~@2 B A ~@7 A ~@7 A ~@9 A ~@2 B A ~@7 A ~@7 A ~@7 A ~@3
>`.pickRestart({
  A: "x", B: "~ x ~@2",
})).gain(0.45)

// drums · ride
const ride = s("rd").struct("<~ A ~@3 A ~@3 A ~@3 A ~@93>".pickRestart({
  A: "x",
})).gain(0.35)

// drums · cowbell
const cowbell = s("cb").struct("<~@15 [x!4]!88 ~@4>").gain(0.4)

// drums · congas
const congas = s("conga:13").struct("<~@87 [~ x ~@3 x ~@2]!16 ~@4>").gain(1.43)

// drums · congas
const congas_2 = s("conga:18").struct("<~@87 [~@3 x ~@7 x ~@4]!16 ~@4>").gain(1.43)

// drums · congas
const congas_3 = s("conga:33").struct("<~@87 [~@3 x ~@3 x]!16 ~@4>").gain(1.43)

stack(
  piano, bass, epiano2, string_ensemble_1, string_ensemble_1_2, electric_guitar_jazz, brass_section, kick, snare, hihat,
  open_hat, crash, ride, cowbell, congas, congas_2, congas_3
)

More by Barry White