Strudelify
Hazy Shade of Winter cover art

Hazy Shade of Winter

The Bangles

KeyD minorTempo132 bpm
0:00/0:00
// Hazy Shade of Winter — The Bangles
// 132 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// 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 · [...]/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 · synth bass 1 · "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: "d3@3 a2 d3@3 a2", B: "c3@3 g2 c3 g2 c3 g2", C: "bb2@3 f2 bb2@3 bb2", D: "a2@2 e3@2 a3@2 a2!2",
  E: "[d3@3 d3@3 d3@5 a2 d3 d3@2 d3]/2", F: "c3@3 c3@4 c3", G: "c3@3 g2 c3 c3@2 c3", H: "bb2@3 bb2@2 f2 bb2 f2",
  I: "c3 d3 e3 f3", J: "g3 a3 bb3 g3", K: "c3@3 c3 c3@3 c3", L: "[d3!2 f3 g3 a3 g3 f3 c3@2 g3 c4 bb3@3 g3@2]/2",
  M: "[bb2!2 d3 f3 ab3 g3 f3 a2@2 e3 a3 g3@3 a3@2]/2", N: "d3@3 d3 d3@3 d3", O: "c3@3 c3@2 g2 c3 g2",
  P: "c3 c3@2 c3!2 g2 c3 g2", Q: "bb2@3 bb2 bb2@3 bb2", R: "c3!4", S: "d3@3 d3@3 d3@2", T: "c3@3 c3@2 c3@2 c3",
  U: "d3@3 a2 d3 a2 d3 a2", V: "bb2@3 f2 bb2 f2 bb2 f2", W: "f3@3 c3 f3 c3 f3 c3", X: "f3@3 c3 f3@3 c3",
  Y: "c3@3 c3!2 g2 c3 g2", Z: "c3@3 g2 c3@3 g2", AA: "[d3@3 a2@3 d3@5 a2 d3 a2 d3 a2]/2",
  AB: "[bb2!2 d3 f3 ab3 g3 f3 a2@2 e3 a3 g3@3 a3 d3@3 ~@6]/3",
})).s("gm_synth_bass_1").gain(0.36)

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

// other · drawbar organ · "Hammond Organ"
const drawbar_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_drawbar_organ").gain(0.31)

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

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

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

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

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

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

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

More by The Bangles