Strudelify
Beautiful cover art

1972 · Don Quixote

Beautiful

Gordon Lightfoot

KeyB majorTempo112 bpm
0:00/0:00
// Beautiful — Gordon Lightfoot
// 112 bpm, 4/4, key B major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 89 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/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 nylon
const acoustic_guitar_nylon = note(`<
  A B C D A B C D E F G H I J K L M N O P Q R S T U V W@2 E F G H I J K L M N O P Q R S T U V W@2 E F G H I J K L M N O
  P Q R S T U V X@2 Y Z AA@2 AB@2 AC@2 AD@2 AE AF AG@2 AH@2 AI@2 AJ@3
>`.pickRestart({
  A: "[e4,g4]@2 g4 e4 g4@2 [c3,b4]@2 g4@2 e4@2 g4@2 [c3,b4]@2, c4, c3@3 ~ c3@3 ~", // Em Cmaj7
  B: "[e4,g4]@2 g4 e4 g4@2 c3@2 ~@2 g4@2 e4@2 [c3,g4]@2, c4, c3@3 b4@2 ~@3, ~@4 c3@3 ~", // Em C5
  C: "[d#4,g4]@2 g4 d#4 g4@2 [g#2,a#4]@2 g4@2 d#4@2 g4@2 [g#2,a#4]@2, c4, g#2@3 ~ g#2@3 ~", // D# G#sus2
  D: "[d#4,g4] g4 d#4 g#2 ~ g4 d#4 [g#2,g4], [g#2,d5]@3 c5@5, ~@3 [d#4,g4]@2 ~@3, ~@4 g#2@3 ~", // D# G#maj7 G#dim D#
  E: "~@2 b3 g3 ~@2 [c3,e4]@2 ~@2 g3@2 ~@2 [c3,f4]@2, c3@3 ~ [c3,e4]@3 ~, ~ b3 ~ b3", // C F5 C
  F: "g4 [b3,e4,a4]@2 c3 ~ e4 b3 [c3,e4], c3@3 g4@5, ~@4 c3@3 ~", // Esus4 C
  G: "~@2 d#4 a#3 g4@2 [c3,g4]@2 ~@2 a#3@2 ~@2 [c3,a4]@2, c3@3 ~ [c3,g4]@3 ~, ~ d#4 ~ d#4", // C5 F C5
  H: "~@2 a#4 [c3,c5] d#4 a#3 d#4 [c3,a#3], c3@3 ~ c3@3 ~, ~ [a#3,d#4,g4]@3 g4@2 a#4@2", // C C7 D#
  I: "a#4 [c4,e4,a4] ~ f2 ~ c4 e4 [f2,c4], f2@3 ~ f2@3 ~, ~ a4@2 ~, ~ [c4,e4] ~@2", // Am F5 C
  J: "a4@2 c5 f2 ~ c4 e4 [f2,c4], [f2,c4,e4]@3 a4@3 ~@2, ~@3 [c4,e4]@2 ~@3, ~@4 f2@3 ~", // F5 Fmaj7 C
  K: "g#4@2 a#4 f2 ~ c4 d#4 [f2,c4], [f2,c4,d#4]@3 g#4@5, ~@3 [c4,d#4]@2 ~@3, ~@4 f2@3 ~", // F5 F7 Cm
  L: "~@2 d#4 c4 ~@2 [f2,g#4]@2 a#4 g#4 ~@4 [f2,f4]@2, f2@3 ~ f2@3 ~, ~ d#4 c4@2, ~@2 d#4!2", // Fm F
  M: "g4 c4 e4 [c3,g4] b4 g4 e4 [c3,g4], c3@3 ~ c3@3 ~", N: "~ g4 e4 [c3,g4] b4 g4 e4 [c3,g4], c4, c3@3 ~ c3@3 ~",
  O: "~ g4 d#4 [c3,g4] a#4 g4 d#4 [c3,g4], c4, c3@3 ~ c3@3 ~", // C5
  P: "~@2 g4 [c3,a4] a#4 c5 d5 [c3,d#5], c3@3 ~ c3@3 ~, ~ [a#3,d#4]@3 [d#4,g4]@4", // F Cm D#5 D#
  Q: "d5 c5 ~ f2 ~ [e4,a4]@2 [f2,c4], [e4,a4] ~, f2@3 ~ f2@3 ~, ~ c5@2 ~", // A5 F5 A5
  R: "c5 d5@2 f2 ~ [e4,a4]@2 [f2,c4], [f2,e4,a4]@3 c5@4 ~, ~@3 [e4,a4]@2 ~@3, ~@4 f2@3 ~", // A5 F5 Fmaj7 A5
  S: "~ g#4 a#4 f2 ~@3 f2, [f2,c4,d#4]@3 g#4@5, ~@3 [c4,d#4]@2 [c4,d#4]@3, ~@4 f2@3 ~", // F7 Cm
  T: "~@3 [f2,g#4] a#4 d#4 c4 [f2,d#4], f2@3 ~ f2@3 ~, ~ [c4,d#4]@3 ~ g#4@3", // Fm F7 Cm
  U: "f4 ~@2 c3 ~ e4 b3 [c3,e4], [g3,b3] ~, c3@3 ~ c3@3 ~, ~ g4@3 g4@4", // C G
  V: "~ g4 e4 [c3,g4] b4 g4 e4 [c3,g4], c3@3 ~ c3@3 ~", W: "~ d#4 c4 [g#2,d#4] g4 d#4 c4 [g#2,d#4], g#2@3 ~ g#2@3 ~",
  X: "~ d#4 a#3 [c3,d#4] g4 d#4 a#3 [c3,d#4], c3@3 ~ c3@3 ~", // Cm
  Y: "a4 c5@2 f2 ~@3 [f2,c5], [f2,c4,e4]@3 a4@3 ~@2, ~@3 [c4,e4]@2 [c4,e4]@3, ~@4 f2@3 ~", // F5 Fmaj7 C
  Z: "d5@2 c5 f2 ~@3 f2, [e4,a4]@4 f2@3 ~, f2@3 c5@3 d5@2, ~@5 [e4,a4]@3", // A5
  AA: "[~@2 g4 e4 g4@2 [c3,b4]@2 g4@2 e4@2 g4@2 [c3,b4]@2 ~@2 g4 e4 ~@2 [c3,d5]@2 ~@2 g4@2 ~@2 [c3,e5]@2, e5@11 ~@5, c3@3 ~ c3@3 ~ c3@3 ~ [c3,e5]@3 ~, ~@5 g4 ~ b4]/2", // Cmaj7 Csus2 C
  AB: "[d5 ~ a4 [c3,f4] c4 a4 f4 [c3,c4] ~ a4 f4 [c3,c4] a4 f4 ~ [c3,a4], c3@3 ~ c3@3 ~ c3@3 ~ c3@3 ~, ~ c5@13 c4@2]/2", // F5 C F
  AC: "[a4 g4 ~ g2 ~ c4 f4 [g2,c4] ~ [c4,f4] ~ g2 ~@3 g2, g2@3 ~ g2@3 ~ g2@3 ~ g2@3 ~, ~ g4@5 ~ a4, ~@2 [c4,f4]@2 ~@6 [c4,f4]@2 ~ [c4,f4]@3]/2", // C5 F5
  AD: "[a4 g4 ~ g2 ~ c4 f4 [g2,c4] ~ [c4,f4] ~ g2 ~ d4 ~ g2, g2@3 ~ g2@3 ~ g2@3 ~ g2@3 ~, ~ g4@5 ~@2, ~ [c4,f4] ~@3 [c4,f4] ~ d4]/2", // C5 F5
  AE: "d4 c4 ~ c3 ~ g4 e4 [c3,g4], c3@3 ~ c3@3 ~, ~ c4@3", // C5
  AF: "~@2 g4 e4 g4@2 [c3,b4]@2 g4@2 e4@2 g4@2 [c3,b4]@2, c3@3 ~ c3@3 ~", // Cmaj7
  AG: "~@2 d#4 c4 d#4@2 [g#2,g4]@2 d#4@2 c4@2 d#4@2 [g#2,g4]@2, g#2@3 ~ g#2@3 ~", // G#maj7
  AH: "~@2 g4 e4 g4@2 [c3,b4]@2 g4@2 e4@2 g4@2 b4@2, c3@3 ~ c3@2 c3@2", // Cmaj7
  AI: "~@2 d#4 c4 d#4@2 [g#2,g4]@2 d#4@2 c4@2 d#4@2 g4@2, g#2@3 ~ g#2@2 g#2@2", // G#maj7
  AJ: "[~ b4@23, [c3,c4], ~ [e4,g4]@47]/3", // C Em
})).s("gm_acoustic_guitar_nylon").gain(0.57)

// bass · acoustic bass
const bass = note(`<
  A@2 B C D A B@2 A@2 E D F G@3 A@2 D@2 G@4 A E C H A@4 G I@2 G A@4 J I F G A@2 B K ~@30 D@2 B@2 A@2 B L M@2 ~
>`.pickRestart({
  A: "c2@5 ~ c2@2 c2@5 ~@3", B: "g#1@5 ~ g#1@2 g#1@5 ~@3", C: "g#1@3 g#1 g#1@3 ~", D: "c2@3 c2 c2@3 ~",
  E: "c2@5 ~ c2@2 c2@6 ~@2", F: "f2@6 f2@2 f2@5 ~@3", G: "f2@5 ~ f2@2 f2@5 ~@3",
  H: "g#1@6 g#1@2 g#1@2 d#2 f2 d#2@2 d#2@2", I: "f2@3 f2 f2@3 ~", J: "f2@5 ~ f2@2 f2@6 ~@2",
  K: "g#1@5 ~ g#1@2 g#1@5 ~ d#2@2", L: "g#1@5 ~ g#1@2 g#1@6 ~@2", M: "c2/2",
})).s("gm_acoustic_bass").gain(0.4)

// chords · epiano1 · Cmaj7 G#maj7 Cmaj7 G#maj7 C5 G#maj7
const epiano1 = note(`<
  [~ [g3,b3,c4,e4] ~ [g3,b3,c4,e4]]!2
  [~ [d#4,g#4,c5,g5] ~ [d#4,g#4,c5,g5]]!2
  [~ [g3,b3,c4,e4] ~ [g3,b3,c4,e4]]!2
  [~ [d#4,g#4,c5,g5] ~ [d#4,g#4,c5,g5]]!2
  ~@39
  [[g4,c5] ~@3 [g4,g#4,c5]@5 ~@7]
  ~@41
>`).s("gm_epiano1").gain(0.36)

// chords · piano
const piano = note(`<
  ~@8 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 E F A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 E ~ G H I J K@2 L@2 G H J I K@2 M N H
  G J I K O P H Q@2 R S R T A@2 E@2 A@2 E@2 U ~@2
>`.pickRestart({
  A: "~@7 c4, e3, ~ g3@2 g3@3 g3@2, ~@2 c4@3 c4@2 ~, ~@8 e4@7 ~",
  B: "~@7 c4, d#3, ~ g3@2 g3@3 g3@2, ~@2 c4@3 c4@2 ~, ~@8 d#4@7 ~",
  C: "~@7 f4, a3, ~ c4@2 c4@3 c4@2, ~@2 f4@3 f4@2 ~, ~@8 a4@7 ~",
  D: "~@7 f4, g#3, ~ c4@2 c4@3 c4@2, ~@2 f4@3 f4@2 ~, ~@8 g#4@7 ~",
  E: "~@7 g#4, c4, ~ d#4@2 d#4@3 d#4@2, ~@2 g#4@3 g#4@2 ~, ~@8 c5@7 ~",
  F: "~@3 d#4 ~@3 c5, c4!2, ~ d#4@2 ~@2 d#4@3, ~ g#4 ~ g#4", G: "[g3,b3,c4,e4]!7 [g3,b3,e4]",
  H: "[g3,b3,c4,e4]!7 [g3,e4]", I: "[g3,a#3,c4,d#4]!7 [g3,d#4]", J: "[g3,a#3,c4,d#4]!7 [g3,a#3,d#4]",
  K: "[c4,f4,a4,e5]!7 [c4,a4,e5]", // Fmaj7 Am
  L: "[c4,f4,g#4,d#5] ~ [c4,f4,g#4,d#5]@2 [c4,f4,g#4,d#5]@2 [c4,f4,g#4,d#5]@2 [c4,f4,g#4,d#5]@2 [c4,f4,g#4,d#5]@2 [c4,f4,g#4,d#5]@2 [c4,g#4,d#5]@2", // Fm7 G#
  M: "[c4,f4,g#4,d#5] ~ [c4,f4,g#4,d#5]@2 [c4,f4,g#4,d#5]@2 [c4,f4,g#4,d#5]@2 [c4,f4,g#4,d#5]@2 [c4,f4,g#4,d#5]@2 [c4,f4,g#4,d#5]@2 [c4,g#4]@2", // Fm7 Fm
  N: "[c4,f4,g#4,d#5]!7 [c4,g#4,d#5]", // Fm7 G#
  O: "[c4,f4,a4,e5] ~ [c4,f4,a4,e5]@2 [c4,f4,a4,e5]@2 [c4,f4,a4,e5]@2 [c4,f4,a4,e5]@2 [c4,f4,a4,e5]@2 [c4,f4,a4,e5]@2 [c4,a4,e5]@2", // Fmaj7 Am
  P: "[g3,b3,c4,e4] ~ [g3,b3,c4,e4]@2 [g3,b3,c4,e4]@2 [g3,b3,c4,e4]@2 [g3,b3,c4,e4]@2 [g3,b3,c4,e4]@2 [g3,b3,c4,e4]@2 [g3,e4]@2", // Cmaj7 C
  Q: "[c4,f4,a4]!7 [c4,a4]", R: "[d4,g4,c5,f5]!7 [d4,c5,f5]", S: "[d4,g4,c5,f5]!7 [d4,c5]",
  T: "[d4,g4,c5,f5] ~ [d4,g4,c5,f5]@2 [d4,g4,c5,f5]@2 [d4,g4,c5,f5]@2 [d4,g4,c5,f5]@2 [d4,g4,c5,f5]@2 [d4,g4,c5,f5]@2 [d4,c5]@2", // Dm7 D7
  U: "~@8 e4@7 ~, e3, ~ g3@2 ~@5, ~@2 c4@3 ~@3",
})).s("gm_piano").gain(0.26)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note("<~@47 [~@13 c5 ~ g#4, ~@11 c4@2 ~ c5@2, ~@3 g4] ~@41>")
  .s("gm_acoustic_guitar_steel").gain(0.42)

// bass · fretless bass
const bass_2 = note("<~@48 A@2 B@2 C@4 A@2 B@2 C@3 D A B@3 C@2 B A E F G@4 ~@11>".pickRestart({
  A: "c2@3 c2!2 c2@2 g2", B: "c2@5 ~ c2@2 c2@2 c2@4 g2@2", C: "f2@5 ~ f2@2 f2@2 f2@4 c3@2", D: "f2@3 f2!2 f2@2 c3",
  E: "c2@3 c2!2 c2@2 c3", F: "c2@5 ~ c2@2 c2@2 c2@4 c3@2", G: "g1@5 ~ g1@2 g1@2 g1@4 d2@2",
})).s("gm_fretless_bass").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  [x ~@2 x!2 ~@2 x]!27
  [x!2]
  [x ~@2 x!2 ~@2 x]!19
  [x ~@5 x ~ x ~@5 x!2]
  [x ~@2 x!2 ~@2 x]!38
  ~@3
>`).gain(0.29)

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!27 [~ x ~@2] [~ x ~ x]!19 ~@31 [~ x ~ x]!8 ~@3>").gain(0.29)

// drums · snare
const snare = s("sd").struct("<~@48 [~ x ~ x]!30 ~@11>").gain(0.29)

// drums · low tom
const low_tom = s("lt").struct("<~@27 [~@12 x!4] ~@19 [~@12 x!3 ~] ~@41>").gain(0.22)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!27 [x!3 ~ x ~@3] [x!8]!19 [~@3 x ~@12] ~@30 [x!8]!8 ~@3>").gain(0.22)

// drums · mid tom
const mid_tom = s("mt").struct("<~@27 [~@10 x!2 ~@4] ~@19 [~@10 x!2 ~@4] ~@41>").gain(0.22)

// drums · open hat
const open_hat = s("oh").struct("<~@27 [~@3 x ~@4] ~@19 [x!2 ~@2] ~@41>").gain(0.25)

// drums · high tom
const high_tom = s("ht").struct("<~@47 [~@6 x ~ x!2 ~@6] ~@41>").gain(0.29)

// drums · crash
const crash = s("cr").struct("<~@27 [~ x] ~@58 x ~@2>").gain(0.22)

// drums · ride
const ride = s("rd").struct("<~@48 [x!8]!30 ~@11>").gain(0.22)

// drums · tambourine
const tambourine = s("tb").struct("<~@48 [~@3 x]!30 ~@11>").gain(0.32)

stack(
  acoustic_guitar_nylon, bass, epiano1, piano, acoustic_guitar_steel, bass_2, kick, rim, snare, low_tom, hihat, mid_tom,
  open_hat, high_tom, crash, ride, tambourine
)

More by Gordon Lightfoot