Strudelify

Hazy Shade of Winter

Paul Simon

KeyF majorTempo132 bpm
0:00/0:00
// Hazy Shade of Winter — Simon Paul
// 132 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 81 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(132/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 · piano · "Harmonised Lead"
const piano = note(`<
  ~@4 A@2 B@3 C D@2 E@7 F G@2 H I J@2 K@7 L@3 M N O@2 P@3 Q R@6 S@2 T@2 U@2 V@2 W@2 J@2 X@8 Y@8 Z@3
>`.pickRestart({
  A: "[[a4,d5]@3 [a4,d5]@3 [a4,f5]@6 a4 a4@2 f4]/2", // D5 Dm
  B: "[g4 g4@2 g4@9 ~@2 [g4,c5] [a4,c5]@2 [bb4,d5]@2 [bb4,d5]@2 [bb4,f5]@3]/3", // C5 Am Bb Bb5
  C: "~@2 bb4 bb4@2 a4@2 g4, ~@4 f4 ~ f4 ~@3 f4 ~@3 f4 ~",
  D: "[c5 [a4,c5]@2 c5@9 [a4,c5] [bb4,d5]@2 [a4,c5], a4 ~@5 f4@16 ~@10]/2", // Am Bb Am
  E: "[[g4,c5]@6 [f4,a4]@2 [e4,g4]@16 ~@2 [e4,g4]@2 [e4,g4]!2 [f4,a4]@10 ~@2 a4@2 f4@2 g4@10 ~@2 [g4,bb4]@2 [g4,bb4]@2 [bb4,d5]@10 ~@2 bb4@2 bb4@2 db5@4 a4@4 db5@6 db5@2 f5@4 d5@6 ~@8]/7", // C5 F Em F Gm Bb
  F: "~@3 [a4,f5]@2 [a4,f5]@3 [a4,f5]@3 [g4,e5]@2 [f4,d5]@3", G: "[[g4,e5]@2 [e4,c5] [c4,c5]@9 ~@4]/2",
  H: "[bb4,d5]@4 [bb4,d5]@3 [bb4,d5]!3 [bb4,d5]@5 [bb4,d5]", // Bb
  I: "[bb4,d5]@2 [bb4,d5]@2 [bb4,d5]@2 [f4,d5]@2 [bb4,d5]!2 [bb4,d5]@5 [bb4,d5]", // Bb Dm Bb
  J: "[[c5,e5]@3 [c5,e5]@2 [c5,e5]@3 [c5,e5]@16 [a4,c5]@3 [bb4,d5]@2 [a4,c5]@3]/2", // C Am Bb Am
  K: "[[a4,c5]@3 [g4,bb4]@2 [f4,a4]@3 [e4,g4]@16 ~@2 [e4,g4]@2 [e4,g4]!2 [f4,a4]@10 ~@2 a4@2 f4@2 g4@10 ~@2 [g4,c5]@2 [g4,c5]@2 [bb4,d5]@10 ~@2 bb4@2 bb4@2 db5@4 a4@4 db5@6 db5@2 f5@4 d5@6 ~@8]/7", // Am Gm F Em F C5 Bb
  L: "[~@2 f5 f5@2 e5 d5 e5@2 c5@2 g4@13]/3",
  M: "[bb4,d5]@2 [bb4,d5]@2 [bb4,d5]@2 [f4,d5]@2 [bb4,d5]@2 [f4,d5]@2 [bb4,d5]@3 [f4,d5]", // Bb Dm Bb Dm Bb Dm
  N: "[bb4,d5]!3 [f4,d5] [bb4,d5]!2 [bb4,d5]@2", // Bb Dm Bb
  O: "[[c5,e5]@3 [c5,g5]@2 [c5,f5]@3 [c5,e5]@16 [a4,c5]@3 [bb4,d5]@2 [a4,c5]@3]/2", // C C5 F5 C Am Bb Am
  P: "[[a4,c5]@3 [g4,bb4]@2 [f4,a4]@3 [e4,g4]@16 ~@2 [e4,g4]@2 [e4,g4]@2 [f4,a4]@10 ~@2 a4@2 a4@2 f4@2]/3", // Am Gm F Em F
  Q: "g4@4 ~ g4!3",
  R: "[bb4@8 ~@2 bb4@2 bb4@2 db5@4 a4@4 db5@4 f5@2 e5@2 ~@34 f5@19 [d5,f5]@2 [d5,f5]@3 [d5,f5]@3 [c5,e5]@2 [bb4,d5]@3, ~@30 d5@53 ~@13]/6", // Dm C Bb
  S: "[[a4,c5]@3 [bb4,d5]@2 [c5,e5]@13 ~ [c5,e5]@2 [c5,e5]@3 [d5,f5]@3 [c5,e5]@2 [a4,c5]@3]/2", // Am Bb C Dm C Am
  T: "[[g4,bb4]@3 [a4,c5]@2 [bb4,d5]@13 ~ [bb4,d5]@2 [bb4,d5]@3 [bb4,d5]@3 [a4,c5]@2 [g4,bb4]@3]/2", // Gm Am Bb Am Gm
  U: "[[f4,a4]@3 [g4,db5]@3 [a4,d5]@10]/2", V: "[~@3 [g4,c5] [a4,d5] [g4,c5] [f4,bb4] [g4,c5]@2 [e4,c5]@2 [c4,c5]@5]/2",
  W: "[bb4,d5] [bb4,d5]@3 [bb4,d5]@2 [bb4,d5]@2 [bb4,d5]@2 [bb4,d5]@2 [bb4,d5]@2 [bb4,d5]@2", // Bb
  X: "[[a4,c5]@3 [g4,bb4]@2 [f4,a4]@3 [e4,g4]@16 ~@2 e4@2 e4!2 f4@10 ~@2 a4@2 f4@2 g4@10 ~@2 g4@2 g4@2 bb4@10 ~@2 bb4@2 bb4@2 db5@4 a4@4 db5@6 db5@2 f5@4 d5@6 ~@2 f5@2 e5@2 d5@4 c5@2 ~@8 d5@2 c5@2]/8", // Am Gm F Em
  Y: "[bb4@4 ~ bb4!2 a4@2 g4@2 f4@2 f4 g4 a4@5 ~ f5 e5 d5@2 c5 ~@4 d5 c5]/4",
  Z: "[bb4@4 ~ bb4!2 a4@2 g4@2 f4@2 f4 e4 d4@5 ~@4]/3",
})).s("gm_piano").gain(0.64)

// 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.64)

// other · clarinet
const clarinet = note("<~@24 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.48)

// other · percussive organ · "Hammond Organ"
const percussive_organ = note("<~@68 A B C D A B C D A B C D ~>".pickRestart({
  A: "f5", B: "e5", C: "d5", D: "a4",
})).s("gm_percussive_organ").gain(0.48)

// other · trumpet · "Fanfare"
const trumpet = note("<~@21 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.56)

// 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.48)

// 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.48)

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

// 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.48)

// drums · crash
const crash = s("cr").struct("<~@4 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.64)

stack(piano, bass, clarinet, percussive_organ, trumpet, kick, snare, hihat, tambourine, crash)

More by Paul Simon