Strudelify
A Hazy Shade Of Winter cover art

1966 · Bookends

A Hazy Shade Of Winter

Simon & Garfunkel

KeyD minorTempo130 bpm
0:00/0:00
// A Hazy Shade Of Winter — Simon & Garfunkel
// 130 bpm, 4/4, key D minor. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 12 "Backgound vocals" choir aahs (copy of ch 2 "Lead vocals" recorder)
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/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 · drawbar organ · "Organ"
const drawbar_organ = note("<~@69 A B C D A B C D A B C D ~>".pickRestart({
  A: "f5", B: "e5", C: "d5", D: "a4",
})).s("gm_drawbar_organ").gain(0.33).pan(0.8)

// other · clarinet
const clarinet = note("<~@25 A B ~@12 C B ~@14 D@2 E@2 F G H@2 ~@19>".pickRestart({
  A: "~@4 a4@2 bb4 a4", B: "g4 a4 ~@2", C: "~@4 c5@2 bb4 a4", D: "d5/2", E: "[e5@3 c5]/2", F: "d5", G: "f4 g4",
  H: "[a4@3 c5@5]/2",
})).s("gm_clarinet").gain(0.5).pan(0.3)

// chords · synth strings 1 · "Strings"
const synth_strings_1 = note(`<
  ~ A@2 B@2 C@2 D@3 E F@2 G@7 H I@3 J K@2 L@7 M@4 N K@2 O@3 P Q@6 R@2 S@2 T@2 U@2 V@2 K@2 W@8 X@8 Y@3
>`.pickRestart({
  A: "[a3@4 [a3,d4]@3 c4@9]/2", B: "[bb3@4 d4@3 a3@3 db4@4 db4@2]/2",
  C: "[[d4,f4,a4]@3 [d4,f4,a4]@3 [d4,f4,a4]@6 a4 a4@2 [d4,f4], ~@12 [d4,f4]@3 ~]/2", // Dm
  D: "[g4 g4@2 [c4,e4]@3 [c4,e4]@2 [c4,e4]@2 [c4,e4]@4 [c4,e4,g4] a4@2 bb4@2 bb4@2 bb4@3, [c4,e4] g4@3 ~ [d4,f4]@3]/3", // C Dm
  E: "~@2 bb4 bb4@2 a4@2 g4, [d4,f4]", // Dm
  F: "[c5 c5@2 [d4,a4]@3 [d4,a4]@4 [d4,a4]@2 a4 bb4@2 a4, [d4,a4]@3 c5@9 [d4,c5]@4]/2", // D5 D7
  G: "[[c4,e4]@4 f4@2 ~@2 [g3,c4]@4 [g3,c4]@4 [g3,c4]@4 [g3,c4]@4 ~@2 e4@2 e4!2 [d4,f4]@10 ~@2 [f4,a4]@2 [d4,f4]@2 [e4,g4]@10 ~@2 [e4,g4]@2 [e4,g4]@2 bb4@10 ~@2 bb4@2 bb4@2 [e4,a4,db5]@4 [db4,e4,a4]@4 [e4,a4,db5]@6 [e4,a4,db5]@2 [a4,d5,f5]@4 [f4,a4]@10 [f4,a4]@4, g4@3 ~ e4@8 [g3,c4]@3 ~@16 [d4,f4]@7 ~@11 d5@7]/7", // C C5 Dm F Dm Em A Dm …
  H: "~@3 a4@2 a4@3 a4@3 g4@2 f4@3, [d4,f4]@3 ~", // Dm
  I: "[[c4,e4,g4]@4 [g3,c4,e4]@2 [g3,c4]@16 c4@2 [c4,e4]@2 [e4,g4]@2 [c4,e4]@2 ~@2 bb4@4 bb4@3 bb4!3 bb4@5 bb4, ~ e4@3 ~ [d4,f4]@3]/3", // C C5 C Em C Dm
  J: "bb4@2 bb4@2 bb4@2 ~@2 bb4!2 bb4@5 bb4, d4, f4@3 f4@5",
  K: "[c5@3 c5@2 c5@3 c5@16 a4@3 bb4@2 a4@3, [e4,a4]@3 [c4,e4]]/2", // A5 C
  L: "[[c4,e4]@8 g3@4 g3@2 a3@2 g3@4 g3@2 a3@2 ~@2 [c4,e4]@2 [c4,e4]!2 [d4,f4]@10 ~@2 [f4,a4]@2 [d4,f4]@2 [e4,g4]@4 [c4,e4]@6 ~@2 [e4,g4]@2 [e4,g4]@2 [d4,f4]@12 bb4@2 bb4@2 [e4,a4,db5]@4 [db4,e4,a4]@4 [e4,a4,db5]@6 [e4,a4,db5]@2 [a4,d5,f5]@4 [f4,a4]@10 [f4,a4]@4, a4@3 ~@5 [c4,e4]@16 g3@8 ~@30 bb4@10 ~@26 d5@14]/7", // C Dm F Dm Em C Em Dm …
  M: "[~@4 f5@2 f5@4 e5@2 d5@2 ~@4 c5@4 [c4,e4]@6 [c4,e4]@4 [c4,e4]@6 c4@2 [c4,e4]@2 [e4,g4]@2 [c4,e4]@2 ~@2 bb4@2 bb4@2 bb4@2 ~@2 bb4@2 ~@2 bb4@3 d4, [f4,a4]@8 [e4,g4]@3 g4@9 ~@3 f4@9, ~@14 e5@4 ~@28 d4@8 d4@4 d4@5 ~]/4", // C Em C F Em
  N: "bb4!3 ~ bb4!2 bb4@2, f4, d4@3 d4@5",
  O: "[a4@3 g4@2 f4@3 g3@4 g3@2 a3@2 g3@4 g3@2 a3@2 ~@2 [c4,e4]@2 [c4,e4]@2 [d4,f4]@10 ~@2 [f4,a4]@2 [f4,a4]@2 [d4,f4]@2, [c4,e4] [c4,e4]@2 g3 ~@2]/3", // C Dm F Dm C
  P: "[e4,g4]@4 ~ [e4,g4]!3", // Em
  Q: "[[d4,f4,bb4]@8 ~@2 [d4,f4,bb4]@2 [d4,f4,bb4]@2 [e4,a4,db5]@4 [db4,e4,a4]@4 [e4,a4,db5]@4 f5@4 ~@6 [f4,a4]@4 [f4,a4]@4 [f4,a4]@4 [f4,a4]@4 [f4,a4]@4 [f4,a4]@4 [f4,a4]@4 [d4,f4,bb4]@4 [d4,f4,bb4]@4 [d4,f4,bb4]@4 [d4,f4,bb4]@4 ~@3 d5@2 d5@3 d5@3 c5@2 bb4@3, ~@26 [f4,a4]@10 ~@44 [d4,f4,bb4]@11 [d4,f4]@5, ~@30 d5@53 ~@13]/6", // Bb A F Bb F Bb Dm
  R: "[[c4,f4,a4]@3 [d4,g4,bb4]@2 [e4,a4,c5]@13 ~ [e4,a4,c5]@2 [e4,a4,c5]@3 [f4,a4,d5]@3 [e4,a4,c5]@2 [c4,f4,a4]@3]/2", // F Gm Am Dm Am F
  S: "[g4@3 a4@2 bb4@13 ~ bb4@2 bb4@3 bb4@3 a4@2 [bb3,d4,g4]@3, [bb3,d4]@5 [d4,g4]@19 [d4,g4]@5 ~@3]/2", // Gm Bb G5
  T: "[[g3,d4,f4]@3 [db4,e4,g4]@3 [d4,f4]@4 [d4,f4]@2 [d4,f4]@2 [d4,f4]@2, ~@3 a4@5]/2", // G7 Dbdim Dm
  U: "[[c4,e4]@2 ~ g4 a4 g4 f4 g4@2 [g3,c4,e4]@2 [e3,g3,c4]@5, ~@2 [c4,e4]@7 ~@7]/2", // C
  V: "bb4 bb4@3 bb4@2 ~@2 bb4@2 bb4@2 bb4@2 f4@2, d4, f4@3 f4@4 ~",
  W: "[a4@3 g4@2 f4@3 g3@4 g3@2 a3@2 g3@4 g3@2 a3@2 ~@2 [c4,e4]@2 [c4,e4]!2 [d4,f4]@10 ~@2 [f4,a4]@2 [d4,f4]@2 [e4,g4]@4 [c4,e4]@6 ~@2 [e4,g4]@2 [e4,g4]@2 [d4,f4,bb4]@10 ~@2 [d4,f4,bb4]@2 [d4,f4,bb4]@2 [e4,a4,db5]@4 [db4,e4,a4]@4 [e4,a4,db5]@6 [e4,a4,db5]@2 [a4,d5,f5]@4 [f4,a4]@4 [f4,a4]@2 ~@2 f5@2 e5@2 d5@4 ~@10 d5@2 c5@2, [c4,e4]@4 [c4,e4]@8 g3@4 ~@33 d5@3 [f4,a4]@3 [e4,g4]@9]/8", // C Dm F Dm Em C Em Bb …
  X: "[bb4@4 ~ bb4!2 ~@2 g4@2 f4@2 f4 g4 ~ [d4,f4]@4 ~ f5 e5 d5@2 ~@5 d5 c5, [d4,f4]@8 db4@8 ~@4 [f4,a4]@3 [e4,g4]@9, ~@7 a4@2 ~@6 a4@5 ~@12]/4", // Dm F Em
  Y: "[bb4@4 ~ bb4!2 ~@2 g4@2 f4@2 f4 e4 d4@3 ~@6, [d4,f4]@8 db4@7 ~@9, ~@7 a4@2 ~@15]/3", // Dm
})).s("gm_synth_strings_1").gain(0.3).pan(0.9)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A B C D E@2 F G H@2 I J K@2 L@2 M@2 N@2 O P Q@2 I J R@2 L@2 M@2 N S T P Q@2 I J R@2 L@2 M@2 U@2 V Q W X Y Z AA@2 K T
  Q@2 I J R@2 L@2 M@2 L@2 M@2 L@2 M@2 L@2 AB@3
>`.pickRestart({
  A: "d2@3 a1 d2@3 a1", B: "c2@3 g1 c2 g1 c2 g1", C: "bb1@3 f1 bb1@3 bb1", D: "a1@2 e2@2 a2@2 a1!2",
  E: "[d2@3 d2@3 d2@5 a1 d2 d2@2 d2]/2", F: "c2@3 c2@4 c2", G: "c2@3 g1 c2 c2@2 c2", H: "bb1@3 bb1@2 f1 bb1 f1",
  I: "c2 d2 e2 f2", J: "g2 a2 bb2 g2", K: "c2@3 c2 c2@3 c2", L: "[d2!2 f2 g2 a2 g2 f2 c2@2 g2 c3 bb2@3 g2@2]/2",
  M: "[bb1!2 d2 f2 ab2 g2 f2 a1@2 e2 a2 g2@3 a2@2]/2", N: "d2@3 d2 d2@3 d2", O: "c2@3 c2@2 g1 c2 g1",
  P: "c2 c2@2 c2!2 g1 c2 g1", Q: "bb1@3 bb1 bb1@3 bb1", R: "c2!4", S: "d2@3 d2@3 d2@2", T: "c2@3 c2@2 c2@2 c2",
  U: "d2@3 a1 d2 a1 d2 a1", V: "bb1@3 f1 bb1 f1 bb1 f1", W: "f2@3 c2 f2 c2 f2 c2", X: "f2@3 c2 f2@3 c2",
  Y: "c2@3 c2!2 g1 c2 g1", Z: "c2@3 g1 c2@3 g1", AA: "[d2@3 a1@3 d2@5 a1 d2 a1 d2 a1]/2",
  AB: "[bb1!2 d2 f2 ab2 g2 f2 a1@2 e2 a2 g2@3 a2 d2@3 ~@6]/3",
})).s("gm_electric_bass_finger").gain(0.41)

// other · trumpet
const trumpet = note("<~@22 A@2 ~@12 A@2 ~@44>".pickRestart({
  A: "[~@3 [c4,c5] [e4,e5] [g4,g5] [e4,e5] [f4,f5]@3 ~@6]/2", // C E G E F
})).s("gm_trumpet").gain(0.42).pan(0.2)

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

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

// drums · hihat
const hihat = s("hh").struct("<[x ~@3 x ~@3 x ~@3 x!3 ~] ~@46 [x!4]!8 ~@27>").gain(0.44)

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

// drums · crash
const crash = s("cr").struct("<~@5 A ~@9 A ~@3 A ~@9 A ~@3 B ~@9 A ~@3 A ~@7 C ~@9 A ~@14 D ~>".pickRestart({
  A: "x", B: "x!2 ~@2", C: "x ~@2 x ~@2 x ~", D: "~@7 x",
})).gain(0.44)

stack(drawbar_organ, clarinet, synth_strings_1, bass, trumpet, kick, snare, hihat, tambourine, crash)

More by Simon & Garfunkel