Strudelify
Best Of My Love cover art

1975 · On the Border

Best Of My Love

Eagles

KeyC majorTempo88 bpm
0:00/0:00
// Best Of My Love — Eagles
// 88 bpm, 4/4, key C major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 3 "STEEL GUITAR" named as a guitar, played on acoustic guitar steel (its epiano1 patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 93 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(88/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 · "BASS"
const bass = note(`<
  ~@4 A B C D E B C D E B C D E F G H I J K L M B C D E B C D E F G H N I J K L M B C D E B C D E O P Q R S T U V B C D
  E B C D E F G H N I J K L M B C D E B C D E B C D E B C D E W@2
>`.pickRestart({
  A: "~ e3 d3 c3 a2 g2 e2 d2", B: "c2@5 ~ c2@2 g2@5 ~ g1@2", C: "c2@4 ~@2 c2@2 g2@5 ~ g2@2", D: "d2@2 ~ d2 a2@3 a1",
  E: "d2@4 ~@2 d2@2 a2@4 g2@3 ~", F: "e2@4 ~@2 e1 ~ e1@4 e2@4", G: "d2@4 ~@2 d2 ~ d2@7 ~",
  H: "e2@5 ~ e2 ~ e2@2 e1@2 e2@2 e1@2", I: "g1@7 ~", J: "c2@5 ~ c2 ~ c2@6 ~@2", K: "d2@4 ~@2 d2@2 a1@4 d2@3 ~",
  L: "c2@4 ~@2 c2@2 g2@4 c2@3 ~", M: "g2@4 f2@4 e2@4 d2@3 ~", N: "d2@5 ~ d2 ~ d2@2 a1@2 d2@3 ~",
  O: "f2@4 ~@2 f2 ~ f2@6 c2@2", P: "f1@5 ~ f1 ~ f1@5 ~ f1@2", Q: "c2@4 ~@2 c2 ~ c2@5 ~ g1@2",
  R: "c2@4 ~@2 c2 ~ c2@5 ~ c2@2", S: "f2@5 ~ f2 ~ f2@6 f1@2", T: "f2@5 ~ f2 ~ f2@5 ~ f2 ~", U: "d2",
  V: "g1@10 g2@2 f2@2 d2 ~", W: "[c2@29 ~@3]/2",
})).s("gm_acoustic_bass").gain(0.36)

// chords · piano
const piano = note(`<
  ~ A B C D A B C D A B C D A B C D E F G H I J K L A B C D A B C D E F G M H I J K L A B C D A B C D N@2 O@2 P@2 Q R A
  B C D A B C D E F G M H I J K L A B C D A B C D A B C D A B C D S@2
>`.pickRestart({
  A: "[g3,e4]@2 [g3,c4,e4]@2 ~@2 [g3,c4,e4]@9 ~, c3@15 ~, b3 ~@3", // C
  B: "[c3,g3,b3,e4]@2 [c3,g3,c4,e4]@4 [c3,g3,c4,e4]@9 ~", C: "[d3,f3,g3,b3,e4] [d3,a3,c4,e4]@2 [d3,a3,c4,e4]@5",
  D: "[d3,g3,b3,e4] [d3,a3,c4,e4]@2 [d3,a3,c4,e4]@4 ~", E: "g3@5 ~ [b3,d4]@2, e3, [b3,d4]@3 ~, ~@5 g3@3",
  F: "~@5 g4@3, [d3,f3,a3,c4], ~@3 e4@5", G: "e3@5 ~ [g3,b3,d4]@2, [g3,b3,d4]@3 ~, ~@5 e3@3", H: "[g2,f3,a3,c4]",
  I: "[c3,e3,g3,c4,e4]", J: "d4@3 [c4,e4]@4 ~, [d3,f3,a3]@7 ~", K: "g3@3 ~ g4@4, [c3,e3,c4,e4], ~@3 g3@5",
  L: "[g4,b4]@2 [f4,a4]@2 [e4,g4]@2 [d4,f4] ~", M: "[c4,e4]@3 d4 c4@3 ~, [d3,f3,a3]@15 ~",
  N: "[~ [f4,g#4], [f2,f3,g#3,c4]]/2", O: "[e4@3 e4@5 [c3,e3,g3,c4,e4,g4]@8, [c3,e3,g3,c4] ~, ~@3 b3@13]/2",
  P: "[c4 [c4,f4], [f2,f3,g#3]]/2", Q: "[d3,f3,a3,c4,e4]", R: "[g2,g3,b3]@15 ~", S: "[c2,g2,c3,g3,b3,e4]/2",
})).s("gm_piano").gain(0.31)

// chords · acoustic guitar steel · "STEEL GUITAR"
const acoustic_guitar_steel = note(`<
  ~@4 A B C D@2 E@2 ~@2 F@2 ~ G H I J K ~@2 L M N ~@3 F@2 ~ O P Q R S K ~@2 T U V@2 W@2 X@2 Y ~ Z@2 AA AB AC@2 AD AE N
  ~@3 F@2 ~ O P Q R S K ~@2 T U V@2 W@2 X@2 Y ~ V@2 W@2 X@2 Y AF AG@2
>`.pickRestart({
  A: "~@2 e5 f5 e5 c5 ~ g4, ~@3 a4", B: "~@3 g4@3 c5@2, c4, e4@3 ~", C: "~@2 b4 g4, e5@13 ~@3, ~@4 d5@9 ~@3",
  D: "[g4@13 ~@11 d5@2 b4@2 g4@2 a4@2, ~@7 g4@7 ~@2]/2", E: "[c4@19 ~@13]/2", F: "[c4@19 ~@13, a4 ~@31]/2",
  G: "~@5 c5 e5@2, ~@2 d5 ~", H: "[g4,b4,d5]", I: "~@7 c5, a4, c5@3 d5, ~ f5, ~@5 e5@3", J: "d5@13 ~@3",
  K: "[f4,a4]@12 g4@3 ~", L: "~@4 d5@8 c5@3 ~", M: "c6 ~@2 d5, ~@2 a5@5 ~, ~@4 g5@3 ~, ~@5 e5@2 ~", N: "d5@3 ~",
  O: "~@6 e5 ~, ~@4 d5@3 ~, ~@5 c5@2 ~", P: "[g4,b4,d5]@7 ~", Q: "[a4,c5]@7 ~@3 e5@2 d5@2 c5 ~, ~@2 f5 ~", R: "d5@7 ~",
  S: "~@2 e5 ~ e5 c5@2 a4, ~@3 f5@2 ~@3", T: "~@4 g5@3 ~ g5@8", U: "c6 b5 ~ g5 f5@3 ~, ~ a5 ~@2",
  V: "[[c5,e5]@13 ~ e5@2]/2", W: "[f5@5 ~@3]/2", X: "[[e4,g4,b4]@19 ~ b4@2 c5@2 b4@2 g4@2 e4@3 ~]/2", Y: "e4@7 ~",
  Z: "[[f4,g#4,c5]@21 ~ c5@8 ~@2]/2", AA: "~@6 e4@9 ~, ~@2 b4@13 ~, ~@4 g4@11 ~", AB: "~ e4, g4",
  AC: "[~@8 f5@7 ~, [f4,g#4]@15 ~, ~@5 c5@10 ~]/2", AD: "c5 b4", AE: "g4@13 ~@3", AF: "~@8 e5@2 f5@2 e5@3 ~",
  AG: "[~@9 b4@16 ~@7, b5@25 ~@7, ~@3 g5@22 ~@7, ~@6 e5@19 ~@7]/2",
})).s("gm_acoustic_guitar_steel").gain(0.41)

// chords · acoustic guitar steel · "RHYTHM GUITAR"
const acoustic_guitar_steel_2 = note(`<
  ~ A@2 B C A@2 B C A@2 B C A@2 B C D E F G H I J K A@2 B C A@2 B C D E F L G H I J K A@2 B C A@2 B C M@2 N@2 O P Q R
  A@2 B C A@2 B C D E ~ L G H I J K A@2 B C A@2 B C A@2 B C A@2 B C S@2
>`.pickRestart({
  A: "[[c3,e3,g3,e4] [c3,e3,g3,c4,e4]@2 c3 c3@2 ~ e3 [c3,e3,g3,e4] [c3,e3,g3,c4,e4]@2 [e3,g3,c4,e4]@2 [c3,e3,g3,c4] [c3,e3,g3]!2, b3 b3, ~@3 [g3,c4,e4]@3 c4@3 ~@5 [c4,e4]@2, ~@3 e3@2 ~ [c3,g3,e4]@2 ~@8]/2", // C
  B: "[f3,e4] [f3,a3,c4,e4]@2 f3@2 ~@2 f3, [g3,b3], ~@3 [a3,c4,e4]@3 [a3,c4,e4]@2, ~@5 f3@2 ~", // Fmaj7 G Am
  C: "[f3,e4]@2 [f3,a3,c4,e4]@4 f3@4 ~@2 [a3,c4,e4]@2 f3 ~, [g3,b3]@3 [a3,c4,e4]@3 ~@2, ~@5 f3@2 ~", // Fmaj7 Am G Am
  D: "[e2,b2,e3,g3,b3] ~ [e3,g3,b3]!2 g3@2 [e3,g3,b3]!2, ~@3 [e2,b2]@13", // Em E5
  E: "[d3,f3,a3] [d3,f3,a3]@2 [d3,f3,a3]@2 [d3,f3,a3]@2 [d3,f3,a3]", // Dm
  F: "[e2,e3,g3,b3] ~ [e3,g3,b3] [e3,g3,b3]@2 [e3,g3,b3]!3, ~@3 e2@13", // Em
  G: "~@4 e4@3 ~, g2@7 ~, ~ f3@6 ~, ~@2 a3@5 ~, ~@3 c4@4 ~",
  H: "[g3,c4,e4]@2 e4 [c4,e4] [c4,e4]@2 [c3,e3,g3] ~, [c3,e3]@3 [c3,g3]@3 ~@2, ~@3 e3@2 ~ [c4,e4]@2", // C C5 C
  I: "~@3 [d3,f3,a3]@2 [d3,f3,a3] [d3,f3,a3,c4]@2, [d3,f3,a3,c4]@3 c4@3 ~@2, ~ d4@7", // Dm Dm7
  J: "c4 ~ [c3,e3] [c3,e3,g3]@2 ~ c4!2, g3@3 ~@2 e3@3, [c3,e3] ~@3, ~ c4@2 [c4,e4]@3 e4@2", // C
  K: "[g2,d3,g3,b3]@3 ~ [g3,b3]@2 [g3,b3]@2 ~@4 [g3,b3,d4]@2 ~@2, ~@3 [g2,d3]@3 [g2,d3]@4 [g2,d3]@4 ~@2, ~@2 [g3,b3] ~", // G G5 G
  L: "[d3,f3,a3,c4,e4]@3 ~ [c4,e4]@2 [d3,f3,a3]@2 [d3,f3,a3]@2 [d3,f3,a3]@2 [d3,f3,a3]@2 [d3,f3,a3]@2, ~@3 [f3,a3]@3 e4@10, ~@3 c4@3 c4@2, ~ d4", // Dm7 C Dm F
  M: "[[f3,g#3,c4]@2 [f3,g#3,c4] [f3,g#3,c4]@2 ~@2 c4 [f2,g3,c4] [f3,g#3,c4]@2 ~@3 [f3,g#3,c4]@2, f2@3 f2@3 f2@2 ~ f2@4 f2@3, ~@5 c4@2 f3@2 ~@2 [f3,g#3,c4]@3 ~@2]/2", // Fm Fsus2 Fm
  N: "[[g3,b3]@2 ~@4 [c3,e3,g3]@2 [g3,b3]@4 b3@4 [c3,e3,g3,b3]@3 [e3,g3]@3 [c3,e3,g3,b3]@2 [c3,e3,g3,b3]@4 [c3,e3,g3,b3]@4, [c3,e3]@3 c4@13, ~ b3@3 [c3,e3]@4 ~@8]/2", // G C G Cmaj7 Em Cmaj7 C
  O: "[f2,f3,g#3,c4] ~ [f3,g#3,c4] [f3,g#3,c4]@2 g#3 [f2,c4]@2, ~@3 f2@3 f2@6 [f3,g#3]@2 ~@2", // Fm F5 Fm
  P: "[f2,f3,g#3,c4] ~ [f3,c4] [f3,g#3,c4]!3 [f2,f3,g#3,c4]@2, ~@3 f2@3 f2@6 ~@4", Q: "[d3,f3,a3]@13 ~@3",
  R: "~@12 d4@3 ~, g2@8 c4@7 ~, ~@2 d3@13 ~, ~@4 f3@11 ~, ~@6 a3@9 ~", S: "[[c3,e3,g3,b3]@13 ~@3]/2",
})).s("gm_acoustic_guitar_steel").gain(0.31)

// chords · acoustic guitar steel · "RHYTHM GUITAR" · soft notes
const acoustic_guitar_steel_3 = note(`<
  ~ A B ~@2 A B ~@2 A B ~@2 A B ~@2 C ~ D ~ E ~ F ~ A B ~@2 A B ~@2 C ~ D G ~ E ~ F ~ A B ~@2 A B ~@2 H@2 I J K L ~@2 A
  B ~@2 A B ~@2 C ~@2 G ~ E ~ F ~ A B ~@2 A B ~@2 A B ~@2 A B ~@4
>`.pickRestart({
  A: "~@5 e3@2 ~", B: "~@3 c3@2 e4 ~@2", C: "~ [e3,g3,b3] ~@2 e3!2 ~@2, ~@2 b3 ~", D: "~ [e3,g3,b3] ~@6",
  E: "~@2 c4 ~@2 e3 ~ [c3,e3,g3], ~@3 g3@3 ~@10", F: "~@5 [c3,g3]@3", G: "~@3 d3@3 ~@10, ~ [c4,e4] ~@6",
  H: "[~@5 [f3,g#3] g#3@3 ~@7, ~@6 f3 ~@9]/2", I: "~@3 g3@3 ~@6 g3@4", J: "~@2 b3 ~@5, ~ b3 ~@6, ~@3 c3@3 ~@10",
  K: "~ [f3,g#3,c4] ~@3 [f3,c4] ~ [f3,g#3]", L: "~ [f3,c4] ~@6, ~ g#3@2 ~@5",
})).s("gm_acoustic_guitar_steel").gain(0.15)

// drums · kick
const kick = s("bd").struct("<~@5 A@15 B A@16 B A@18 B@2 A@16 B A@16 C ~>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@6 x", C: "x",
})).gain(0.51)

// drums · rim
const rim = s("rim").struct("<~@5 A@15 ~ A@16 ~ A@18 ~@2 A@16 ~ A@16 ~@2>".pickRestart({
  A: "~ x ~ x",
})).gain(0.51)

// drums · hihat
const hihat = s("hh").struct("<A B@18 C D B@16 D B@18 D@2 B@16 D B@15 E ~@2>".pickRestart({
  A: "x!4", B: "~ x ~ x", C: "~@2 x ~@2 x!2 ~", D: "x ~@4 x!2 ~", E: "~@4 x ~@3 x ~ x ~ x!3 ~",
})).gain(0.51)

// drums · open hat
const open_hat = s("oh").struct("<~@19 A B ~@16 B ~@18 B@2 ~@16 B ~@15 C D ~>".pickRestart({
  A: "~@7 x", B: "~@2 x ~@4 x", C: "~@2 x ~@3 x ~@8 x", D: "x",
})).gain(0.51)

// drums · ride
const ride = s("rd").struct("<~@20 A ~@16 A ~@18 A@2 ~@16 A ~@16 A ~>".pickRestart({
  A: "x",
})).gain(0.51)

stack(
  bass, piano, acoustic_guitar_steel, acoustic_guitar_steel_2, acoustic_guitar_steel_3, kick, rim, hihat, open_hat, ride
)

More by Eagles