Strudelify

Rainy Day People

Gordon Lightfoot

KeyC majorTempo112 bpm
0:00/0:00
// Rainy Day People — Gordon Lightfoot
// 112 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 97 bars on a 16-step grid, each part at one level. 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.

// other · acoustic guitar nylon · "Rainy Day People by G.Lightfoot"
const acoustic_guitar_nylon = note("<~@38 A B C ~ D E F ~@52>".pickRestart({
  A: "e4 g4 e4 a4@2 g4@3", B: "e4 f4 g4 e4 c4@2 b3 a#3", C: "a3@2 d4 d4@5", D: "c5!2 c5@2 c5 b4 a4@2",
  E: "g4@2 g4 e4 g4 a4 g4 f4", F: "f4 e4@2 g4@5",
})).s("gm_acoustic_guitar_nylon").gain(0.48).pan(0.3)

// bass · fretless bass
const bass = note(`<
  A@4 B@2 C@2 D E A F G H I A D J K B L A@2 C@2 D M B N D E I A D O P A F A@2 C Q G H A F D E I B G J K A F A R S T D E
  A F D U V F D J K A R B N F A@2 C@2 G U A@2 D E I R G W K A X Y Z AA@2 AB
>`.pickRestart({
  A: "c2@5 ~ c2@2 c2@5 ~@3", B: "c2@3 c2 c2@3 ~", C: "d2@5 ~ d2@2 d2@5 ~@3", D: "f2@5 ~ f2@2 f2@5 ~@3",
  E: "g1@5 ~ g1@2 g1@5 ~@3", F: "c2@5 ~ c2@2 c2@2 g2 a2 g2@2 g1@2", G: "f2@3 f2 f2@3 ~", H: "g1@6 g1@2 g1@5 ~@3",
  I: "f1@5 ~ f1@2 f1@5 ~@3", J: "g2@5 ~ g2@2 g2@5 ~@3", K: "f2@5 ~ f2@2 c2@5 ~@3", L: "c2@6 c2@2 c2@2 g2 a2 g2@2 g1@2",
  M: "g1@5 ~ g1@2 g1@6 ~@2", N: "c2@6 c2@2 c2@5 ~@3", O: "g2@3 g2 g2@3 ~", P: "f2@3 f2 c2@3 ~",
  Q: "d2@5 ~ d2@2 d2@6 ~@2", R: "c2@5 ~ c2@2 c2@6 ~@2", S: "d2@3 d2 d2@3 ~", T: "d2@6 d2@2 d2@5 ~@3",
  U: "g1@3 g1 g1@3 ~", V: "f1@3 f1 f1@3 ~", W: "g2@6 g2@2 g2@5 ~@3", X: "c2@5 ~ c2@2 f2@5 ~@3",
  Y: "f2@5 ~ f2@2 g1@5 ~@3", Z: "g1@5 ~ g1@2 f1@6 ~@2", AA: "[c2@7 ~ c2@2 ~ c2@8 ~@3 c2@5 ~ g2@4]/2", AB: "~ c2@11 ~@4",
})).s("gm_fretless_bass").gain(0.36)

// other · harmonica
const harmonica = note(`<
  ~@4 A B C ~ D E F ~ D G H I D J K ~@2 A B C ~ D E F ~ D G H I D J K ~@10 D G H I D J K ~@22 A B C ~ D E F ~ D G H I D
  J K ~ L M N@3 ~
>`.pickRestart({
  A: "e4 g4 e4 a4@2 g4@3", B: "e4 f4 g4 e4 c4@2 b3 a#3", C: "a3@2 d4 d4@5", D: "c5!2 c5@2 c5 b4 a4@2",
  E: "g4@2 g4 e4 g4 a4 g4 f4", F: "f4 e4@2 g4@5", G: "g4@2 g4 e4 g4 a4@3", H: "~ c5!2 b4@3 a4@2", I: "g4 d4 e4@4 ~@2",
  J: "g4@2 g4 e4 g4 a4@2 a4", K: "e4 d4 c4 c4@5", L: "~@4 c5!2 c5@2", M: "c5 b4 a4@2 g4@2 g4 f4",
  N: "[g4@2 g4 a4 e4 d4 c4 c4@12 ~@5]/3",
})).s("gm_harmonica").gain(0.57)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@6 B@2 C D A E C D C A C D F A E A@2 B@2 C D A@2 C D C A C D F A E A@2 B@2 C D A E C D C A C D F A E A@2 B@2 C D A E
  C D C E C D F A@4 E A@2 B@2 C D A@2 C D C A C D F A G H I J@2 K
>`.pickRestart({
  A: "~@7 c4, e3, ~ g3@2 g3@3 g3@2, ~@2 c4@3 c4@2 ~, ~@8 e4@7 ~",
  B: "~@7 d4, f3, ~ a3@2 a3@3 a3@2, ~@2 d4@3 d4@2 ~, ~@8 f4@7 ~",
  C: "~@7 f4, a3, ~ c4@2 c4@3 c4@2, ~@2 f4@3 f4@2 ~, ~@8 a4@7 ~",
  D: "~@7 g4, b3, ~ d4@2 d4@3 d4@2, ~@2 g4@3 g4@2 ~, ~@8 b4@7 ~", E: "~@3 g3 ~@3 e4, e3!2, ~ g3@2 ~@2 g3@3, ~ c4 ~ c4",
  F: "~@3 c4!2 ~@2 c4, a3 [e3,e4], ~ c4@2 ~ g3@2 g3@2, ~@2 f4@2 ~ c4@2 ~", // E
  G: "~@3 g3 f4 ~@2 f4, e3@4 ~ f4@2 ~, ~ g3@2 ~ [a3,a4]@4, ~ c4!3", // A
  H: "~@3 c4 g4 ~@2 g4, a3@4 ~ g4@2 ~, ~ c4@2 ~ [b3,b4]@4, ~ f4 d4!2", // B
  I: "~@3 d4 f4 ~@2 f4, b3 [a3,a4], ~ d4@2 ~ c4@2 c4@2, ~@2 g4@2 ~ f4@2 ~", // A
  J: "[~@19 c4@3 ~ g3@2 ~ e4 e4@2 ~ c5@2, e3@21 ~ c3@2 ~@8, ~@3 g3@5 g3@8 g3@5 ~@11, ~@5 c4@8 c4@5 ~@7 c4@2 ~@5, ~@11 e4@10 ~@8 g4@2 ~]/2",
  K: "e5 ~ g5@7 ~@7, ~ [c4,e5]@8 ~@7", // C
})).s("gm_acoustic_guitar_steel").gain(0.35)

// other · string ensemble 1
const string_ensemble_1 = note("<A@2 B C ~@51 D E F ~ G H I ~ G J K L G M N ~@27>".pickRestart({
  A: "[~ [b3,e5] [a3,f4,d5] [g3,e4,c5], c3, ~@3 g4@5 ~@8]/2", B: "c2@3 c2 g2@3 g2, ~@3 b3@5, ~ g4",
  C: "c2@3 c2 g2@3 g2, [a3,f4] [g3,e4]", D: "e4 g4 e4 a4@2 g4@3", E: "e4 f4 g4 e4 c4@2 b3 a#3", F: "a3@2 d4 d4@5",
  G: "c5!2 c5@2 c5 b4 a4@2", H: "g4@2 g4 e4 g4 a4 g4 f4", I: "f4 e4@2 g4@5", J: "g4@2 g4 e4 g4 a4@3",
  K: "~ c5!2 b4@3 a4@2", L: "g4 d4 e4@4 ~@2", M: "g4@2 g4 e4 g4 a4@2 a4", N: "e4 d4 c4 c4@5",
})).s("gm_string_ensemble_1").gain(0.4).pan(0.6)

// chords · piano
const piano = note(`<
  A@2 B C D E F@2 G H I J K L M N G O P Q R S T U@2 V W X@2 G H M Y@2 Z AA N AB AC@2 AD AE AF AG AC AB AH AI AJ AK AF AL
  AM AC AB AN AO AP AQ AR AS AT AB AR AU AV AW AR AX AY AC AZ AK BA AB AC@2 AD@2 AF BB AC@2 AH AI AJ AZ AF BC AM AC BD
  BE BF BG@2 BH
>`.pickRestart({
  A: "[c2@6 c2@2 [b3,e5]@8 c2@5 ~ c2@2 [g3,e4,c5]@8, c3, ~@3 g4@5 [a3,f4,d5]@4 ~@4, ~@8 c2@5 ~@11 c2@5 ~@3]/2", // E5 C Dm
  B: "c2@3 c2 [c2,g2]@3 g2, ~@3 b3@5, ~ g4", C: "c2@3 c2 [c2,g2]@3 g2, [a3,f4] [g3,e4]",
  D: "c2@3 c2 c2@3 ~, [c4,e4,g4,c5]", E: "c2@3 c2 ~@2 c4 b3, [c4,e4,g4,c5]@3 ~, ~@4 c2@3 ~",
  F: "[d2@5 ~ d2@2 d2@5 ~@3 d2@5 ~ d2@2 d2@5 ~@3, [f4,a4,c5]]/2", G: "f2@5 ~ f2@2 f2@5 ~@3, [f4,a4,c5]",
  H: "g1@5 ~ g1@2 g1@5 ~@3, [g4,b4,d5]", I: "c2@5 ~ c2@2 c2@5 ~@3, [c4,e4,g4,c5]",
  J: "~@2 d4@2 e4@2 [c2,d4]@2 [c2,e4]@2 g2 a2 [g2,g4]@2 [g1,c5]@2, c2@5 ~@5 f4@2 ~@4", K: "f2@3 f2 f2@3 ~, [f4,a4,c5]",
  L: "g1@6 g1@2 g1@5 ~@3, [g4,b4,d5]", M: "f1@5 ~ f1@2 f1@5 ~@3, [f4,a4,c5]", N: "c2@5 ~ c2@2 c2@5 ~@3, [c4,e4,g4]",
  O: "g2@5 ~ g2@2 g2@4 ~@2 f4@2, [b4,d5], g4@3 g4", P: "f2@5 ~ f2@2 [c4,e4,g4]@8, [f4,a4,c5]@8 c2@5 ~@3",
  Q: "c2@3 c2 c2@3 ~, [c4,e4,g4]", R: "c2@6 c2@2 c2@2 g2 a2 g2@2 g1@2, [c4,e4,g4]",
  S: "c2@2 ~ c2 g4@4, c4, ~@4 e4@4 c2@5 ~@3", T: "c2@2 ~ c2 g4@4, c4@8 c2@5 ~@3, ~ e4@2 ~",
  U: "d2@2 ~ d2 a4@4, d4@8 d2@5 ~@3, ~ f4@2 ~", V: "f2@2 ~ f2 c5@4, f4@8 f2@5 ~@3, ~ a4@2 ~",
  W: "g1@2 ~ g1 d5@4, g4@4 g1@3 ~, ~ b4@2 ~",
  X: "[~@3 c2 ~@7 c2 c2@2 c5@2, c4 g4 c4 g4, c2@3 ~ c2@3 ~ c2@3 ~@5, ~ e4@2 c5@2 e4@2 ~]/2",
  Y: "[c2@4 ~@2 c2@2 c2@4 ~@4 f2@5 ~ f2@2 f2@5 ~@3, c4 g4 [f4,a4]@2, ~ e4@2 c5@2 ~@3]/2", // F
  Z: "g2@3 g2 g2@3 ~, [g4,b4,d5]", AA: "f2@3 f2 [c4,e4,g4]@4, [f4,a4,c5], ~@4 c2@3 ~",
  AB: "c2@5 ~ c2@2 c2@2 g2 a2 g2@2 g1@2", AC: "c2@5 ~ c2@2 c2@5 ~@3", AD: "d2@5 ~ d2@2 d2@5 ~@3",
  AE: "d2@5 ~ d2@2 d2@6 ~@2", AF: "f2@3 f2 f2@3 ~", AG: "g1@6 g1@2 g1@5 ~@3", AH: "f2@5 ~ f2@2 f2@5 ~@3",
  AI: "g1@5 ~ g1@2 g1@5 ~@3", AJ: "f1@5 ~ f1@2 f1@5 ~@3", AK: "c2@3 c2 c2@3 ~", AL: "g2@5 ~ g2@2 g2@5 ~@3",
  AM: "f2@5 ~ f2@2 c2@5 ~@3", AN: "e4 g4 e4 c2 ~ g4@3, c2@5 ~ a4@4 ~@6, ~@8 c2@5 ~@3",
  AO: "e4 f4 g4 [c2,e4] c4@2 b3 a#3, c2@5 ~@3 c2@6 ~@2", AP: "a3@2 d4 d2 d2@3 ~, d2@3 d4@5", AQ: "d2@6 d2@2 d2@5 ~@3",
  AR: "c5!2 ~ f2 c5 b4 a4@2, f2@4 c5@4 f2@5 ~@3", AS: "[g1,g4]@2 g4 [g1,e4] g4 a4 g4 f4, ~@8 g1@5 ~@3",
  AT: "f4@2 e4@4 c2@2 c2@5 ~@3, c2@5 ~ g4@10", AU: "g4@2 g4 [g1,e4] g4 a4@3, g1@3 ~ g1@3 ~",
  AV: "~ c5!2 f1 ~@2 a4@2, f1@3 b4@3 ~@2, ~@4 f1@3 ~", AW: "g4@2 d4@2 ~@2 c2@2 c2@2 g2 a2 g2@2 g1@2, c2 e4@2 ~",
  AX: "[g2,g4]@2 g4 [g2,e4] g4 a4@2 a4, ~@8 g2@5 ~@3", AY: "e4@2 d4@2 c4@2 f2@2 c2@5 ~@3, f2@5 ~ c4@10",
  AZ: "c2@5 ~ c2@2 c2@6 ~@2", BA: "c2@6 c2@2 c2@5 ~@3", BB: "g1@3 g1 g1@3 ~", BC: "g2@6 g2@2 g2@5 ~@3",
  BD: "c2@5 ~ c2@2 f2@5 ~@3", BE: "f2@5 ~ f2@2 g1@5 ~@3", BF: "g1@5 ~ g1@2 f1@6 ~@2",
  BG: "[c2@7 ~ c2@2 ~ c2@8 ~@3 c2@5 g2@5]/2", BH: "~ c2@11 ~@4",
})).s("gm_piano").gain(0.4).pan(0.6)

// other · pad new age
const pad_new_age = note("<~@11 A ~@8 A ~@16 A ~@7 A ~@8 A ~@7 A ~@3 A ~@7 A ~@20 B C>".pickRestart({
  A: "c4!9 e3 g3 c4 e4 g4 c5 c4", B: "~@6 c5 g4 ~ e4!2 c4 ~ g3 e3 ~", C: "g3 [c3,e4,g4]@7 ~@8",
})).s("gm_pad_new_age").gain(0.15)

// drums · kick
const kick = s("bd").struct("<A@11 B A@8 B A@16 B A@7 B A@8 B A@7 B A@3 B A@7 B A@19 C D E>".pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x!2", C: "x ~@7 x ~@2 x ~@4", D: "~@3 x ~@2 x ~@9", E: "~ x ~@14",
})).gain(0.45)

// drums · rim
const rim = s("rim").struct("<A@11 B A@8 B A@16 B A@7 B A@8 B A@7 B A@3 B A@7 B A@19 C D ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@5 x ~@10", D: "x",
})).gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~@11 A ~@8 A ~@16 A ~@7 A ~@8 A ~@7 A ~@3 A ~@7 A ~@21 B>".pickRestart({
  A: "~@12 x!4", B: "x",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct("<A@11 B A@8 B A@16 B A@7 B A@8 B A@7 B A@3 B A@7 B A@19 C D ~>".pickRestart({
  A: "x!8", B: "x!3 ~ x ~@3", C: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", D: "x ~@2 x ~@12",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@11 A ~@8 A ~@16 A ~@7 A ~@8 A ~@7 A ~@3 A ~@7 A ~@20 B ~>".pickRestart({
  A: "~@10 x!2 ~@4", B: "~@7 x",
})).gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<~@11 A ~@8 A ~@16 A ~@7 A ~@8 A ~@7 A ~@3 A ~@7 A ~@21 B>".pickRestart({
  A: "~@3 x ~@4", B: "~ x ~@14",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@95 [~@11 x ~ x ~@2] ~>").gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@11 A ~@8 A ~@16 A ~@7 A ~@8 A ~@7 A ~@3 A ~@7 A ~@22>".pickRestart({
  A: "~ x",
})).gain(0.25)

// drums · ride
const ride = s("rd").struct("<~@95 [~@6 x ~@2 x ~@6] ~>").gain(0.45)

stack(
  acoustic_guitar_nylon, bass, harmonica, acoustic_guitar_steel, string_ensemble_1, piano, pad_new_age, kick, rim,
  low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride
)

More by Gordon Lightfoot