Strudelify
Feel Like Makin' Love cover art

1974 · Feel Like Makin' Love

Feel Like Makin' Love

Roberta Flack

KeyE♭ majorTempo95 bpm
0:00/0:00
// Feel Like Makin' Love — Roberta Flack
// 95 bpm, 4/4, key Eb major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(95/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 · acoustic bass · "Bass / Acoust."
const bass = note(`<
  ~@2 A B C D E F G H I J K L M N C D A B C D O P G H I J K L Q N C D A B C D O R G H I J K L M S C D A B C D O P G H I
  J K L M N C D A B C D O F G H I J K L M N C D A B C D O R G H I J K L M N C D A B C T U V
>`.pickRestart({
  A: "eb2@3 bb1 bb1@3 db2", B: "db2@6 c2@2 c2@3 ~ c2@3 ~", C: "f2@3 c2 c2@3 bb1", D: "bb1@3 f2 f2@3 eb2",
  E: "eb2@6 bb1 ~ bb1@6 a1@2", F: "a1@3 e2 e2@3 ab2", G: "ab2@3 eb2 eb2@3 g2", H: "g2@3 d2 d2@3 f2",
  I: "f2@3 c2 c2@3 c2", J: "c2@3 g2 g2@3 ab2", K: "ab2@3 eb2 eb2@3 ab2", L: "ab2@3 eb2 eb2@3 db2",
  M: "db2@3 ab1 ab1@3 c2", N: "c2@6 g2@2 c2@3 ~ c2@3 ~", O: "eb2@3 bb1 bb1@3 a1", P: "a1@3 e2 e1 gb1@2 g1",
  Q: "db2@6 ab1 ~ ab1@6 c2@2", R: "a1@6 e2@2 a1@3 ~ a1@3 ~", S: "c2@3 g2 g2@3 f2", T: "bb1@3 f2 f2@3 f2",
  U: "eb2@3 bb2 bb2@3 eb2", V: "eb2@3 ~ bb2@3 ~ eb2@3 ~@5",
})).s("gm_acoustic_bass").gain(0.36)

// chords · epiano1 · "Piano / Rhodes"
const epiano1 = note(`<
  ~@2 A B C D E F G H C I G@2 J K C D A B C L M F G H C I G@2 N K C D A B C D A F G H C I G@2 J K C D A B C D A F G H C
  I G@2 J K C D M B C L M F G H C I G@2 J K C D A B C D A F G H C I G@2 J K C D A B C D O P
>`.pickRestart({
  A: "~@3 bb2 ~ [bb3,d4,f4,g4]@2 [eb2,bb3,d4,f4,g4], eb2@3 ~ bb2@3 ~, ~ [bb3,d4,f4,g4]@4 ~@3", // Gm7 Ebmaj7 Gm7
  B: "~@3 ab2 [bb3,db4,e4,ab4] [bb3,db4,e4,ab4]@2 [c2,bb3,db4,e4,ab4], db2@3 ~ c2@3 ~, ~ [b3,eb4,f4,ab4]@3 ~@4", // Bbm7b5 Fm7b5
  C: "~@3 c3 ~ [c4,eb4,f4,ab4]@2 [f2,c4,eb4,f4,ab4], f2@3 ~ c3@3 ~, ~ [c4,eb4,f4,ab4]@4 ~@3", // Fm7
  D: "~@3 f2 ~ [eb4,f4,ab4,c5]@2 [bb1,eb4,f4,ab4,c5], bb1@3 ~ f2@3 ~, ~ [eb4,f4,ab4,c5]@4 ~@3", // Fm7
  E: "~@6 bb2 ~@3 [bb3,d4,f4,g4]@4 [eb2,bb3,d4,f4,g4]@2, eb2@3 ~ bb2@3 ~, ~ [bb3,d4,f4,g4]@4 ~@3", // Gm7 Ebmaj7 Gm7
  F: "~@3 e2 ~ [db4,e4,g4,b4]@2 [a2,db4,e4,g4,b4], a2@3 ~ e2@3 ~, ~ [db4,e4,g4,b4]@4 ~@3", // Dbm7b5 A7 Dbm7b5
  G: "~@3 eb2 ~ [c4,eb4,g4,bb4]@2 [ab2,c4,eb4,g4,bb4], ab2@3 ~ eb2@3 ~, ~ [c4,eb4,g4,bb4]@4 ~@3", // Cm7 Abmaj7 Cm7
  H: "~@3 d2 ~ [bb3,d4,f4,g4]@2 [g2,bb3,d4,f4,g4], g2@3 ~ d2@3 ~, ~ [bb3,d4,f4,g4]@4 ~@3", // Gm7
  I: "~@3 g2 ~ [bb3,c4,eb4,g4]@2 [c2,bb3,c4,eb4,g4], c2@3 ~ g2@3 ~, ~ [bb3,c4,eb4,g4]@4 ~@3", // Cm7
  J: "~@3 ab2 ~ [b3,eb4,f4,ab4]@2 [db2,b3,eb4,f4,ab4], db2@3 ~ ab2@3 ~, ~ [b3,eb4,f4,ab4]@4 ~@3", // Fm7b5 Db7 Fm7b5
  K: "~@3 g2 ~ [bb3,db4,e4,ab4]@2 [c2,bb3,db4,e4,ab4], c2@3 ~ g2@3 ~, ~ [bb3,db4,e4,ab4]@4 ~@3", // Bbm7b5
  L: "~@3 f2 ~ [ab3,c4,eb4,f4]@2 [bb1,ab3,c4,eb4,f4], bb1@3 ~ f2@3 ~, ~ [ab3,c4,eb4,f4]@4 ~@3", // Fm7
  M: "~@3 bb2 ~ [d4,f4,g4,bb4]@2 [eb2,d4,f4,g4,bb4], eb2@3 ~ bb2@3 ~, ~ [d4,f4,g4,bb4]@4 ~@3", // Gm7 Ebmaj7 Gm7
  N: "~@6 ab2 ~@3 [b3,eb4,f4,ab4]@4 [db2,b3,eb4,f4,ab4]@2, db2@3 ~ ab2@3 ~, ~ [b3,eb4,f4,ab4]@4 ~@3", // Fm7b5 Db7 Fm7b5
  O: "~@3 bb1 ~ [bb3,d4,f4,g4]@2 [eb2,bb3,d4,f4,g4], eb2@3 ~ bb1@3 ~, ~ [bb3,d4,f4,g4]@4 ~@3", // Gm7 Ebmaj7 Gm7
  P: "~@3 [bb3,d4,f4,g4]!2 ~@3, eb2 bb1 eb2 ~, ~ [bb3,d4,f4,g4]@2 ~@5", // Gm7
})).s("gm_epiano1").gain(0.27).pan(0.4)

// other · vibraphone · "Vibes"
const vibraphone = note(`<
  ~@8 A B C D E F G H ~@8 I J K L M N O P Q R S T U R V W X Y Z AA AB AC AD AE AF R AG AH Z AI AJ AK E AL C AM AN@2 O AO
  ~@8 E AP AQ AR I E AS P ~@8 X AT Z L I E AU AV ~@6 S AW
>`.pickRestart({
  A: "[eb4,g4]@2 ab3@2 c5@2 eb4 [eb4,g4] g4 [eb4,g4] c4@4 eb4@2", B: "[d4,f4] g3 bb3 g4@2 bb3 d4 d5",
  C: "f4@2 c5 eb5 [c5,eb5] c5 [c5,eb5]!2 eb5 c5 [c5,eb5] eb5 c6@2 f5@2, ~@12 c5 ~@3", // Cm
  D: "c4 eb4@2 [g4,bb4]@2 eb4 g4 bb4", E: "[eb4,g4] ab3 c4 bb4@2 c4 eb4 eb5", F: "bb4 [eb4,g4]@2 ab3 g4 eb4 ab3@2",
  G: "[ab4,b4]@2 eb4@2 f5@2 ab4 [ab4,b4] b4 [ab4,b4] f4@4 ab4@2", H: "[g4,bb4] db4 e4 db5@2 e4 g4 g5",
  I: "ab3@2 eb4 g4 [eb4,g4] eb4 [c5,eb5]@4 g4@2 eb4@2 c4@2, bb4 ~@5 g4 ~@9", // Eb Cm
  J: "[d4,f4]@2 g3@2 bb4@2 d4 [d4,f4] f4 [d4,f4] bb3@4 d4@2", // Dm
  K: "f4@2 ab4@4 c5 eb5 [c5,eb5] c5 [c5,eb5] eb5 [c5,eb5] c5 ab5@2, ~@14 eb5 ~", // Cm
  L: "c4@2 eb4@4 g4 bb4 [g4,bb4] g4 [g4,bb4] bb4 [g4,bb4] g4 eb5@2, ~@14 bb4 ~", // Gm
  M: "[bb4,eb5] c5@2 eb4@2 ab3@2 [eb4,g4], g4 ~@15", // Eb5 Eb
  N: "ab3@2 eb4 g4 [eb4,g4] eb4 [eb4,g4]!2 g4 eb4 [eb4,g4] g4 eb5@2 bb4@2, ~@12 eb4 ~@3", // Eb
  O: "eb4@2 f4@4 ab4 b4 [ab4,b4] ab4 [ab4,b4] b4 [ab4,b4] ab4 f5@2, ~@14 b4 ~", // Abm
  P: "[g4,bb4]@2 db4@2 e5@2 g4 [g4,bb4] bb4 [g4,bb4] e4@4 g4@2", Q: "f5 [c5,eb5]@2 f4 eb5 c5 f4@2, c6 ~@15",
  R: "[f4,ab4] c4 eb4 c5@2 eb4 f4 f5", S: "[bb4,d5] eb4 g4 f5@2 g4 bb4 bb5",
  T: "eb4@2 ab4 b4 [ab4,b4] ab4 [f5,ab5]@2 db5@2 [g4,bb4]@4 db4@2, eb5 ~@5 b4 ~ g5 ~@7", // Abm Fm Gm
  U: "[c5,eb5] f4@2 ab4@2 c6@2 f5", V: "f5 g4 bb4 d5@2 eb4 g4 bb4",
  W: "b3@2 e4 g4 [e4,g4] e4 [db5,e5]@4 g4@2 e4@2 db4@2, b4 ~@5 g4 ~@9", X: "bb4 c4 eb4 g4@2 ab3 c4 eb4",
  Y: "g3@2 d4 f4 [d4,f4] d4 [bb4,d5]@4 f4@2 d4@2 bb3@2, g4 ~@5 f4 ~@9", // Dm Bb
  Z: "f4@2 c5 eb5 [c5,eb5] c5 [ab5,c6]@4 eb5@2 c5@2 ab4@2, f5 ~@5 eb5 ~@9", AA: "c5 [g4,bb4]@2 c4 bb4 g4 c4@2, g5 ~@15",
  AB: "ab3@2 c4@4 eb4 g4 [eb4,g4] eb4 [eb4,g4] g4 [eb4,g4] eb4 c5@2, ~@14 g4 ~", AC: "[eb4,g4] ab3@2 c4@2 eb5@2 bb4",
  AD: "[eb5,ab5] f5@2 ab4@2 eb4@2 [ab4,b4], b4 ~@15", AE: "db5 [g4,bb4]@2 db4 bb4 g4 db4@2, g5 ~@15",
  AF: "[c5,eb5]@2 f4@2 ab5@2 c5 [c5,eb5] eb5 [c5,eb5] ab4@4 c5@2", AG: "[f5,bb5] g5@2 bb4@2 eb4@2 [bb4,d5], d5 ~@15",
  AH: "eb5@2 f4@2 ab4@2 b4@2 db4@2 g4 bb4 [g4,bb4] g4 [e5,g5]@2, ~@8 db5 ~@5 bb4 ~", // Gm Em
  AI: "c4@2 f4 ab4 [f4,ab4] f4 [f4,ab4]!2 ab4 f4 [f4,ab4] ab4 f5@2 c5@2, ~@12 f4 ~@3", // Fm
  AJ: "[bb4,d5]@2 eb4@2 g5@2 bb4 [bb4,d5] d5 [bb4,d5] g4@4 bb4@2", // Bb
  AK: "[e4,g4]@2 b3@2 db5@2 e4 [e4,g4] g4 [e4,g4] db4@4 e4@2", AL: "[g4,d5] bb4@2 d4@2 g3@2 [d4,f4], f4 ~@15",
  AM: "c5 eb4 g4 bb4@2 c4 eb4 g4",
  AN: "[ab3@2 eb4 g4 [eb4,g4] eb4 [eb4,g4]!2 g4 eb4 [eb4,g4] g4 eb5@2 bb4@4 c4@2 eb4@2 g4@4 ab3@2 c4@2 eb4@2, ~@12 eb4 ~@19]/2", // Eb
  AO: "db4@2 g4 bb4 [g4,bb4] g4 [g4,bb4]!2 bb4 g4 [g4,bb4] bb4 g5@2 db5@2, ~@12 g4 ~@3", // Gm
  AP: "g3 bb3@2 [d4,f4]@2 bb3 d4 f4", AQ: "[f5,c6] ab5@2 c5@2 f4@2 [c5,eb5], eb5 ~@15",
  AR: "[g4,bb4]@2 c4@2 eb5@2 g4 [g4,bb4] bb4 [g4,bb4] eb4@4 g4@2", // Gm
  AS: "eb4@2 ab4 b4 [ab4,b4] ab4 [ab4,b4]!2 b4 ab4 [ab4,b4] b4 ab5@2 eb5@2, ~@12 ab4 ~@3", // Abm
  AT: "g4 bb3 d4 f4@2 g3 bb3 d4", AU: "eb4 f4@2 [ab4,b4]@2 f4 ab4 b4",
  AV: "db4@2 e4@4 g4 bb4 [g4,bb4] g4 [g4,bb4] bb4 [g4,bb4] g4 e5@2, ~@14 bb4 ~", // Gm
  AW: "bb4 [bb4,d5] d5 [bb4,d5] bb4 [bb4,d5] d5 bb4 [eb4,bb4]@3 ~@5, ~@8 d5 ~@7", // Bb Eb5
})).s("gm_vibraphone").gain(0.09).pan(0.6)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@6 A ~ A@3 ~ A ~ A ~ A ~@3 A ~ A ~@2 A@2 ~ A ~ A ~ A ~@2 A@3 ~@2 A ~ A ~@3 A ~ A ~ A ~ A ~@4 A@2 ~@2 A ~@2 A ~ A ~@3
  A ~ A@2 ~@6 A ~ A ~ A ~ A ~@4 A@2 ~ A ~ A ~@3 A ~@3
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(0.22)

// drums · snare
const snare = s("sd").struct(`<
  A@3 B A@7 B A@11 C A@7 C A@15 D A@7 E A@11 B A@3 C A@7 D A@3 B A@3 B A@15 F
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@4 x ~@5 x!3 ~@3", D: "~@2 x!3 ~@7 x ~@3", E: "~@4 x ~@5 x!3 ~ x ~",
  F: "~@2 x!3 ~ x ~ x ~@7",
})).gain(0.36)

// drums · low tom
const low_tom = s("lt").struct("<~@15 A ~@23 A ~@23 A ~@23 A ~@7 A ~@5 B ~@2>".pickRestart({
  A: "~@7 x", B: "~ x ~@2",
})).gain(0.32)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 A ~@7 B ~@23 C ~@7 C ~@15 B ~@15 C ~@7 B ~@7 B ~@5 D ~@2>".pickRestart({
  A: "~@10 x!3 ~ x ~", B: "~@3 x ~ x ~@2", C: "~@10 x!3 ~@3", D: "~@7 x",
})).gain(0.29)

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

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@7 A ~@7 A ~@7 B ~@7 B ~@7 A ~@7 C ~@15 A ~@7 B ~@7 C ~@7 A ~@7 A ~@5 D ~@2
>`.pickRestart({
  A: "~@2 x!3 ~@11", B: "~@7 x", C: "~@6 x!3 ~@7", D: "~@8 x!5 ~@3",
})).gain(0.25)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@7 A ~@19 A ~@15 A ~@55 A ~ A ~@2>".pickRestart({
  A: "~@7 x",
})).gain(0.11)

// drums · crash
const crash = s("cr").struct("<~@8 A ~@7 A ~@30 A ~@24 A ~@6 A@2 ~@7 A ~@15>".pickRestart({
  A: "x",
})).gain(0.22)

// drums · ride
const ride = s("rd").struct("<~@8 A B@7 ~@8 B@23 A B@16 C ~@7 A B@6 A ~@8 A B@7 ~@6 B D>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x", D: "x!5 ~@3",
})).gain(0.14)

// drums · congas
const congas = s("conga:13").struct(`<
  A@6 B A C D E D C D F D A G H I G A@2 J D@2 F D@3 F K F D@2 L D F D@4 M F D C D M L N D L C O F P D@2 C D C@2 D C A@8
  F L D@2 L F D C A@8 Q D@2 C@2 L D@2 A@2 I A@3 C R
>`.pickRestart({
  A: "~ x ~@2", B: "~ x!3 ~@4", C: "x ~ x!3 ~ x ~@3 x ~@5", D: "x ~ x!3 ~@5 x ~@5", E: "x ~ x!2 ~@4 x ~ x ~@5",
  F: "x ~ x!3 ~@3 x ~ x ~@5", G: "~@2 x!2 ~@4", H: "~@2 x!2 ~@2 x ~", I: "~ x ~ x", J: "x!5 ~@11",
  K: "x!5 ~ x ~@3 x ~@5", L: "x!3 ~@2 x ~@2", M: "x ~ x!3 ~ x ~ x ~ x ~@5", N: "x!2 ~@3 x ~@2", O: "x ~ x!2 ~@6 x ~@5",
  P: "x!4 ~@4 x ~ x ~@5", Q: "x!3 ~ x!2 ~@2", R: "x ~ x!3 ~ x ~@9",
})).gain(0.69)

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

stack(
  bass, epiano1, vibraphone, kick, kick_soft, snare, low_tom, hihat, mid_tom, open_hat, high_tom, high_tom_soft, crash,
  ride, congas, congas_2
)

More by Roberta Flack