Strudelify
Heart Full Of Soul cover art

1965 · Eric Clapton - Heart Full of Soul

Heart Full Of Soul

The Yardbirds

KeyD minorTempo140 bpm
0:00/0:00
// Heart Full Of Soul — The Yardbirds
// 140 bpm, 4/4, key D minor. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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 steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A@5 B C B C D E F G D E F G D E F G D E F H I J I K I L@5 C D E F G D E F M I J I K I N@4 B C D E F G D E F G D E F G
  D E F H I J I K I O@2 P@6 Q@2
>`.pickRestart({
  A: "[~@14 [d3,a3,d4,f4] f4 [f4,a4]@29 ~ [d3,a3,d4,f4] f4 [f4,a4]@29 ~ [d3,a3,d4,f4,a4]!2, ~@15 [d3,a3,d4]@30 ~@2 [d3,a3,d4]@30 ~@3]/5", // Dm F Dm F Dm D5
  B: "[d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4]!2 [d3,a3,d4,f4,a4]@2", // Dm
  C: "[d3,a3,d4,f4,a4]@2 [a3,d4,f4]!2 [d3,a3,d4,f4,a4]!2 [d3,a3,d4,f4,a4]@2, ~ [d3,a4] ~@2", // Dm D5
  D: "[d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4]!4", // Dm
  E: "[g2,d3,g3,b3,d4,g4]@2 [g2,g3,b3,d4,g4]!2 [g2,d3,g3,b3,d4,g4]!4, ~ d3 ~@2", // G
  F: "[bb2,f3,bb3,d4,f4]@2 [bb2,f3,bb3,d4,f4]!6", G: "[d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4]!6",
  H: "[d3,a3,d4,f4,a4] ~ [d3,a3,d4,f4,a4] ~@5", // Dm
  I: "[a2,d3,a3,d4,gb4,a4]@2 [a2,d3,a3,d4,gb4,a4]!2 [a2,d3,a3,d4,gb4,a4]@2 [a2,d3,a3,d4,gb4,a4]!2 [a2,d3,a3,d4,gb4,a4]@2 [a2,d3,a3,d4,gb4,a4]!2 [a2,d3,a3,d4,gb4,a4]@2 [a2,d3,a3,d4,gb4,a4]!2", // D
  J: "[f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]!2 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]!2 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]!2 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]!2", // F G
  K: "[bb2,d3,f3,bb3,d4]@2 [bb2,d3,f3,bb3,d4]!2 [bb2,d3,f3,bb3,d4]@2 [bb2,d3,f3,bb3,d4]!2 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]!2 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]!2", // Bb F
  L: "[[a2,e3,a3,db4,e4,a4]@15 ~ [g3,b3,d4,g4]@13 ~ [d3,a3,d4,f4] [d3,f4] [f4,a4]@29 ~ [d3,a3,d4,f4,a4] [f4,a4] [f4,a4]@4 [d3,a3,d4,f4,a4]@4 [d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4]@4, ~@15 [g2,d3]@14 ~@2 [a3,d4]@30 ~@2 [d3,a3,d4]@5 ~@12]/5", // A G Dm F Dm F Dm G5 …
  M: "[d3,a3,d4,f4,a4]@3 ~ [d3,a3,d4,f4,a4]@2 ~@10", // Dm
  N: "[[a2,e3,a3,db4,e4,a4]@15 ~ [g3,b3,d4,g4]@13 ~ [d3,a3,d4,f4] [d3,f4] [f4,a4]@29 ~ [d3,a3,d4,f4]!2, ~@15 [g2,d3]@14 ~@2 [a3,d4]@30 ~@3]/4", // A G Dm F Dm G5 D5
  O: "[[a2,e3,a3,db4,e4,a4]@15 ~ [g3,b3,d4,g4]@13 ~ [d3,a3,d4,f4]!2, ~@15 [g2,d3]@14 ~@3]/2", // A G Dm G5
  P: "[[d3,a3,d4,f4,a4]@29 ~ [d3,a3,d4,f4] f4 [f4,a4]@29 ~ [d3,a3,d4,f4] f4 [f4,a4]@29 ~@3, ~@31 [d3,a3,d4]@30 ~@2 [d3,a3,d4]@30 ~@3]/6", // Dm F Dm F D5
  Q: "[[d3,a3,d4,f4,a4]@29 ~@3]/2", // Dm
})).s("gm_acoustic_guitar_steel").gain(0.27).pan(0.3)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B@8 C D E F G D E F C H I J C K E L M N M O M P Q B@4 C K E R S K E L M N M O M P Q B@4 T D E U T K E U V K E J C K
  E W M N M O M P Q B@6 X@2
>`.pickRestart({
  A: "~@14 d3 a2", B: "[d2@30 d3 a2]/2", C: "d2@5 ~ d2@2 a2@4 d2@4", D: "g2@5 ~ g2@2 d2@4 g2@4",
  E: "bb2@2 ~ bb2 f2@2 bb1@2", F: "d2@2 ~ d2 f2@2 a2@2", G: "d2@5 ~ d2@2 f2@4 a2@4", H: "g2@5 ~ g2@2 d2@4 ~@2 g2@2",
  I: "bb2@2 ~ bb2 f2@2 ~ f2", J: "d2@2 ~ d2 a1@2 ~ a1", K: "g2@5 ~ g2@2 d2@4 g2@2 a2@2", L: "d2@2 ~@2 d2@3 ~@9",
  M: "d2@3 ~ d2@3 ~ d2@3 ~ d2@3 ~", N: "f2@3 ~ f2@3 ~ g2@3 ~ g2@4", O: "bb1@3 ~ bb1@3 ~ f2@3 ~ f2@3 ~", P: "[a1,e2]",
  Q: "~@14 d3 a2, g1", R: "d2@4 ~@2 d2@2 a2@3 ~ a2 ~ a2@2", S: "d2@5 ~ d2@2 a2@3 ~ a2@4", T: "d2@5 ~ d2@2 a1@4 d2@4",
  U: "d2@4 ~@2 d2@2 a2@5 ~ a2@2", V: "d2@5 ~ d2@2 a2@6 ~@2", W: "d2@3 ~ d2@3 ~@9", X: "[d2@29 ~@3]/2",
})).s("gm_acoustic_bass").gain(0.38)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  A B@2 C@2 B@2 C@2 D ~@20 E F C@4 G@2 H@2 I@2 J K ~@5 E F C@4 L ~@20 E M C@6 N@2
>`.pickRestart({
  A: "~@14 d3!2", B: "[d3@4 d4@4 d4@2 c4@2 d4@2 e4@6 d4@4 c4@2 d4@2 c4@2 d3!2]/2",
  C: "[d3@4 d4@3 ~ d4@2 c4@2 d4@2 e4@6 d4@4 c4@2 d4@2 c4@2 d3!2]/2", D: "d3", E: "a2", F: "g2@14 d3!2",
  G: "[d3@2 d4!2 f4 g4 ~ f4@2 d4@6 ~]/2", H: "[~@4 d4@2 d4@2 f4@2 ~ g4@2 ~ a4@5 ~@3 c5@4 d5@5 ~]/2",
  I: "[~@2 d4!2 f4 g4 ~ f4@2 d4@6 ~]/2", J: "~@2 db4@2 d4@2 d4@2 f4@3 g4@2 f4@3", K: "a4@3 ~ a4@3 ~@9", L: "d3 ~",
  M: "g2", N: "[d3@29 ~@3]/2",
})).s("gm_overdriven_guitar").gain(0.38).pan(0.8)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A ~ B C D C E C@3 F C@3 G C@3 F C@3 H C@5 ~ I ~ B C J C@3 K C@3 L C@5 ~ I ~ B C E C@7 D C@3 J C@3 M C@5 ~ I ~ A ~
  A ~ A ~@2
>`.pickRestart({
  A: "~@14 x!2", B: "~@12 x ~ x!2", C: "~ x ~ x", D: "~@4 x ~@6 x!5", E: "~@4 x ~@5 x!6", F: "~@4 x ~@6 x!2 ~ x!2",
  G: "~@4 x ~@3 x!5 ~ x!2", H: "~@8 x ~@2 x ~@4", I: "x", J: "~@4 x ~@3 x!8", K: "~@4 x ~@3 x!2 ~ x!5",
  L: "x ~@3 x ~@3 x ~@2 x ~@4", M: "~@8 x ~@2 x ~@2 x ~",
})).gain(0.49)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@4 A ~ B ~@5 B ~@7 B ~@12 A ~@5 B ~@12 A ~@9 B ~@23>".pickRestart({
  A: "~@10 x!2 ~@4", B: "~@5 x ~@2",
})).gain(0.27)

// drums · low tom
const low_tom = s("lt").struct("<~@24 A ~@18 A ~@14 A ~@11 B ~@15>".pickRestart({
  A: "~@7 x", B: "~@3 x",
})).gain(0.49)

// drums · hihat
const hihat = s("hh").struct("<~@24 A ~@6 B ~@18 B ~@19 A ~@6 B ~@8>".pickRestart({
  A: "x!2 ~@2", B: "x",
})).gain(0.44)

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

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

// drums · bongos
const bongos = s("bongo:18").struct("<~@3 A B A B@18 A ~@9 A B@8 A ~@9 A B A B@14 A ~@9 A B@3 ~@2>".pickRestart({
  A: "~ x ~@2", B: "~ x ~ x",
})).gain(0.86)

// drums · congas
const congas = s("conga:18").struct(`<
  ~@3 A ~ A B C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C D ~@9 A ~ B@2 C@2 B@2 C D ~@9 A ~ A B C@2 B@2 C@2 B@2 C@2 B@2 C D ~@9 A
  B C@2 D ~
>`.pickRestart({
  A: "~@3 x", B: "x ~@3 x!2 ~@2", C: "x!2 ~@2 x!2 ~ x", D: "x",
})).gain(1.05)

stack(
  acoustic_guitar_steel, bass, overdriven_guitar, kick, snare, snare_soft, low_tom, hihat, open_hat, crash, bongos,
  congas
)

More by The Yardbirds