Strudelify

When Can I See You Again

Babyface

KeyE minorTempo88 bpm
0:00/0:00
// When Can I See You Again — Babyface
// 88 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 81 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(88/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 · acoustic guitar nylon · "guitar"
const acoustic_guitar_nylon = note(`<
  ~ A@2 B@2 C@2 D@2 E@2 F@2 G@5 H@2 I@5 J@2 K@2 L@2 M@2 N@2 F@2 O@3 P@8 Q R@2 S@2 T@2 U@2 V@3 W@5 X@3 Y@2 Z@2 AA@2 AB@2
  AC@4 ~
>`.pickRestart({
  A: "[~@6 e3 ~@8 b2, b3@4 ~@3 d4@9, g2@6 ~@2 e2@7 ~@5 a3@8 a3@4, ~@2 a3@6 ~@2 g3@5 ~@3 f#3@4 e4@10, ~@2 d3@5 b2@8 ~]/2",
  B: "[~@3 g2 ~@2 e3 [b2,b3,d4,f#4]@9, b3@8 ~@2 g3@5 ~@17, ~@2 a3@6 e2@7 ~@17, ~@4 d3@11 ~@17]/2", // Bm
  C: "[~@3 g2 ~@2 e3 ~@8 b2, [g2,b3]@7 ~ e2@6 d4@18, ~@2 a3@5 ~@3 g3@4 b2@16 ~@2, ~@4 d3@11 ~@3 f#3@4 e4@10, ~@5 a3@2 a3]/2", // G
  D: "[~@3 g2 ~@2 e3 ~@7 a3 b2, [g2,b3]@7 ~ e2@6 ~@6 a3@8 ~@4, ~@2 a3@5 ~@3 g3@4 ~@4 f#3@8 ~@6, ~@4 d3@10 [b2,d4]@17 ~, ~@22 e4@9 ~]/2", // G Bm
  E: "[~@3 g2 ~@2 e3 ~@8 b2, [g2,b3]@7 ~ e2@6 ~@4 f#3@4 e4@10, ~@2 a3@5 ~@3 g3@4 d4@18, ~@2 d3@5 b2@7 a3@2, ~@10 a3@3 f#3@3]/2", // G
  F: "[~@3 g2 ~@2 e3 ~@7 [b2,a3]@2, [g2,b3]@7 ~ e2@6 ~@4 f#3@4 e4@10, ~@2 a3@5 ~@3 g3@4 d4@18, ~@2 d3@5 b2@6 f#3@3, ~@5 a3@2 ~]/2", // B7 G
  G: "[~@6 e3@2 ~@12 b3@2 ~@6 b3@3 ~@13 c4@2 ~@2 [d3,e4]@32, g4@8 ~@24 a3@4 a3@6 a3@5 ~@33, e3@6 ~@2 [d#3,f#4]@6 [e3,g4]@8 [c#3,g4]@9 a2@15 a2@2 ~@32, ~@2 e4@5 ~@3 d#4@4 ~@4 e4@4 ~@4 e4@6 c4@6 c4@6 ~@3 c4@32 ~, ~@4 b3@8 b3@8 ~@11 e3@3 e3@6 e3@8 ~@32]/5", // Dsus2 D#m Em C#dim
  H: "[~@4 c4@2 c3@2 ~@4 b3@2 ~@10 e3@2 d3 e3 ~@2 d3@2, [c3,e4]@7 ~ [b2,d4]@6 a2@13 ~ [a2,g3]@4, ~@2 g3@8 g3@4 c4@8 c4@5 ~@5, ~@9 e3@3 ~@4, ~@20 a3@7 ~@5]/2", // C Bm A7
  I: "[~@4 c4@2 ~ g3 ~@16 e3@2 d3 e3 ~@8 c4@2 ~@18 e3@2 d3 e3 ~@4 f#3@2 ~@4 f#2@2 f#3@2 ~@4 d#4@2, [c3,e4]@7 ~ [b2,d4]@5 [e3,a3]@6 ~ a3@7 ~@3 d3@2 [c3,e4]@7 g3@2 ~ g3@3 e3@5 e3@6 ~@6 d3@2 ~@8 b2@8, c4@4 ~@2 c3@2 ~@2 g3@4 ~@4 e3@6 ~@4 [a2,g3]@4 c4@4 ~@2 c3@2 [b2,d4]@6 a2@13 ~ [a2,g3]@4 f#2@6 ~@4 f#3@5 ~, ~@2 g3@5 ~ b3@4 b3@2 c4@8 c4@5 ~@4 g3@3 g3@5 b3@4 ~ b3@2 c4@8 c4@5 ~@4 b3@4 ~ b3@8 b3@4, ~@46 a3@6 a3@7 ~@7 f#3@6 d#4@6 ~@2]/5", // C Bm A5 C A7 Bm A7
  J: "[~@14 e4@17 [e3,a3], e3@3 b3@3 g3@2 c#3@24, ~@2 g3@2 d3@3 b3@5 b3@20, ~@5 g3@11]/2", // A5
  K: "[~@2 e3 [d3,c4,e4]@13, [a2,c4]@3 ~@13, ~ a3@2 ~@13]/2", // C Am
  L: "[~@3 g2 ~@2 e3 ~@7 a3@2, [g2,b3]@7 ~ e2@6 ~@4 f#3@4 e4@10, ~@2 a3@5 ~@3 g3@4 d4@18, ~@2 d3@5 b2@8 ~, ~@10 a3@3 f#3@3]/2", // G
  M: "[~@3 g2 ~@2 e3 ~@8 b2, [g2,b3]@7 ~ e2@6 ~@4 f#3@4 e4@10, ~@2 a3@5 ~@3 g3@4 d4@18, ~@2 d3@5 b2@8 ~, ~@5 a3@2 a3]/2", // G
  N: "[~@3 g2 ~@2 e3 ~@7 a3 b2, b3@7 ~@3 g3@4 ~@4 f#3@8 f#3@5 ~, ~@2 a3@5 ~ e2@6 ~@6 a3@8 ~@4, ~@4 d3@10 [b2,d4]@17 ~, ~@22 e4@9 ~]/2", // Bm
  O: "[~@6 e3@2 ~@4 b3@2 ~@6 b3@2 ~@6 b3@3 a3 ~@14 a2@2, [e3,g4]@7 ~ [d#3,f#4]@6 [e3,g4]@8 [c#3,g4]@9 e3@2 ~ e3@6 e3@8, ~@2 e4@5 ~@3 d#4@4 ~@4 e4@4 ~@4 e4@6 c4@6 c4@6 c4@4, ~@4 b3@4 ~@23 a2@15 ~@2, ~@36 a3@6 a3@5 ~]/3", // Em D#m Em C#dim
  P: "[[c4,e4]@31 ~@5 c4@2 ~@16 c4@4 d3 e3 ~@8 c4@2 ~@18 e3@2 d3 e3 ~@8 c4@2 ~ g3 ~@16 e3@2 d3 e3 ~@2 d3@2, ~@31 c3@7 c3@2 [b2,d4]@6 a2@13 ~ [a2,g3]@4 ~@6 c3@2 [b2,d4]@7 ~@13 [a2,g3]@4 ~@6 c3@2 [b2,d4]@6 a2@13 ~ [a2,g3]@4, ~@31 c4@5 ~@6 g3@4 a3@6 a3@7 ~@4 g3@3 g3@5 g3@2 ~ g3@4 a3@6 a3@7 ~@4 g3@3 g3@5 ~@3 g3@4 a3@6 a3@7 ~@5, ~@31 g3@2 ~ g3@5 [g3,b3]@4 ~ b3@2 c4@8 ~@10 c4@4 ~@3 b3@4 ~ b3@2 c4@8 c4@5 ~@5 c4@4 ~@3 b3@4 ~ b3@2 c4@8 c4@5 ~@5, ~@32 e4@8 ~@5 e3@5 e3@9 ~@3 d3@2 [c3,e4]@7 ~@6 e3@5 e3@6 ~@6 d3@2 [c3,e4]@7 ~@6 e3@5 e3@6 ~@8]/8", // C Bm A7 Bm A7 Bm A7 G …
  Q: "~@4 b3@2 ~ f#3 ~@4 b3@3 ~, e4@7 b3@4 ~@5, b3@4 ~@2 f#2@2 ~@2 f#3@5 ~, ~@2 f#3@5 ~ d#4@6 ~@2",
  R: "[~@2 g3 ~ d3@2 g3 ~@7 e4@17 a3, e3@3 b3@4 b3@5 b3@20, ~ c#3@3, ~@5 g3@11]/2",
  S: "[~ a3 ~ [d3,c4,e4]@13, [a2,c4]@5 a3@26 ~, ~@2 e3 ~@13]/2", // C Am
  T: "[~@3 g2 ~@2 e3 ~@8 b2, [g2,b3]@7 ~ e2@6 ~@6 a3@8 a3@4, ~@2 a3@5 ~@3 g3@4 d4@18, ~@2 d3@5 ~@2 f#3@4 f#3@3, ~@11 e4@5]/2", // G
  U: "[~@3 g2 ~@2 e3 ~@7 [b2,a3]@2, [g2,b3]@7 ~ e2@6 d4@18, ~@2 a3@5 ~@3 g3@4 b2@12 f#3@6, ~@4 d3@11 ~@3 f#3@4 e4@10, ~@5 a3@2 ~]/2", // B7 G
  V: "[~@6 e3@2 ~@12 b3@2 ~@6 b3@3 ~@13 c4@4, [e3,g4]@7 ~ [d#3,f#4]@6 [e3,g4]@8 [c#3,g4]@9 [e3,a3]@2 ~ e3@6 e3@8, ~@2 e4@5 ~@3 d#4@4 ~@4 e4@4 ~@4 e4@5 ~ c4@6 c4@6 ~@4, ~ b3 ~ b3@2 ~@3 a2@4, ~@36 a3@6 a3@5 ~]/3", // Em D#m Em C#dim A5
  W: "[[c4,e4]@14 ~ c4 ~@4 c4@2 ~@18 e3@2 d3 e3 ~@2 d3 ~@8 g3 ~@4 b3@2 e3@4 ~@6 e3@2 d3 e3 ~@2 d3 ~, ~@14 g3@2 ~@6 c3@2 [b2,d4]@5 [e3,a3]@5 e3@6 ~@7 c3@7 c3@2 [b2,d4]@6 ~@4 e3@6 ~@8, ~@15 [c3,e4]@8 b3@4 ~ b3@2 c4@8 c4@5 ~@5 c4@4 c4@4 b3@4 ~@2 c4@8 c4@5 ~@5, ~@23 g3@2 ~ g3@4 a2@13 ~ [a2,g3]@4 ~@14 a2@13 ~ [a2,g3]@4, ~@36 a3@7 ~@4 g3@3 g3@5 ~@3 g3@4 a3@6 a3@7 ~@5]/5", // C Bm A5 Bm C A7
  X: "[g3@2 ~@2 c4@2 ~@18 e3@2 d3 e3 ~@8 b3@2 ~@6 b3@4, [c3,e4]@6 c3@2 [b2,d4]@5 e3@5 e3@6 ~@6 d3@2 ~@6 f#2@2 ~@2 f#3@6, ~@2 g3@5 b3@5 b3@2 c4@8 c4@5 ~@4 b3@4 ~@5 d#4@6 ~@2, ~@7 g3@3 g3@4 a2@13 ~ [a2,g3]@4 [f#2,e4]@7 b2@9, ~@14 a3@6 a3@7 ~@7 f#3@5 [f#3,b3]@4 ~@5]/3", // C Bm A7 F#7 B5
  Y: "[~@2 g3 ~@11 e4@17 e3, e3@3 b3@3 g3@2 c#3@24, ~@4 d3@3 b3@5 b3@20, ~@5 g3@11]/2",
  Z: "[a3 ~@3 e3@2 [d3,c4,e4]@26, [a2,c4]@3 ~@13, ~ a3@2 ~@13]/2", // C Am
  AA: "[~@3 g2 ~@2 e3 ~@8 b2, [g2,b3]@7 ~ e2@6 ~@6 a3@8 a3@4, ~@2 a3@5 ~@3 g3@4 ~@4 f#3@8 ~@6, ~@4 d3@10 [b2,d4]@17 ~, ~@22 e4@9 ~]/2", // G Bm
  AB: "[~@3 g2 ~@2 e3 d4@2 ~@4 f#3 ~ b2, [g2,b3]@7 ~ e2@6 ~@6 a3@7 ~ a3@4, ~@2 a3@5 ~@3 g3@4 ~@4 f#3@4 e4@8 ~@2, ~@2 d3@5 b2@7 ~@2]/2", // G
  AC: "[~@6 g2@2 ~@4 e3@2 ~@14 a3@3 g2 [g2,b2,d3,b3,d4,f#4]@32, [g2,b3]@7 ~ e2@6 [b2,d4]@18 ~@32, ~@2 a3@5 ~@3 g3@5 ~@3 f#3@8 f#3@6 ~@32, ~@4 d3@11 ~@5 a3@8 ~@3 g3@33, ~@11 e4@5 ~@16]/4", // Gmaj7 G Bm
})).s("gm_acoustic_guitar_nylon").gain(0.36)

// chords · acoustic guitar nylon · "guitar" · soft notes
const acoustic_guitar_nylon_2 = note(`<
  ~ A B C@2 ~ B ~ D ~@6 E@3 ~@2 F@2 ~@2 G ~@2 H@2 ~ I ~ B J ~@4 K L@3 ~@2 F@2 ~@2 M ~ N O@2 P@2 ~@4 Q@2 R ~ S ~ T ~ U
  ~@2 H@2 ~ B ~@7
>`.pickRestart({
  A: "~@3 g2 ~@4", B: "~@5 f#3@3", C: "[g2@3 ~@4 a3@9]/2", D: "~@10 f#3@5 ~", E: "[~@15 [f#3,a3]@32 ~]/3",
  F: "[~@14 a2@13 ~@5]/2", G: "e4 ~", H: "[~@3 [f#3,a3]@13]/2", I: "~@7 b2", J: "g2@7 ~@9", K: "b3 ~@3",
  L: "[~ d3@2, ~@15 [f#3,a3]@32 ~]/3", M: "f#2@3 ~@4 d#4, ~ b2", N: "~@15 e3", O: "[~@3 f#3@13]/2", P: "[~@7 b2@8 ~]/2",
  Q: "[~@16 d3@15 ~, ~@15 [f#3,a3]@16 ~]/2", R: "~@2 g3@5 ~@9", S: "e4@7 ~@9", T: "c4 ~@3", U: "f#3 ~@6 d#4",
})).s("gm_acoustic_guitar_nylon").gain(0.18)

// drums · tambourine
const tambourine = s("tb").struct("<~@13 A@3 ~@2 A@10 ~ A@11 ~@2 A@8 ~ A ~ A@7 ~ A@18 ~@2>".pickRestart({
  A: "x!8",
})).gain(0.64)

// drums · bongos
const bongos = s("bongo:4").struct("<~@18 A@10 ~ A@8 ~@5 A@10 ~ A@26 ~@2>".pickRestart({
  A: "~ x ~@2",
})).gain(1.89)

// drums · congas
const congas = s("conga:13").struct("<A ~@17 B@10 ~ B@8 ~@4 A B@10 ~ B@26 ~@2>".pickRestart({
  A: "~@3 x", B: "~@5 x ~@2",
})).gain(2.05)

// drums · congas
const congas_2 = s("conga:33").struct("<~@18 A@10 ~ A@8 ~@4 B A@10 ~ A@26 ~@2>".pickRestart({
  A: "~@6 x!2", B: "~@3 x",
})).gain(2.05)

// drums · whistle
const whistle = s("ballwhistle:1").struct("<~@41 [~@4 x!3 ~] ~@39>").gain(0.52)

stack(acoustic_guitar_nylon, acoustic_guitar_nylon_2, tambourine, bongos, congas, congas_2, whistle)

More by Babyface