Strudelify

You'll Never Find Another Love Like Mine

Lou Rawls

KeyF♯ minorTempo106 bpm
0:00/0:00
// You'll Never Find Another Love Like Mine — Lou Rawls
// 106 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(106/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@23 B C D@2 E A@19 B C D@2 E C D@2 F D G A@2 H@2 A@7 B C D@2 E C D@2 F D G A@2 C D@2 C D G A@2 F D@2 C D G A@2 I J
  K L
>`.pickRestart({
  A: "d2 ~@2 d2 ~@2 d2 ~@4 d2 a1@2 b1 ~", B: "d2 ~@2 d2 ~@2 d2 ~@4 d2 e2@2 f#2 ~",
  C: "a1@2 ~ a1 ~@2 a1@4 ~ e1 e1@2 f#1 ~", D: "a1@2 ~ a1 ~@2 a1@5 e1 e1@2 f#1 ~", E: "a1 ~ a1 ~ a1 ~@11",
  F: "a1 ~@2 a1 ~@2 a1@4 ~ e1 e1@2 f#1 ~", G: "a1@2 ~ a1 ~@2 a1@5 a1 b1@2 c#2 ~",
  H: "a1 ~@2 a1 ~@2 a1 ~@4 a1 e1@2 f#1 ~", I: "~@3 a1@2 b1@3 d2@3 e2@2 f#2@3", J: "~@3 d2@2 e2@3 f#2@3 a2@2 b2@3",
  K: "~ d2@3", L: "d2 ~@15",
})).s("gm_acoustic_bass").gain(0.34)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A B@2 C@2 D@2 E@2 F G H I J K L@2 F M H I J K N@2 O P@2 Q R S@2 T F G H I J K U ~ F M H I J K V@2 O P@2 W X Y Z AA
  AB@2 AC AD AE AF@2 M H I J K N@2 O P@2 W AG AH@2 AI@3 AJ@2 AK AL AM AN@2 AO AP AQ AM AR@2 AS AT AU AV@2 AW AX AY ~
>`.pickRestart({
  A: "~@4 f#3 ~ a3 ~", B: "[[f#3,a3,c#4,e4]@27 ~@3 [b3,d4] [c#4,e4]]/2", C: "[[b3,d4]@28 ~@2 b3 a3]/2",
  D: "[b3 ~ f#3 ~ f#3@2 e3 f#3@21 ~@2 b3 a3]/2", E: "[b3 ~ f#3 ~ f#3@2 e3 f#3@21 ~@4]/2",
  F: "[d3,f#3,a3,c#4]@2 ~ [d3,f#3,a3,c#4]@2 ~ [d3,f#3,a3,b3]@9 ~", G: "[a2,a3]@2 ~ [a2,a3]@2 ~ [a2,a3]!2 ~ [b2,b3]@6 ~",
  H: "[d3,f#3,c#4]@2 ~ [d3,f#3,a3,c#4]@2 ~ [d3,f#3,a3,c#4]@7 ~ [a2,a3] [b2,b3]", // Dmaj7 A B
  I: "c#4@2 ~ c#4@2 ~@2 b3@2 c#4@5 ~@2, ~@3 c#4 ~@4",
  J: "[d3,f#3,a3,c#4]@2 ~ [d3,f#3,a3,c#4]@2 ~ [d3,f#3,a3,c#4]@7 ~ [b2,b3] [c#3,c#4]", K: "[b2,b3]@12 ~@2 a2 b2",
  L: "[[d3,f#3,a3,c#4]@6 ~ [a3,c#4] b3@7 ~, ~@7 f#3@8 ~]/2", M: "[a2,a3]@2 ~ [a2,a3]@2 ~ [a2,a3] ~ [a2,a3] [b2,b3]@6 ~",
  N: "[[d3,f#3,a3,c#4,f#4]@15 ~ [a3,c#4,f#4]@8 ~@2 [g1,a1] d2 f2 a2 d3 [d3,e3,f3,g3], ~@15 [d3,f#3]@9 [d1,e1]@5 [f2,g2,g#2,a#2,b2] [a2,c3]@2, ~@25 f1@7, ~@27 [g1,a1,b1,c2,c#2]@5, ~@7 [d2,d#2,e2,f#2]]/2", // Dmaj7 F#m Gsus2 Em7 D Dsus2 Fdim Am
  O: "[b3,d4,f#4], [f3,g3,a3] ~@15", P: "[[g3,b3,e4]@15 ~ [b3,d4,f#4]@15 ~, ~@15 g3@15 ~@2]/2",
  Q: "[g3,b3,d4,f#4] ~ [g3,b3,d4,f#4] ~ [b3,d4,f#4] ~@11, ~@2 g3 ~@5", R: "[d3,a3,c#4,f#4]@15 ~",
  S: "[[d3,a3,b3,f#4]@15 ~ [a3,c#4,f#4]@16, ~@15 d3@16 ~]/2", T: "[d3,a3,b3,f#4]@15 ~", U: "[d3,f#3,a3,c#4]@3 ~",
  V: "[[d3,f#3,a3,c#4,f#4]@23 ~@3 [g1,a1] d2 f2 a2 d3 [d3,e3,f3,g3], ~@24 [d1,e1]@5 [f2,g2,g#2,a#2,b2] [a2,c3]@2, ~@25 f1@7, ~@27 [g1,a1,b1,c2,c#2]@5, ~@7 [d2,d#2,e2,f#2]]/2", // Dmaj7 Gsus2 Em7 Dsus2 Fdim Am
  W: "[g3,b3,d4,f#4] ~ [g3,b3,d4,f#4] ~ [b3,d4,f#4] ~@5 [g1,a1] d2 f2 [g2,a2] d3 [d3,e3,f3,g3], ~@4 g3@2 ~@2 [d1,e1]@5 [f2,g#2,a#2,b2] [g2,a2,c3]@2, ~@9 f1@7, ~@11 [g1,a1,b1,c2,c#2]@5, ~@3 [d2,d#2,e2,f#2]", // Gmaj7 Bm Gsus2 Em7 Dsus2 Fdim Am7
  X: "[b3,d4,f#4]@15 ~, [f3,g3,a3] ~@15", Y: "[g3,b3,d4,e4]@2 ~ [g3,b3,d4,e4] ~@2 [g3,b3,d4,e4]@9 ~",
  Z: "[g3,b3,d4,f#4]@2 ~ [g3,b3,d4,f#4] ~@2 [g3,b3,d4,f#4]@9 ~", // Gmaj7
  AA: "[g3,e4]@2 ~ [g3,b3,d4,e4] ~@2 [g3,b3,d4,e4]@7 g3 b3 g3, [b3,d4] ~@15", // C Em7 Bm
  AB: "[[b3,d4,f#4]@2 g3 [b3,d4,f#4] ~@2 [b3,d4,f#4]@9 ~ [b3,d4,e4]@2 ~ [g3,b3,d4,e4] ~@2 [g3,b3,d4,e4]@9 ~, ~@5 g3@9 ~ g3@3 ~@14, ~@6 c#4 ~@25]/2", // Bm E7 Em7
  AC: "[d3,f#3,a3,c#4]@3 [d3,f#3,a3,b3]@5", AD: "[d3,f#3,a3,c#4]@6 [d3,f#3,a3,b3]@5 d3 [f#4,f#5]!2 ~@2",
  AE: "[g3,b3,d4,f#4]", // Gmaj7
  AF: "[[g3,b3,e4]@15 ~ [d3,f#3,a3,c#4]@2 ~ [d3,f#3,a3,c#4]@2 ~ [d3,f#3,a3,b3]@9 ~, ~@15 g3@15 ~@2, ~@8 d4@7 ~, ~@8 b3@3 ~@5]/2", // Em Dmaj7 Bm7
  AG: "[f3,g3,a3,b3,d4,f#4] ~@2 [g3,b3,d4,f#4] ~@2 [g3,b3,d4,f#4]@10", // G7 Gmaj7
  AH: "[[g3,b3,d4,e4] ~@2 [g3,b3,d4,e4] ~@2 [g3,b3,d4,e4]@9 ~ [b3,d4,f#4] ~@2 [g3,b3,d4,f#4] ~@2 [g3,b3,d4,f#4]@9 ~, ~@15 g3@2 ~@15]/2", // Em7 Bm Gmaj7
  AI: "[[g3,b3,d4,e4] ~@2 [g3,b3,d4,e4] ~@2 [g3,b3,d4,e4]@3 g3 b3 g3 d4 g3 b3 ~ [b3,d4,f#4] ~@2 [g3,b3,d4,f#4] ~@2 [g3,b3,d4,f#4]@9 ~ [b3,d4,e4] ~ g3 [b3,d4,e4] ~@2 [b3,d4,e4]@7 ~@3, ~@15 g3@2 ~@14 g3@2 ~@4 g3@9 ~@2]/3", // Em7 Bm Gmaj7 E7
  AJ: "[[d3,f#3]@2 ~ [d3,f#3,a3,c#4] ~@2 [d3,f#3,a3,b3]@9 ~ [f#3,a3,c#4] ~@2 [f#3,a3,c#4] ~@2 [d3,f#3,a3,b3]@8 ~@2, [a3,c#4] ~@14 d3@2 ~@2 d3@2 ~@11]/2", // D Dmaj7 Bm7 F#m Bm7 A
  AK: "[g3,b3,d4]@2 ~ [g3,b3,d4,f#4] ~@2 [g3,b3,d4,f#4]@9 ~, f#4 ~@15", // G Gmaj7
  AL: "[g3,e4]@2 ~ [b3,d4,e4] ~@2 [g3,b3,d4,e4]@5 g3 a4 a3 ~@2, [b3,d4] ~@2 g3@2 ~@11", // C E7 Em7 Bm
  AM: "[g3,b3,d4,f#4] ~@2 [g3,b3,d4,f#4] ~@2 [g3,b3,d4,f#4]@9 ~", // Gmaj7
  AN: "[[g3,b3,d4,e4] ~@2 [g3,b3,d4,e4] ~@2 [g3,b3,d4,e4]@3 g3 b3 g3 d4 g3 b3 ~ [b3,d4,f#4] ~@2 [g3,b3,d4,f#4] ~@2 [g3,b3,d4,f#4]@7 g3 [b3,d4,f#4] ~, ~@15 g3@2 ~@15]/2", // Em7 Bm Gmaj7 Bm
  AO: "[g3,b3,d4,e4] ~@2 [g3,b3,d4,e4] ~@2 [g3,b3,d4,e4]@8 ~@2", // Em7
  AP: "[d3,f#3,a3,c#4]@2 ~ [d3,f#3,a3,c#4] ~@2 [d3,f#3,a3,b3]@7 d3 f#3 ~", // Dmaj7 Bm7
  AQ: "[f#3,a3,c#4] ~@2 [d3,f#3,a3,c#4] ~@2 [d3,f#3,a3,b3]@8 ~@2, d3 ~@7", // F#m Dmaj7 Bm7
  AR: "[[g3,b3,e4]@2 ~ [b3,d4,e4] ~@2 [g3,b3,d4,e4]@3 g3 a3 g3 a4 g3 a3 ~ [b3,d4,f#4] ~@2 [g3,b3,d4,f#4] ~@2 [g3,b3,d4,f#4]@9 g3, d4 ~@2 g3@2 ~@10 g3@2 ~@15]/2", // Em E7 Em7 Bm Gmaj7
  AS: "[b3,e4] ~ g3 [b3,d4,e4] ~@2 [b3,d4,e4]@3 g3 ~ g3 d5 d4 g3 ~, d4 ~@7", // E5 E7
  AT: "[g3,b3,d4,f#4] ~@2 [g3,b3,d4,f#4] ~@2 [g3,b3,d4,f#4]@7 g3 [b3,d4,f#4] g3", // Gmaj7 Bm
  AU: "[b3,d4,e4] ~ g3 [b3,d4,e4] ~@2 [b3,d4,e4]@8 ~@2, ~@5 g3@9 ~@2", // E7
  AV: "[[d3,f#3,a3]@2 ~ [d3,f#3,a3,c#4] ~@2 [d3,f#3,a3,b3]@9 ~ [f#3,a3,c#4] ~@2 [f#3,a3,c#4] ~@2 [d3,f#3,a3,b3]@9 ~, c#4 ~@14 d3@2 ~@2 d3@2 ~@11]/2", // D Dmaj7 Bm7 F#m Bm7
  AW: "~@2 [a2,a3]@3 [b2,b3]@3 [d3,d4]@2 ~ e3@2 [f#3,f#4]@2 ~, ~@10 e4@3 ~@3", // A B D F#
  AX: "~@3 [d3,d4]@2 [e3,e4]@3 [f#3,f#4]@3 [a3,a4]@2 [b3,b4]@2 ~", AY: "~@4 [d3,f#3,c#4,e4,f#4,a4]@11 ~",
})).s("gm_piano").gain(0.56)

// other · french horn · "FR.HORN"
const french_horn = note(`<
  ~@25 A B A C ~@20 D E F C G@2 H@2 I@2 J@2 ~@10 A B A C G@2 H@2 I@2 J@2 G@2 H@2 I@2 J@2 G@2 H@2 I@2 J@2 K L M ~
>`.pickRestart({
  A: "[d5,f#5]", B: "[b4,e5]", C: "[a5,a6] ~ [a5,a6] ~ [a5,a6] ~@11", D: "[f#4,f#5]", E: "[e4,e5]", F: "[f#4,f#5]@15 ~",
  G: "[[f#5,f#6] ~ [f#5,f#6]@4 [e5,e6] ~ [a5,a6]@2 [g5,g6] ~ [f#5,f#6]@2 [e5,e6]@18]/2", // F# E A G F# E
  H: "[[f#5,f#6] ~ [f#5,f#6]@4 [e5,e6] ~ [a5,a6]@2 [g5,g6] ~ [f#5,f#6]@2 [e5,e6]@15 [d#5,d#6] [e5,e6] [f5,f6]]/2", // F# E A G F# E D# E …
  I: "[[f#5,f#6] ~@2 [f#5,f#6]@3 [e5,e6] ~ [a5,a6]@2 [g5,g6] ~ [f#5,f#6]@2 [e5,e6]@17 ~]/2", // F# E A G F# E
  J: "[[a4,c#5]@3 [f#4,b4]@13]/2", K: "~@3 [a4,a5]@2 [b4,b5]@3 [d5,d6]@3 [e5,e6]@2 [f#5,f#6] ~@2",
  L: "~@3 [d5,d6]@2 [e5,e6]@3 [f#5,f#6]@3 [a5,a6]@2 [b5,b6]@2 ~", M: "~ [f#5,a6]@3",
})).s("gm_french_horn").gain(0.45)

// drums · kick
const kick = s("bd").struct("<~ A@25 B C D A@21 B C D A@8 B A@10 B C D A@24 E@2 D F>".pickRestart({
  A: "x ~@6 x!2 ~@7", B: "x!2", C: "x ~@7 x ~@6 x", D: "~ x ~@2", E: "~@3 x ~ x ~@10", F: "x",
})).gain(0.8)

// drums · rim
const rim = s("rim").struct("<~ A@23 B ~@4 A@19 B ~@14 A@7 B ~@32>".pickRestart({
  A: "~@2 x!2 ~@2 x ~@3 x!2 ~@2 x ~", B: "~@2 x!2 ~@2 x ~@9",
})).gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@24 A B@3 C ~@19 A B@3 C B@9 D ~@7 A B@3 C B@24 E@2 F ~>".pickRestart({
  A: "~@5 x!2 ~", B: "~ x ~ x", C: "x ~ x ~@8 x!2 ~@3", D: "~@4 x ~@7 x!3 ~", E: "x!2", F: "~@14 x!2",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@24 A ~@3 A ~@19 A ~@3 A ~@17 A ~@3 A ~@24 B@2 ~@2>".pickRestart({
  A: "~@7 x", B: "~@13 x!2 ~",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~ A@8 B A@14 C D E D C A@19 C D E D C F@9 G A@7 C D E D C F@24 H@2 ~@2>".pickRestart({
  A: "~ x ~ x", B: "x!2 ~ x", C: "~ x ~@2", D: "x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~", E: "x ~ x!2 ~@2 x ~ x ~ x ~ x!3 ~",
  F: "x!4", G: "x!3 ~", H: "x",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@24 A ~@3 A ~@19 A ~@3 A ~@17 A ~@3 A ~@24 B@2 ~@2>".pickRestart({
  A: "~@13 x ~@2", B: "~@11 x ~@4",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A ~@17 B ~ C ~@21 B ~ C D@9 E ~@9 B ~ C D@24 ~@4>".pickRestart({
  A: "~@7 x", B: "~ x ~@2", C: "~ x ~@6", D: "~ x ~ x ~ x ~ x", E: "~ x ~ x ~ x ~@2",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@25 A ~@3 A ~@19 A ~@3 A ~@5 A ~@11 A ~@3 A ~@7 A ~@5 A ~@7 A ~@3 B ~>".pickRestart({
  A: "x", B: "~ x ~@2",
})).gain(0.56)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@23 B ~@3 B A@19 B ~@3 B ~@10 A@7 B ~@3 B ~@28>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.64)

// 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 C ~@4 A B A B A B A B A B A B A B A B A B A C ~@14 A B A B A B A C
  ~@32
>`.pickRestart({
  A: "~@3 x!2 ~@7 x ~@3", B: "~@3 x!2 ~@4 x ~@3 x!3", C: "~@3 x!2 ~@4 x ~@6",
})).gain(0.08)

stack(bass, piano, french_horn, kick, rim, snare, low_tom, hihat, mid_tom, open_hat, crash, tambourine, shaker)

More by Lou Rawls