Strudelify

Your Love Is King

Sade

KeyA majorTempo90 bpm
0:00/0:00
// Your Love Is King — Sade
// 90 bpm, 4/4, key A 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 85 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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 · "ACOU BASS"
const bass = note(`<
  ~ A B C@2 D@2 E@2 F B G@3 H I@5 B A B F J K@4 L@2 B A B F H A B A B F M F H N@4 O@8 P@5 Q@3 R S T U V@2 W@2 R S R S R
  X Y@2 R S Z AA AB
>`.pickRestart({
  A: "~ a1@9 ~ a1 ~@7 a1@2 b1@2 c#2", B: "~ d2@9 ~ d2 ~@7 d2@2 c#2 ~ b1",
  C: "[~ a1@9 ~ a1 ~@7 a1@2 b1@2 c#2@2 d2@9 ~ d2 ~@7 d2@2 c#2 ~ b1]/2",
  D: "[~ a1@10 a1 ~@7 a1 ~ b1@2 c#2@2 d2@10 d2 ~@7 d2@2 c#2 ~ b1]/2",
  E: "[~ a1@10 a1@2 ~@6 a1@2 b1 ~ c#2@2 d2@9 ~ d2 ~@7 a1@2 e1@2 f#1]/2", F: "~ a1@9 ~ a1 ~@7 a1@2 b1 ~ c#2",
  G: "[~ a1@9 ~ a1 ~@7 a1@2 b1@2 c#2@2 d2@9 ~ d2 ~@7 d2@2 c#2 ~ b1@2 a1@9 ~ a1 ~@7 a1@2 b1@2 c#2]/3",
  H: "~ d2@9 ~ d2 ~@7 d2@2 c#2 ~ a1",
  I: "[~ b1@6 b2@4 c#2@7 ~ g#2@4 c#2@2 d2@6 a2@4 c#2@7 ~ g#2@2 c#2@2 c2@2 b1@6 f#2@4 c#2@7 ~ g#2@4 c#2@2 d2@18 a1@2 e1@2 f#1@2 a1@9 ~ a1 ~@7 a1@2 b1@2 c#2]/5",
  J: "~ d2@9 ~ d2 ~@7 d2@2 c#2@2 a1",
  K: "[~ b1@6 b2@4 c#2@7 ~ g#2@4 c#2@2 d2@6 a2@4 c#2@8 g#2@2 c#2@2 c2@2 b1@6 f#2@4 c#2@7 ~ g#2@4 c#2@2 d2@18 ~@5]/4",
  L: "[~@19 e2@2 c#2@2 b1@2 a1@9 ~ a1 ~@7 a1@2 b1 ~ c#2]/2", M: "~ d2@9 ~ d2 ~@7 d2 ~ c#2 ~ b1",
  N: "[~ b1@6 b2@4 c#2@7 ~ g#2@4 c#2@2 d2@5 ~ a2@4 c#2@8 g#2@2 c#2@2 c2@2 b1@5 ~ f#2@4 c#2@7 ~ g#2@4 c#2@2 d2@18 ~@5]/4",
  O: "[~@17 e2@2 c#2@2 b1@2 a1@2 a1@6 b1@6 c#2@6 e2@4 d2@2 d2@6 c#2@6 b1@5 ~ d2@4 f#1@2 a1@6 b1@6 c#2@6 e2@4 d2@2 d2@6 c#2@4 b1@6 ~@2 d2@4 b1@2 a1@5 ~ b1@6 c#2@6 e2@4 d2@2 d2@6 c#2@6 b1@5 ~ d2@4 f#1@2 a1@6 b1@6 c#2@6 e2@4 d2]/8",
  P: "[~ d2@6 c#2@4 b1@6 ~@2 f#1@4 a1@2 b1@6 b2@4 c#2@7 ~ g#2@4 c#2@2 d2@6 a2@4 c#2@8 g#2@2 c#2@2 c2@2 b1@5 ~ f#2@4 c#2@7 ~ g#2@4 c#2@2 d2@18 ~@5]/5",
  Q: "[~@15 c#2@2 e2@2 c#2@2 b1@2 a1@2 a1@4 a1@2 b1@4 c#2@2 ~@10 c#2@2 d2@6 c#2@4 b1@2 a1@6 f#1@5]/3",
  R: "~ a1@6 b1@4 c#2@8 e2@5", S: "~ d2@6 c#2@4 b1@2 a1@6 b1@5", T: "~ a1@5 ~ b1@4 c#2@8 e2@5",
  U: "~ d2@6 c#2@4 b1@2 a1@6 f#1@5", V: "[~ b1@6 b2@4 ~ c#2@7 g#2@4 c#2@2 d2@6 a2@6 e2@6 b2@5]/2",
  W: "[~ a1@4 a1@2 b1@4 c#2@2 ~@10 c#2@2 d2@6 c#2@4 b1@2 a1@6 f#1@5]/2", X: "~ d1@6 e1@6 f#1@6 a1@5",
  Y: "[~ a1@3 ~ a1@2 b1@4 c#2@2 ~@10 c#2@2 d2@6 c#2@4 b1@2 a1@6 f#1@5]/2", Z: "~ a1@6 b1@4 c#2@2 ~@6 e1@5",
  AA: "~ d1@12 d2@11", AB: "~ a1@21 ~@2",
})).s("gm_acoustic_bass").gain(0.54)

// other · electric guitar muted · "PRG.CHANGE"
const electric_guitar_muted = note("<~@72 A@8 B@5>".pickRestart({
  A: "[~ e5@191]/8", B: "[~ e5@48 e5@63 ~@8]/5",
})).s("gm_electric_guitar_muted").gain(0.42)

// chords · drawbar organ · "PRG.CHANGE"
const drawbar_organ = note(`<
  ~ A B C D A E A F G H I D G J ~@4 K H I D G J ~@5 L H I D G J G H G H I D G J ~@5 M N O P Q@3 R@7 N O S T@2 ~@17
>`.pickRestart({
  A: "~ [g#4,a4,c#5,e5]@2 ~@8 [g#4,a4,c#5,e5] ~@7 [g#4,a4,c#5,e5] ~@4", B: "~ d4@9 ~@7 d4@2 a4@5",
  C: "~ [g#4,a4,c#5,e5]@2 ~@8 [g#4,a4,c#5,e5] ~@7 e5 ~@4", D: "~ [a4,c#5]@2 ~@16 [a4,c#5,e5] ~@4",
  E: "~ d4@6 ~@10 a4@2 e5@2 d5 ~@2, ~@19 f#5 ~@4", F: "~ [f#4,a4,c#5,e5]@2 ~@14 [a4,c#5,e5] ~@6",
  G: "~ [g#4,a4,c#5,e5]@2 ~@18 [g#4,a4,c#5,e5] ~@2", H: "~ [f#4,a4,c#5]@2 ~@21",
  I: "~ [g#4,a4,c#5,e5]@2 ~@16 [a4,e5] ~@4", J: "~ d4@6 ~@14 [a4,c#5,e5] ~@2",
  K: "~ [g#4,a4,c#5]@2 ~@18 [g#4,a4,c#5,e5] ~@2, ~ e5 ~@22", L: "~@2 e5 ~@18 [g#4,a4,c#5,e5] ~@2, ~ [a4,c#5]@20 ~@3",
  M: "~ [g#4,c#5,e5]@2 ~@18 [g#4,c#5,e5] ~@2, ~ a4@20 a4@3", N: "~ [f#4,c#5]@2 ~@21, ~ a4@20 ~@3",
  O: "~ [g#4,c#5,e5]@2 ~@16 a4@5, ~ a4@18 e5 ~@4", P: "~ c#5@2 ~@12 [a5,c#6] ~@3 [f#5,a5] ~ [a5,c#6] ~@2, ~ a4@23",
  Q: "[~ [g#4,c#5,e5]@2 ~@8 [c#5,e5] ~@5 c#5 ~ [c#5,e5] ~@3 [f#5,a5,c#6] ~@7 [f#5,a5,c#6]@2 ~@2 [f#5,a5,c#6] ~@3 [f#5,a5,c#6] ~@3 [f#5,a5,c#6] ~ [f#5,a5,c#6] ~@3 [c#5,e5,g#5]@2 ~@16 [c#5,e5] ~@4, ~ a4@10 a4@8 a4@30 a4@18 a4@5, ~@23 d5@8 d5@4 d5@4 d5@4 d5@2 d5@27]/3", // C#m F#m C#m
  R: "[~ [f#4,c#5]@2 ~@142 [g#4,c#5,e5]@2 ~@18 [g#4,c#5,e5] ~@2, ~ a4@144 a4@20 a4@3]/7", // F#5 C#m
  S: "~ a4@18 [c#5,e5] ~@4, ~ c#5@2 ~@16 a4@5", // C#m
  T: "[~ [g#4,c#5,e5]@2 ~@18 [g#4,c#5,e5] ~@3 d4@6 ~@14 [c#5,e5] ~@2, ~ a4@20 a4@25 ~@2]/2", // C#m
})).s("gm_drawbar_organ").gain(0.27)

// chords · drawbar organ · "PRG.CHANGE" · soft notes
const drawbar_organ_soft = note("<~@10 A B ~@8 A B ~@9 A B ~@4 A ~ A B ~@9 C B ~@11 C B ~@20>".pickRestart({
  A: "~@21 [f#4,a4,c#5] ~@2", B: "~@19 [g#4,c#5] ~@4", C: "~@21 [f#4,c#5] ~@2, ~@7 a4",
})).s("gm_drawbar_organ").gain(0.18)

// chords · brass section · "PRG.CHANGE"
const brass_section = note("<~@15 A B C ~@7 A B C ~@16 D E@8 ~@4 F E@8 ~@12 G H@6>".pickRestart({
  A: "~ [a4,d5,a5]@10 [b4,e5,b5]@11 ~@2", B: "~ [c#5,f#5,c#6]@9 ~ [b4,e5,b5]@11 ~@2",
  C: "~ [a4,d5,a5]@9 ~ [b4,e5,b5]@11 ~@2", D: "~@11 [b4,b5]@11 ~@2, ~ [a4,d5,a5]@23, ~@11 e5@13",
  E: "[~ c#5@9 ~ [b4,b5]@11 ~@3 [a4,d5,a5]@9 ~ [b4,b5]@11 ~@146, ~ [f#5,c#6]@191, ~@11 e5@24 e5@157]/8", // B D5 B F#5
  F: "~ [a4,d5,a5]@10 [b4,b5]@11 ~@2, ~@11 e5@13", G: "~ [c#5,g#5]@9 ~@14, ~ c#6@23",
  H: "[~ [d5,d6]@2 ~@4 c#5@2 ~@4 [a4,a5]@2 ~@4 f#4@3 ~ e4@19 ~@7 [d5,d6]@2 ~@4 c#5@2 ~@4 [a4,a5]@2 ~@4 f#4@3 ~ e4@19 ~@7 [d5,d6]@2 ~@4 c#5@2 ~@4 [a4,a5]@2 ~@4 f#4@3 ~ e4@16 ~@9, ~ c#6@6 c#6@42 c#6@6 c#6@42 c#6@8 ~@39, ~ c#5 ~@17 f#5@48 f#5@52 ~@25, ~@23 e5@48 e5@64 ~@9, ~@49 c#5 ~@47 c#5 ~@46]/6", // D A D A D A
})).s("gm_brass_section").gain(0.59)

// chords · orchestral harp · "PRG.CHANGE"
const orchestral_harp = note("<~@18 A@8 ~@2 B@8 ~@11 C@8 ~@5 D@8 E@5 ~@12>".pickRestart({
  A: "[~ [e5,f#5,a5]@191, ~ c#6@11 ~@180]/8", B: "[~ [e5,f#5,a5,c#6]@191]/8",
  C: "[~ [f#5,a5,c#6]@191, ~ e5@48 ~@143]/8", D: "[~ [f#5,c#6]@191, ~ e5@48 ~@143]/8",
  E: "[~ d5@10 [b4,e5,b5]@11 ~@15 [d5,g#5,d6]@9 ~@3 c#5@24 [d5,d6]@2 ~@16 f#4@3 ~ [e4,e5]@24 ~, ~ a4@85 ~@34, ~@5 f#5@14 ~@5, ~@25 [c#5,c#6]@24 c#6@32 ~@39, ~@49 g#5@10 ~@14 c#5@8 ~@39]/5", // E5 Ddim D E C#
})).s("gm_orchestral_harp").gain(0.59)

// chords · banjo · "PRG.CHANGE" · F#5
const banjo = note("<~@77 [~ [c#5,f#5,c#6]@23] ~@7>").s("gm_banjo").gain(0.59)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~ A B C D E F E G H I J K L M N O P Q H I J K L M N O P Q ~ H I J K L M H I H I J K L M N O R Q S T U V@2 W@2 X Y N O
  P Q Z H I J K L M AA AB H I J K L M L AC H I J I J AD@2
>`.pickRestart({
  A: "~ [g#3,a3,c#4,e4]@10 [g#3,a3,c#4,e4] ~@7 [g#3,a3,c#4,e4] ~@4", B: "~ [a3,e4,f#4]@16 ~@2 a3@5, ~@17 d3@5 ~@2",
  C: "~ [g#3,a3,c#4,e4]@18 [g#3,a3,c#4,d4,e4] ~@4", D: "~ [a3,e4,f#4]@18 [a3,e4,f#4] ~@4",
  E: "~ [g#3,a3,c#4,e4]@17 ~ [g#3,a3,c#4,e4] ~@4", F: "~ [f#3,a3,d4,e4]@22 ~", G: "~ [d3,a3,c#4,e4]@22 ~",
  H: "~ [a3,c#4,e4,g#4]@18 ~@2 [a3,c#4,e4,g#4] ~@2", I: "~ [c#4,d4,f#4,a4]@18 ~@2 [c#4,d4,f#4,a4] ~@2",
  J: "~ [a3,c#4,e4,g#4]@17 ~ [a3,c#4,e4,g#4] ~@4", K: "~ [c#4,d4,f#4,a4]@17 ~ [c#4,d4,f#4,a4] ~@4",
  L: "~ [a3,c#4,e4,g#4]@19 ~ [a3,c#4,e4,g#4] ~@2", M: "~ [c#4,d4,f#4,a4]@19 ~ [c#4,d4,f#4,a4] ~@2",
  N: "~ [b3,d4,f#4,a4]@10 [c#4,e4,g#4,b4]@13", O: "~ [d4,f#4,a4]@10 [c#4,e4,g#4,b4]@13, ~ c#5@8 ~@15",
  P: "~ [b3,d4,f#4,a4]@10 [c#4,e4,b4]@13, ~@11 g#4@11 ~@2", Q: "~ [d4,f#4,a4,c#5]@23",
  R: "~ [b3,f#4,a4]@10 [c#4,e4,b4]@13, ~ d4@8 ~@2 g#4@11 ~@2", S: "~@19 [e4,a4,b4] ~ [g#4,a4,b4] ~@2, ~@19 g#4@2 ~@3",
  T: "~ a3@16 ~@4 [c#4,e4,g#4] ~@2, ~ [c#4,e4,g#4]@18 a3@5, ~@17 a2@7", // C#m
  U: "~@13 d2@4 ~@2 d3@2 [c#4,d4,f#4,a4] ~@2, ~ [d3,c#4,d4,f#4,a4]@19 ~@4, ~@11 a2@5 ~ a2@4 ~@3", // Dmaj7
  V: "[~@7 a2@4 [a3,c#4,e4]@6 a2@2 ~@4 a2@2 [f#3,a3,c#4]@10 ~@8 d3@5, ~ [a3,c#4,e4,g#4]@9 ~ g#4@10 ~@4 d3@8 ~@2 d3@6 a2@7, ~@19 [e3,a3,c#4,e4]@6 d2@23, ~@37 [f#3,a3,c#4]@11]/2", // A F#m Amaj7 A F#m
  W: "[~ [a3,c#4,e4]@6 ~@4 [a3,c#4,e4]@5 ~@3 [e3,a3,c#4,e4]@3 ~ [d3,c#4,d4,f#4,a4]@8 [d4,f#4,a4,c#5]@3 ~ [d4,f#4,a4,c#5]@3 ~ [d4,f#4,a4,c#5] ~@3 [d4,f#4,a4,c#5] ~ [d4,f#4,a4,c#5] ~@2, ~ g#4@19 ~@28, ~ a2@14 ~@2 a2@4 ~@27, ~@7 e3@10 ~@31]/2", // A Dmaj7
  X: "~ a3@6 e3@4 ~@8 [a2,c#4,e4,g#4,c#5]@2 ~@3, ~ [e4,g#4,c#5]@18 ~@5, ~ a2@16 e3@5 ~@2, ~ c#4@9 ~ a3@11 ~@2, ~@11 c#4@8 ~@5", // Amaj7 C#m
  Y: "~ d3@6 a2@4 ~@4 a2@4 [d2,d3,c#4,d4,f#4,a4]@2 ~@3, ~ [c#4,f#4,a4]@17 ~@6, ~ d2@14 ~@9, ~ d4@8 ~@2 [d3,d4]@7 ~@6", // Dmaj7 F#m D
  Z: "~@19 [g#4,b4]@2 [g#4,a4,b4] ~@2, ~@19 [e4,a4] ~@4", AA: "~ [b3,d4,f#4]@10 [c#4,e4,g#4]@13, ~ a4@9 ~ b4@11 ~@2",
  AB: "~ [d4,f#4,a4]@10 ~@2 [e3,d4,e4,g#4,b4]@11, ~ c#5@8 ~@15", // D E7
  AC: "~ [f#4,a4]@14 [f#4,a4,c#5,e5] ~@3 [f#4,a4,c#5] ~@4, ~ [c#4,d4]@18 e5@2 ~@3", // F#m F#m7 F#m Dmaj7
  AD: "[~ c#4@14 ~@2 e3@2 ~@4 a2@2 [a2,a3,c#4,e4]@15 ~@8, ~ [d2,d3,d4,f#4,a4]@18 ~@2 f#3@8 ~@19, ~@15 c#4@4 [c#4,d4,f#4]@6 ~@23, ~@23 a1@14 ~@11]/2", // A D Dmaj7
})).s("gm_epiano2").gain(0.32)

// drums · kick
const kick = s("bd").struct("<~ A@17 B A@9 B@2 A@17 B@2 A@11 B@2 A@21 C ~>".pickRestart({
  A: "~ x ~@9 x ~@12", B: "~ x ~@11 x ~@10", C: "~ x ~@11 x ~@3 x ~@6",
})).gain(0.47)

// drums · rim
const rim = s("rim").struct(`<
  ~
  [~@7 x ~@11 x ~@4]!17
  [~@7 x ~@16]
  [~@7 x ~@11 x ~@4]!10
  [~@7 x ~@16]
  [~@7 x ~@11 x ~@4]!18
  [~@7 x ~@16]
  ~@36
>`).gain(0.47)

// drums · snare
const snare = s("sd").struct("<~@18 A ~@10 B ~@18 B C@12 D C@7 E C@7 E C@6 ~>".pickRestart({
  A: "~@19 x ~ x ~ x", B: "~@13 x ~ x ~ x ~ x ~ x ~ x", C: "~@7 x ~@11 x ~@4", D: "~@7 x ~@5 x ~ x ~ x ~ x ~ x ~ x",
  E: "~@7 x ~@11 x ~ x ~ x",
})).gain(0.37)

// drums · hihat
const hihat = s("hh").struct("<~ A@48 ~@8 B@4 A B A@3 B A B C B A@3 B A@2 B@2 A@3 B D ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", B: "~@3 x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  C: "~@3 x ~ x ~ x ~ x ~ x ~@3 x ~ x ~ x ~ x ~ x", D: "~@3 x ~ x ~@13 x ~@4",
})).gain(0.42)

// drums · open hat
const open_hat = s("oh").struct("<~@69 [~@13 x ~@10] ~@13 [~@7 x ~ x ~ x ~ x ~@10] ~>").gain(0.42)

// drums · crash
const crash = s("cr").struct("<~@56 A ~ B ~@3 B ~@3 B ~@2 B@2 ~@3 B ~@2 B@2 ~@5 B>".pickRestart({
  A: "~@19 x ~@4", B: "~ x ~@22",
})).gain(0.33)

// drums · ride
const ride = s("rd").struct("<~@49 A@7 B C ~ C@2 ~@7 C ~@13 D E C>".pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@6", C: "~ x ~@22",
  D: "~ x ~@10 x ~@11", E: "~ x ~@17 x ~@4",
})).gain(0.42)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@9 A ~ A ~ A ~@5 A ~ A ~ A ~@14 A ~ A ~ A ~@7 A ~ A ~ A ~ A ~@13 A ~ A ~ A ~@3 A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@19 x ~@4",
})).gain(0.47)

// drums · congas
const congas = s("conga:18").struct(`<
  ~ 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 A D B A B A B A B A B A B A B A B A B A D B@2 A B A B A B@2 A B
  A D 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: "~@11 x ~@11 x", B: "~@11 x ~@12", C: "~@5 x ~@2", D: "~@23 x",
})).gain(1.19)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@19 A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A@2 ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@15 x ~ x ~@6",
})).gain(0.37)

// drums · guiro
const guiro = s("guiro:0").struct("<~@83 [~@19 x ~@4] ~>").gain(8.87)

stack(
  bass, electric_guitar_muted, drawbar_organ, drawbar_organ_soft, brass_section, orchestral_harp, banjo, epiano2, kick,
  rim, snare, hihat, open_hat, crash, ride, tambourine, congas, shaker, guiro
)

More by Sade