Strudelify

For You Love

The Yardbirds

KeyE minorTempo140 bpm
0:00/0:00
// For You Love — The Yardbirds
// 140 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 105 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 · drawbar organ · "ElecOrgan"
const drawbar_organ = note(`<
  ~@7 A B@2 C D B@2 C D E F G H E F G H E I J K L M N O B@2 P Q B@2 P Q B@2 P@2 R ~@17 A B@2 C D B@2 C D E F G H E F G H
  E I J K L M N O B@2 P Q B@2 P Q B@2 P@2 B@2 P@2 R ~
>`.pickRestart({
  A: "~@5 b4 d5 e5", B: "~@2 [g4,b4]!2 ~@2 [g4,b4]@2", C: "~@2 [e4,a4]!2 ~@2 [e4,a4]@2, c#5",
  D: "~@2 [e4,a4]!2 ~ b4 d5 e5, c5 ~", E: "~ [e4,g4] [e4,g4]@2", F: "[g4,b4] [b3,d4]", G: "[c#4,e4]", H: "[c4,e4] ~",
  I: "[g4,b4]@2 ~@3 [d4,g4]@3", J: "~@2 [c#4,e4]@2 [c#4,e4] ~@3", K: "[e4,g4]@2 ~@3 [c4,e4]@3", L: "[e4,g4]!2",
  M: "[g4,b4] [b3,d4,a4]", N: "[c#4,e4]@4 ~ [c#4,e4] ~@2", O: "[e4,g4]@2 ~ [c4,e4]@2 ~@3",
  P: "~@2 [e4,a4]!2 ~@2 [e4,a4]@2", Q: "~@2 [e4,a4]!2 ~@4", R: "[e4,g4,b4]",
})).s("gm_drawbar_organ").gain(0.4)

// bass · percussive organ · "FretlessBass"
const bass = note(`<
  ~@7 A B C D E F G H I J K L I A G E@2 M G L H N G E@2 F C H D F C H@2 O P Q R S ~ T U D V W X Y Z AA ~@8 O P E D M AB
  Q H N AC H@2 F P D E J AB H@2 A G Q@2 M P Q E M C H I O K D Q J AB Q D A AD
>`.pickRestart({
  A: "e2 ~ e2 ~ e2 ~ e2@2 e2 ~ e2 ~ e2 ~ e2 e1", B: "~@15 e1", C: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2@2",
  D: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2", E: "a1 ~ a1 ~ a1 ~ a1@2 a1 ~ a1 ~ a1 ~ a1 ~",
  F: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2 f#2 ~", G: "g2 ~ g2 ~ g2 ~ g2@2 g2 ~ g2 ~ g2 ~ g2 ~",
  H: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 a0 a1 a0 a1!2", I: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2 d#2 ~",
  J: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 e1 e2 e1 e2!2", K: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2@2 g#1 ~",
  L: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2 g#1 ~", M: "e2 ~ e2 ~ e2 ~ e2 e1 e2 ~ e2 ~ e2@2 f#2 ~",
  N: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2", O: "e2 ~ e2 ~ e2 ~ e2@2 e2 ~ e2 ~ e2 ~ e2 ~",
  P: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 g1 g2 g1 g2!2", Q: "a1 ~ a1 ~ a1 ~ a1@2 a1 ~ a1 ~ a1 ~ a1 a0",
  R: "a1 ~ a1 ~ a1 ~ a1 a0 a1 ~ a1 ~ a1@2 d#2 ~", S: "e2 ~ e2 ~ e2 ~ e2 e1 e2 ~ e2 ~ e2@2 d#2 ~",
  T: "b1 ~ b1 ~ b1 ~ b1@2 b1 ~ b1 ~ b1 ~ b1 b0", U: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1@2 g#1 ~",
  V: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2 a#1 ~", W: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 b0 b1 b0 b1!2",
  X: "b1 ~ b1 ~ b1 ~ b1@2 b1 ~ b1 ~ b1 ~ b1 ~", Y: "a1 ~ a1 ~ a1 ~ a1 a0 a1 ~ a1 ~ a1@2 c2 ~",
  Z: "c#2 ~ c#2 ~ c#2 ~ c#2@2 c#2 ~ c#2 ~ c#2 ~ c#2 c#1", AA: "b1 ~ b1 ~ b1 ~ b1 b0 b1 ~ b1 ~ b1@2 d#2 ~",
  AB: "g2 ~ g2 ~ g2 ~ g2 g1 g2 ~ g2 ~ g2@2 g#1 ~", AC: "g2 ~ g2 ~ g2 ~ g2@2 g2 ~ g2 ~ g2 ~ g2 g1", AD: "e2@3 ~@5",
})).s("gm_percussive_organ").gain(0.4)

// other · brass section · "SynBrass1"
const brass_section = note(`<
  A B C D A B C E@2 ~@2 E@2 ~@2 E@2 ~@2 F ~@3 F ~@8 G@8 H@4 ~ I@2 J K@3 J L M N A B C D A B C E@2 ~@2 E@2 ~@2 E@2 ~@2 F
  ~@3 F ~@8 G@12 H@4 ~@2
>`.pickRestart({
  A: "[g4,b4,e5]", B: "[g4,b4,d5]", C: "[e4,a4,c#5]", D: "[e4,a4,c5]", E: "[~@5 b4 d5 e5@3 ~@6]/2", F: "~@5 b4 d5 e5",
  G: "[e5@7 ~]/4", H: "e5/4", I: "[~@8 e5@2 e5@4 f#5@6 ~@4 f#5@2 e5@4 d#5 c#5]/2", J: "b4@2 ~@3 b4@2 b4",
  K: "[c#5@4 e5@2 c#5@2 c#5@2 b4@2 b4@2 g#4@6 ~@4 e5@2 e5@4 f#5@5 ~@5 f#5@2 e5@4 d#5 c#5]/3", L: "c#5 e5@3 c#5 b4@3",
  M: "c#5", N: "b4",
})).s("gm_brass_section").gain(0.56)

// bass · fretless bass · "Fretless"
const bass_2 = note("<A B C@2 A B C@2 ~@38 D@3 E D@3 F G A B C@2 A B C@2 ~@40 A ~>".pickRestart({
  A: "e2", B: "g2", C: "a2", D: "b2!2 e3!2 f#3!2 g#3 f#3", E: "e2!2 g#2!2 b2!2 c#3 b2", F: "c#3", G: "b2",
})).s("gm_fretless_bass").gain(0.4)

// chords · distortion guitar · "ElecGuitar"
const distortion_guitar = note(`<
  ~@11 A B C D E F G A H I J E D I K D A L G H M B N D M I K M@2 I J M D I ~@4 O P Q R S T ~@8 U V W X Y Z W AA AB AC X
  AD Y AE X AF AB AC AA AD U V AF R O Z X AA AG AH W@2 AB AI R X U AE W AF AJ AK
>`.pickRestart({
  A: "~@2 [a2,e3] ~@3 a2@2 ~@2 a2 ~ a2 ~ e3 ~, ~@2 e3 ~", B: "~@2 [e3,b3] ~@3 e2@2 ~@2 e2@2 ~@2 b3 ~, ~@2 [e3,b3] e3",
  C: "~@2 [g2,d3] ~@3 g2@2 d3@6 ~@2", D: "~@2 e3@2 ~@4 e3@7 ~, ~@6 a2@9 ~", E: "~@2 [a2,e3] ~@3 a2@2 e3@6 ~@2",
  F: "[e3,b3]@10 e2@2 e3@2 b3 ~", G: "[g2,d3]@11 ~ g2 ~ d3 ~",
  H: "a2@2 e3 ~@7 e3@2 ~@2 e3 ~, ~@6 a2@5 ~ a2@4, ~@4 a3@3 ~", I: "~@2 [e3,b3]@2 ~@4 [e3,b3]@7 ~, ~@6 e2@9 ~",
  J: "~@2 d3@2 ~@4 d3@7 ~, ~@6 g2@9 ~", K: "g2@2 d3 ~@7 d3@2 ~@2 d3 ~, ~@6 g2@5 ~ g2@4, ~@4 g3@3 ~",
  L: "~@2 [e3,b3] ~@5 e3@2 b3@2 ~@2 b3 ~, e2@5 ~ e2@10, ~@4 e4@3 ~, ~@3 e3", M: "[a2,e3]@11 ~ a2 ~ e3 ~",
  N: "~@2 [g2,d3] ~@3 g2@2 ~@2 g2 ~ g2 ~ d3 ~, ~@2 d3 ~", // G5
  O: "~@2 [e3,b3] ~ [e3,b3]@2 e2@2 ~@4 e3@2 b3 ~, e2@5 ~@3 [e3,b3]@4 ~@4, ~@5 e2@2 ~", // E5
  P: "~@2 [b2,f#3,b3] ~@3 b1@2 [b2,f#3,b3]@2 b1@4 [b2,f#3,b3]@2", // B5
  Q: "~@2 f#3 ~@2 b1 ~ f#3, b1@9 ~@3 b2@4, ~@2 b2@4 [f#3,b3]@7 ~@3", // B5
  R: "~@2 [e3,a3] ~ [a2,e3,a3]@2 a2 ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~", // A5
  S: "~@2 c#4 ~ g#3@2 c#3@2 c#4 ~@2 c#4 ~ c#3 c#4 g#3, c#2, ~@9 g#3@2 ~ g#3@2 ~@2, ~@5 c#3 ~@2",
  T: "~@2 [b2,f#3] ~ [b2,f#3]@2 b1@2 ~@4 b2@2 f#3 ~, b1@5 ~@3 [b2,f#3]@4 ~@4, ~@5 b1@2 ~", // B5
  U: "~@2 [e3,b3,e4] ~ [e3,b3,e4]@2 ~@2 [e3,b3,e4] ~ [e3,b3,e4] ~ [e3,b3,e4] ~ [e3,b3,e4] ~, ~@3 e2@5", // E5
  V: "~@2 g3 ~ d3@2 ~@2 g3 ~@2 g3 ~ g2 g3 d3, g2@9 d3@2 ~ d3@2 ~@2, ~@5 g2 ~@2",
  W: "a2@2 e3 ~ e3@2 a2 ~ a2 ~ a2 ~ a2@2 e3 ~, ~@4 a2 ~@3 e3@4 ~@4", X: "b2 ~ e3@4 a2@3 ~ a2 ~ a2@2 [e3,a3]@2, a2 ~@3",
  Y: "~@2 [e3,b3,e4] ~@3 e2@2 [e3,b3,e4]@2 e2@4 [e3,b3,e4]@2", // E5
  Z: "~@2 [d3,g3] ~ [g2,d3,g3]@2 g2 ~ [g2,d3,g3] ~ [g2,d3,g3] ~ [g2,d3,g3] ~ [g2,d3,g3] ~", // G5
  AA: "~@2 [e3,a3] ~@3 a2@2 [e3,a3]@2 a2 ~@3 [a2,e3,a3]@2", // A5
  AB: "f#3 ~@5 e3@4 ~@2 e3@2 [b3,e4]@2, e3@4 e2@5 ~ e2@4 ~@2, ~ b3@2 ~@5", // E5
  AC: "~@2 [d3,g3] ~@3 g2@2 [d3,g3]@2 g2 ~@3 [g2,d3,g3]@2", // G5
  AD: "~@2 a3 ~ e3@2 ~@2 a3 ~@2 a3 ~ a2 a3 e3, a2@9 e3@2 ~ e3@2 ~@2, ~@5 a2 ~@2",
  AE: "g2@2 d3 ~ d3@2 g2 ~ g2 ~ g2 ~ g2@2 d3 ~, ~@4 g2 ~@3 d3@4 ~@4",
  AF: "~@4 e3@2 ~@4 a2 ~ a2 ~ e3@2, a2@6 [e3,a3]@7 ~@3", // A5
  AG: "~@2 b3 ~@2 e2 ~ b3, e2@9 ~@3 e3@4, ~@2 e3@4 [b3,e4]@7 ~@3", // E5
  AH: "~@4 d3@2 ~@4 g2 ~ g2 ~ d3@2, g2@6 [d3,g3]@7 ~@3", AI: "a2 ~ d3@4 g2@3 ~ g2 ~ g2@2 [d3,g3]@2, g2 ~@3",
  AJ: "~@2 e4 ~ b3@2 e3@2 e4 ~@2 e4 ~ e3 e4 b3, e2, ~@9 b3@2 ~ b3@2 ~@2, ~@5 e3 ~@2", AK: "[e3,b3,e4]@15 ~",
})).s("gm_distortion_guitar").gain(0.4)

// chords · distortion guitar · "ElecGuitar" · soft notes
const distortion_guitar_soft = note(`<
  ~@11 A B C D E ~@2 A ~ F G E D F ~ D A ~@4 B H D ~ F ~@3 F G ~ D F ~@4 I J K L ~ M ~@8 F ~ N O P Q N R S T O ~ P U O V
  S T R ~ F ~ V L I Q O R W X N@2 S Y L O F U N V ~@2
>`.pickRestart({
  A: "a2 ~@11 e3 ~@3", B: "e2 ~@11 b3 ~@3", C: "~@2 c#3 ~@13", D: "a2 ~@3", E: "~@2 d#3 ~@13", F: "e2@5 ~@11",
  G: "g2 ~@3", H: "g2 ~@11 d3 ~@3", I: "~@13 b3 ~@2", J: "b1@3 ~@9 b2 ~@3", K: "~@6 b2@5 ~@5", L: "a2@3 ~@13",
  M: "~@13 f#3 ~@2", N: "~@13 e3 ~@2", O: "~@7 f3 ~@8", P: "e2@3 ~@9 e3 ~@3", Q: "g2@3 ~@13", R: "a2@3 ~@9 a2 ~@3",
  S: "~@7 c4 ~@8", T: "g2@3 ~@9 g2 ~@3", U: "~@13 d3 ~@2", V: "~@6 a2@3 ~@7", W: "~@6 e3@5 ~@5", X: "~@6 g2@3 ~@7",
  Y: "~@7 d#3 ~@8",
})).s("gm_distortion_guitar").gain(0.25)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A B A C B D E F B C A C B D B F B C E B@2 D B C E D A C B D B C B D A D G H I J H@6 K ~@8 H J H@3 I H K H K H@2 I
  H@15 L H@11 M N
>`.pickRestart({
  A: "x ~@2 x!3 ~ x", B: "x ~@2 x!2 ~@2 x", C: "x ~@2 x ~ x ~ x", D: "x ~@5 x ~@3 x!2 ~@2 x ~",
  E: "x ~@5 x ~ x ~@2 x ~@2 x ~", F: "x ~@5 x ~ x!4 ~@2 x ~", G: "~@2 x!2 ~@4 x!2 ~@4 x ~", H: "x!2 ~ x!3 ~ x",
  I: "x ~ x ~@3 x ~ x ~ x!2 ~ x!3", J: "x!3 ~@3 x ~ x ~ x ~@3 x ~", K: "x ~ x ~@3 x ~ x ~ x!2 ~@2 x!2",
  L: "x ~ x ~@3 x ~ x ~ x!2 ~@2 x ~", M: "x!9 ~@7", N: "x",
})).gain(0.32)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 [x!8] ~@97>").gain(0.32)

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

// drums · crash
const crash = s("cr").struct("<~@15 [~@3 x] ~@7 [~@3 x] ~@21 x ~@58 x>").gain(0.32)

// drums · ride
const ride = s("rd").struct(`<
  ~@45 A B C D A@5 B A D A B@5 A D@2 A@2 B A B A B A@2 B A@4 E A@3 C A@2 E A@3 B A@6 E A F A C ~@2
>`.pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x ~ x!3 ~ x!2", C: "x ~@3 x ~ x!3 ~@3 x ~@3", D: "x ~ x!3 ~ x ~",
  E: "x ~@3 x ~@2 x!2 ~@3 x ~@3", F: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2",
})).gain(0.32)

// drums · tambourine
const tambourine = s("tb").struct("<~@45 [x!8]!58 ~@2>").gain(0.32)

// drums · cowbell
const cowbell = s("cb").struct("<~@103 [x!9 ~@7] x>").gain(0.32)

// drums · congas
const congas = s("conga:18").struct("<x!2 [x!2]!2 [x!4]!2 [x!8] ~@48 [x!2 ~ x!2 ~ x!2]!3 [x!2 ~ x!5]!5 ~@42>")
  .gain(1.02)

// drums · congas
const congas_2 = s("conga:33").struct("<~@2 A@2 B@2 C D ~@47 E@3 F G@4 ~@42>".pickRestart({
  A: "~ x", B: "~ x ~ x", C: "~ x ~ x!2 ~ x ~", D: "x!8", E: "~@2 x ~@2 x ~@2", F: "~@4 x ~@3 x!7 ~",
  G: "~@4 x ~@3 x!8",
})).gain(1.02)

stack(
  drawbar_organ, bass, brass_section, bass_2, distortion_guitar, distortion_guitar_soft, kick, snare, mid_tom, open_hat,
  crash, ride, tambourine, cowbell, congas, congas_2
)

More by The Yardbirds