Strudelify

Love of the Loved

The Beatles

KeyC majorTempo106 bpm
0:00/0:00
// Love of the Loved — The Beatles
// 106 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 64 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 25.
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 · electric bass finger · "BASS"
const bass = note(`<
  A B C D A E F G A B H I A J F K L M N M L O P Q R S M T R U V W A B H D A X A H F Y C Z A E A C L M N M L O P Q R S M
  T P U R AA
>`.pickRestart({
  A: "c2@13 ~ c2@2", B: "e2@13 ~ e2@2", C: "g2@13 ~ g2@2", D: "f2@5 c3 f3 c3", E: "g#2@5 ~ g#2@2 g2@8",
  F: "c2@13 ~ c2 ~", G: "g2@5 d3 g3 d3", H: "g2@13 ~ g2 ~", I: "f2@13 ~ f2@2", J: "g#2@5 ~ g#2@2 g2@5 ~ g2@2",
  K: "a#1@13 ~ a#1@2", L: "d#2@5 ~ d#2@2 d#2@6 d#2@2", M: "g2@5 ~ g2@2 g2@6 g2@2", N: "g#2@5 ~ g#2@2 g#2@6 g#2@2",
  O: "a#1@5 ~ a#1@2 a#1@6 a#1@2", P: "d2@5 ~ d2@2 d2@6 d2@2", Q: "g2@5 ~ g2 ~ g2@5 ~ g2@2", R: "c2@5 ~ c2@2 c2@6 c2@2",
  S: "e2@5 ~ e2@2 e2@6 e2@2", T: "f2@5 ~ f2@2 f2@6 f2@2", U: "g#2@3 g#2 g2@3 g2", V: "c2@5 ~ c2 ~ c2@5 ~ c2 ~",
  W: "c2@5 ~ c2@2 d3@2 c3@2 a2@2 g2 ~", X: "g#2 g2", Y: "e2@13 ~ e2 ~", Z: "f2@13 ~ f2 ~", AA: "c2@5 ~ c2@2 c2@6 ~@2",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · acoustic guitar steel · "GUITAR"
const acoustic_guitar_steel = note(`<
  A B C D A E A F G H I J K L G M N C O P N Q R P K H C J G S T@2 K B I D A S K F K U I J A V K F W X Y F N Q Z F A B X
  D R AA G@2
>`.pickRestart({
  A: "e4@6 d4@9 ~, [c3,c4,g4]@15 ~", B: "[g3,b3,e4]@6 [f#3,b3,e4]@9 ~, e2", C: "[a#3,d4,g4]@6 [a3,d4,g4]@9 ~, g2",
  D: "g4@5 ~ g#4@9 ~, [f3,f4,c5]", E: "[g#3,c4,d#4]@6 g#2 ~ [b3,d4,f4,g4]@8, g#2@5 ~@11",
  F: "a3@5 ~ b3@9 ~, [g2,g3,d4]", G: "d4@5 ~ e4@9 ~, [c3,c4,g4]", H: "f#4@5 ~ g4@9 ~, [e3,e4,b4]",
  I: "a#3@6 a3@9 ~, [g2,g3,d4]@15 ~", J: "g#4@6 g4@9 ~, [f3,f4,c5]@15 ~", K: "[e4,g4,c5]@6 [d4,g4,c5]@9 ~, c3",
  L: "[g#3,c4,d#4]@6 g#2 ~ [b3,d4,f4,g4]@5 ~ [b3,d4,f4,g4] ~, g#2@5 ~@11", M: "d4@6 c4@9 ~, [a#2,a#3,f4]@15 ~",
  N: "f4@5 ~ g4@9 ~, [d#3,d#4,a#4]", O: "c4@6 a#3@9 ~, [g#2,g#3,d#4]@15 ~", P: "[b3,d4,g4]@6 [a3,d4,g4]@9 ~, g2",
  Q: "c4@5 ~ d4@9 ~, [a#2,a#3,f4]", R: "f#4@6 e4@9 ~, [d3,d4,a4]@15 ~",
  S: "[g#3,c4,d#4]@5 ~ [g#3,c4,d#4] ~ [b3,d4,f4,g4]@6 g2 ~, ~@8 g2@5 ~@3", // G# G7
  T: "[~@6 [c4,d4,g4] ~ d4@5 ~ e4@8 ~@4 d4@2 c4@2 g3@2, c3, ~@8 g4@23 ~, ~@8 c4@14 g3@7 ~@3]/2", // Csus2
  U: "g4@6 f#4@9 ~, [e3,e4,b4]@15 ~", V: "[g#3,c4,d#4]@8 [b3,d4,f4,g4]@6 g2 ~, ~@8 g2@5 ~@3",
  W: "[g3,a#3,d#4]@6 [f3,a#3,d#4]@9 ~, d#2", X: "a3@5 ~ a#3@9 ~, [g2,g3,d4]", Y: "a#3@5 ~ c4@9 ~, [g#2,g#3,d#4]",
  Z: "[f#3,a3,d4]@6 [e3,a3,d4]@9 ~, d2", AA: "[g#3,c4,d#4]@6 g#2 ~ [b3,d4,f4,g4]@6 g2 ~, g#2@5 ~@3 g2@5 ~@3",
})).s("gm_acoustic_guitar_steel").gain(0.42)

// chords · acoustic guitar steel · "GUITAR"
const acoustic_guitar_steel_2 = note(`<
  A B C D E F G H I J K D E L M N O P Q R S T U V W X Y Z AA AB AC@2 I AD K D G L M AE A AF C AG G L E AE AH AI AJ R AK
  AL AM AN AO AP AQ AR AS AT AU W
>`.pickRestart({
  A: "~@3 d4 e4 d4 c4 g3, ~ c3@7, ~@3 g3@10 ~@3, ~@4 c4@7 ~@5",
  B: "f#4 ~@5 b4@2, e3, ~@2 b4@7 ~ b3@6, ~ e4@3, ~@3 f#4@3 ~@2",
  C: "~@6 g3 ~, g2@7 ~, a#3@4 g3@7 ~@5, ~ d3@3 ~ d3@2 ~, ~@6 a#3@9 ~",
  D: "~@4 f4@2 g4@9 ~, f3@15 ~, g4 ~@3, ~@2 c4@7 ~@7", E: "~@4 c4@2 d4@9 ~, c3@15 ~, d4 ~@3, ~@2 g3@7 ~@7",
  F: "~@6 c4@2 ~@2 d3@4 g3 ~, g#2 [g2,b3], c4 g#3 ~@2, ~ d#3@3 ~@4", // G
  G: "d4 ~@5 g4@2, c3, ~@2 g4@7 ~ g3@6, ~ c4@3, ~@3 d4@3 ~@2",
  H: "~@3 a3 b3 a3 g3 d3, ~ g2@7, ~@3 d3@10 ~@3, ~@4 g3@7 ~@5",
  I: "~@6 d4@3 ~ e4@5 ~, c3@15 ~, e4@4 c4@11 ~, ~@2 g3@13 ~",
  J: "~@3 f#4 g4 f#4 e4 b3, ~ e3@7, ~@3 b3@10 ~@3, ~@4 e4@7 ~@5",
  K: "~@3 a3 a#3 a3 g3 d3, ~ g2@7, ~@3 d3@10 ~@3, ~@4 g3@7 ~@5",
  L: "~@2 d#3@4 g#3 ~@7 b3@2, [g#2,c4] g2, ~@2 b3 g3, ~@5 d3@3", // G#
  M: "~@6 c4 ~, c3@7 ~, e4@4 c4@7 ~@5, ~ g3@3 ~ g3@2 ~, ~@6 e4@9 ~",
  N: "~@6 a#3 ~, a#2@7 ~, d4@4 a#3@7 ~@5, ~ f3@3 ~ f3@2 ~, ~@6 d4@9 ~", O: "~@3 a#3@5, d#2", P: "~@3 d4@5, g2",
  Q: "~@3 c4@4 ~, g#2@15 ~, ~@2 d#3@13 ~, ~@2 g#3@5 ~", R: "~@6 f4@4 g4@2 f4@3 ~, g2@15 ~, ~@2 g3@13 ~",
  S: "~@6 d#4@4 g4@2 d#4@3 ~, d#2@15 ~, ~@2 g3@13 ~", T: "~@3 g#3@5, a#2",
  U: "~@6 f#4@4 a4@2 f#4@3 ~, d3@15 ~, ~@2 a3@13 ~", V: "f4@4 ~@2 [b3,f4]@9 ~, ~@4 g3@11 ~",
  W: "~@3 e4@4 ~, c3@15 ~, ~@2 g3@13 ~, ~@2 c4@5 ~", X: "e4@4 ~@2 [b3,e4]@9 ~, ~@4 g3@11 ~",
  Y: "~@6 g4@4 a#4@2 g4@3 ~, g2@15 ~, ~@2 a#3@13 ~", Z: "~@6 f4@4 g#4@2 f4@3 ~, f2@15 ~, ~@2 g#3@13 ~",
  AA: "~@6 e4@4 g4@2 e4@3 ~, c3@15 ~, ~@2 g3@13 ~", AB: "~@2 g#2@2 [d#4,g#4]@2 ~@6 [b3,f4] ~@3",
  AC: "[~@6 [e4,g4]@21 ~ [c4,e4,g4] ~@3, ~ c3@14 ~, ~@2 c4@11 ~@3]/2", // Em C
  AD: "~@6 e4 ~, e3@7 ~, g4@4 e4@7 ~@5, ~ b3@3 ~ b3@2 ~, ~@6 g4@9 ~",
  AE: "~@6 a3@3 ~ b3@5 ~, g2@15 ~, b3@4 g3@11 ~, ~@2 d3@13 ~", AF: "~@4 e4@2 f#4@9 ~, e3@15 ~, f#4 ~@3, ~@2 b3@7 ~@7",
  AG: "g4 ~@5 c5@2, f3, ~@2 c5@7 ~ c4@6, ~ f4@3, ~@3 g4@3 ~@2", AH: "~@3 g4@4 ~, d#3@15 ~, ~@2 a#3@13 ~, ~@2 d#4@5 ~",
  AI: "g4@4 ~@2 [d4,g4]@9 ~, ~@4 a#3@11 ~", AJ: "~@3 d#4@5, g#2",
  AK: "~@6 d#4 ~, ~@2 d#2@13 ~, ~@4 g3@11 ~, ~@3 a#3@4 ~", AL: "~@6 d4@4 f4@2 d4@3 ~, a#2@15 ~, ~@2 f3@13 ~",
  AM: "f#4@4 ~@2 [c4,f#4]@9 ~, ~@4 a3@11 ~", AN: "~@3 b3@4 ~, g2@15 ~, ~@2 d3@13 ~, ~@2 g3@5 ~",
  AO: "~@6 e4 ~, ~@2 c3@13 ~, ~@4 g3@11 ~, ~@3 c4@4 ~", AP: "~@6 e4@4 g4@2 e4@3 ~, e2@15 ~, ~@2 g3@13 ~",
  AQ: "~@3 a#3@4 ~, g2@15 ~, ~@2 d3@13 ~, ~@2 g3@5 ~", AR: "~@3 g#4@4 ~, f3@15 ~, ~@2 c4@13 ~, ~@2 f4@5 ~",
  AS: "~@3 d4@5, d3", AT: "~ c4@2 g#4 ~ g2 [b3,f4] ~", AU: "e4@4 ~@2 [c4,e4]@9 ~, ~@4 g3@11 ~",
})).s("gm_acoustic_guitar_steel").gain(0.16)

// chords · acoustic guitar steel · "GUITAR" · soft notes
const acoustic_guitar_steel_3 = note("<~@16 A B ~ C D E F G ~ H I F@2 ~@20 J K C ~ L M ~@2 C ~@2 N O P ~>".pickRestart({
  A: "d#4", B: "g4", C: "~@4 b3@11 ~", D: "~@4 a#3@11 ~", E: "d4", F: "~@4 c4@11 ~", G: "~@2 g2@13 ~, g4@3 ~@5, b3 ~@3",
  H: "~@2 e2@13 ~, g4@3 ~@5, b3 ~@3", I: "~@4 d4@11 ~", J: "~@2 g2@13 ~, a#4@3 ~@5, d4 ~@3", K: "g#4",
  L: "~@4 g#3@11 ~", M: "~@2 d3@13 ~, a4@3 ~@5, c4 ~@3", N: "f#4", O: "~@4 d#4@3 ~@9",
  P: "~@2 c3@13 ~, g4@3 ~@5, c4 ~@3",
})).s("gm_acoustic_guitar_steel").gain(0.1)

// chords · piano
const piano = note(`<
  A B C D E F G H A B C D E F G I J K L M J K N O A B C D E F G H A B C D E F G H A B C D E F G I J K L M J K N O A B C
  P E F G Q
>`.pickRestart({
  A: "[c3,e4,g4]@3 ~ [e4,g4]@3 ~ c5@2 ~@2 [e4,g4]@2 g3@2", B: "[c3,e4,g4] ~ [e4,g4] ~ c5 ~ [e4,g4] g3",
  C: "[e3,g4] ~ g4 [a#3,d4] a#4 ~ g4 [a#3,d4]", D: "[f3,f4] ~ f4 ~ [g#3,c4] g#4 f4 [g#3,c4]",
  E: "[c3,c4,e4]@2 ~ [c4,e4]@2 ~@3 b4@2 ~@2 [c4,e4]@2 g3@2", // C
  F: "[g#3,c4,d#4]@2 d#4@2 d#4@2 ~@2 [g2,f3,b3,e4]@2 d4@2 ~ d4@2 ~", G: "[c3,e3] ~ c3 d3 d#3 f3 g3 ~, c4@13 ~@3",
  H: "g3 ~ [g2,d4,f4] [d4,f4] [a2,d4,f4] ~ b2 ~, ~@11 [d4,f4]@2 ~@3", I: "a#3 ~ [d4,f4,g#4] ~ [a#3,d4,g4] ~ a#4 ~",
  J: "[d#3,c5]@2 a#4@2 [g3,a#3,a#4]@2 g4@2 a#4@3 ~ [a#3,d4,g4]@2 a#4@2", // Cm Gm
  K: "[g#3,a#4]@2 [c4,d#4,g#4]@2 g#4@3 ~ f4@2 g#4@2 [c4,d#4,a#4]@3 ~", // G#sus2 G# Cm7
  L: "a#4@2 g#4@2 g#4@2 f4@2 [c4,d#4,g#4]@3 ~ [c4,d#4,a#4]@3 ~", // G# Cm7
  M: "[g3,f4,g#4]@3 ~ [b3,d4,f4] g4 [b3,d4]@2 [g3,g4]@3 ~ g4@3 ~", // C# Bdim Bm G
  N: "[d3,c4,a4]@2 a4@2 [f#3,a3,a4]@2 a4@3 ~ [f#3,a3]@2 b4@3 ~", O: "[g3,b3,f4,a4]@3 ~ g4@3 ~ g3@2 f3@2 e3@2 d3@2",
  P: "[f3,f4] ~ f4 ~ [g#3,c4] g#4 f4 ~", Q: "[c3,g3,e4,c5] c5!2 [c3,g3,c5]@4 ~",
})).s("gm_piano").gain(0.51)

// other · acoustic guitar steel
const acoustic_guitar_steel_4 = note("<~@41 [~@12 g4@3 ~] ~ [~ g#4] ~@20>").s("gm_acoustic_guitar_steel").gain(0.46)

// other · electric guitar jazz
const electric_guitar_jazz = note("<~@40 A B C D E F G H ~@16>".pickRestart({
  A: "g3@3 ~ g3@4 c4@4 g3@3 ~", B: "g3@3 ~ g3@3 ~ c4@3 g3@3 ~@2", C: "g3@3 ~ g3@3 ~ a#3@3 ~ g3@3 ~",
  D: "g3@3 f3@4 g#3@8 ~", E: "e3@3 ~ e3@3 ~ g3@3 e3@4 ~", F: "d#3@8 d3@5 ~ c3 ~", G: "c3@9 ~@3 g2@2 ~@2", H: "d2@3 ~@5",
})).s("gm_electric_guitar_jazz").gain(0.23)

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

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!7 ~ [~ x ~ x]!7 ~@17 [~ x ~ x]!7 ~ [~ x ~ x]!7 ~@17>").gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@15 A B@7 C B@7 ~@8 A ~@7 A B@7 C B@7 D>".pickRestart({
  A: "~@8 x!2 ~@2 x ~ x!2", B: "~ x ~ x", C: "~@2 x ~@2 x!2 ~", D: "~ x",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!63 [~ x ~@2]>").gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@7 [~@5 x!2 ~] ~@23 [~@5 x!2 ~] ~@32>").gain(0.35)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A B C B A@2 C ~ A@2 C B A@3 ~ A@4 D A@2 E A@7 ~ A ~ A@3 ~ F ~ A@3 B A@3 ~ A@2 D A@4 E A F A C D A D ~
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@7 x", C: "~@3 x ~ x ~ x", D: "~ x ~ x ~@3 x", E: "~ x ~@6", F: "~@5 x ~ x",
})).gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 [~@3 x!2 ~@3] ~@23 [~@3 x!2 ~@3] ~@32>").gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~@15 A ~@4 B ~@2 C ~@9 D ~@3 D E A ~@7 A ~@2 B ~@4 C ~ F ~ G B ~ B A>".pickRestart({
  A: "~@2 x!2 ~@4", B: "~@5 x ~@2", C: "~@3 x ~@3 x", D: "~@7 x", E: "~@3 x ~@4", F: "~ x ~ x ~@4", G: "~ x ~@6",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@7 [~ x!2 ~@5] ~@23 [~ x!2 ~@5] ~@32>").gain(0.35)

// drums · crash
const crash = s("cr").struct("<A ~@6 B A ~@7 A ~@14 B A ~@7 A ~@7 A ~@15>".pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.35)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@7 A ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@7 A ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B
>`.pickRestart({
  A: "~@4 x!2 ~@2", B: "~ x",
})).gain(0.3)

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

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct(`<
  A B ~@3 A ~ C D ~@2 A ~ B A ~@7 A E A D A C D F ~@5 B ~@2 A ~@4 B G ~ B E ~@6 A ~@9
>`.pickRestart({
  A: "~ x ~@6", B: "~@5 x ~@2", C: "~@5 x ~ x", D: "~ x ~@3 x ~ x", E: "~ x ~@3 x ~@2", F: "~ x ~ x ~ x ~@2",
  G: "~@7 x",
})).gain(1.26)

stack(
  bass, acoustic_guitar_steel, acoustic_guitar_steel_2, acoustic_guitar_steel_3, piano, acoustic_guitar_steel_4,
  electric_guitar_jazz, kick, rim, snare, clap, low_tom, hihat, hihat_soft, mid_tom, open_hat, high_tom, crash,
  tambourine, cabasa, cabasa_soft
)

More by The Beatles