Strudelify

Werewolves of London

Warren Zevon

KeyG majorTempo105 bpm
0:00/0:00
// Werewolves of London — Warren Zevon
// 105 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 93 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(105/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
const piano = note(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C ~@3
>`.pickRestart({
  A: "[d4,b4]@2 ~@6 g2@2 a2@2 [c4,a4]@2 ~@4 c3@3 ~ g2 ~, d2@9 ~@3 c2@9 f2@2 ~, ~@3 [d4,a4]@8 ~@4 [c4,g4]@8 ~, ~@3 d3@2 ~@7", // G F D5 C5
  B: "[d4,g4]@2 ~ g4@2 ~ [e4,g4] ~@11 g2@3 ~ d2 ~, g1@7 ~@2 [d4,g4]@12 ~@3, ~@3 d4 ~@2 g2@5 ~ g1@8 ~ c2@2 ~", // G5 Em G5
  C: "[d4,b4]@2 ~@6 g2@2 a2@2 [c4,a4]@2 ~@4 c3@3 f2@2 ~, d2@3 ~ c2@3 ~, ~@3 [d4,a4]@8 ~@4 [c4,g4]@8 ~, ~@3 d3@2 ~@7", // G F D5 C5
})).s("gm_piano").gain(0.56)

// chords · piano · soft notes
const piano_soft = note(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~@3
>`.pickRestart({
  A: "~@9 f2 ~@12 e2 ~", B: "~@9 f2 ~@14",
})).s("gm_piano").gain(0.24)

// chords · overdriven guitar · "Guitar1"
const overdriven_guitar = note(`<
  ~@4 A B C B C D E D E D E D E D F D G D F D G D E D E D E D E D F D G D F H I D E D E D E D E D E D E D E D E D F D G
  D F D G D E D E D E D E D E D E D F D G D F H J D F D G D ~@3
>`.pickRestart({
  A: "~@15 g2@3 a2@3 d3 ~@2", B: "d3 ~@2 d3 ~@2 [d3,a3]@2 ~ d3 ~@2 c3 ~@2 c3 ~@2 [c3,g3] ~@2 c3 ~@2",
  C: "[g2,d3] ~@2 g2 ~@2 g2 ~@2 g2 ~@2 g2 ~@2 g2@3 a2@3 d3 ~@2", // G5
  D: "d3 ~@2 d3 ~@2 d3 ~@2 d3 ~@2 c3 ~@2 c3 ~@2 c3 ~@2 c3 ~@2",
  E: "g2 ~@2 g2 ~@2 g2 ~@2 g2 ~@2 g2 ~@2 g2@3 a2@3 d3 ~@2",
  F: "[g3,d4,g4,b4] ~ [g3,d4,g4,b4]!2 ~ [d4,g4,b4,c5] [g3,d4,g4,c5] ~@2 [g3,d4,g4,b4] ~@5 [g3,d4,g4,b4] ~@2 a3 b3 ~ [g3,d4,g4,b4] ~@2", // G Gsus4 G
  G: "[g3,d4,g4,b4] ~ [g3,d4,g4,b4]!2 ~ [d4,g4,b4,c5] [g3,d4,g4,c5] ~@2 [d4,g4,b4]@5 ~ g2@3 a2@3 d3 ~@2, ~@9 g3 ~@14", // G Gsus4 G
  H: "d3 ~@2 d3 ~@2 d3 ~@2 d3 ~@2 c3 ~@2 c3 ~@2 c3 ~@2 c3 ~ [d3,g3]", // G5
  I: "[g2,a3,b3] ~@2 [g2,d3,g3,b3] ~@2 [g2,d3,g3,c4] ~@2 [g2,d3,g3,b3]@10 ~@5", // G Gsus4 G
  J: "[g2,a3,b3] ~@2 [g2,d3,g3,b3] ~@2 [g2,d3,g3,c4] ~@2 g2@4 ~@2 g2@3 a2@3 d3 ~@2, ~@9 [d3,g3,b3]@10 ~@5", // G Gsus4 G
})).s("gm_overdriven_guitar").gain(0.48)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C
  B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C D ~@3
>`.pickRestart({
  A: "~@7 d2", B: "~@3 d2@5 ~ d2@2 ~ c2 ~@2 c2@5 ~ c2@2 ~", C: "g1 ~@2 g1 ~@2 g1 ~@2 g1 ~@2 g1 ~@2 g1 ~@2 g1 ~@2 d2@3",
  D: "~@3 d2@5 ~ d2@2 ~ c2 ~@2 c2@5 ~@4",
})).s("gm_electric_bass_pick").gain(0.62)

// other · distortion guitar · "Guitar2"
const distortion_guitar = note("<~@41 A B@3 C D@2 E ~@44>".pickRestart({
  A: "~@3 a2 g2@2 d3@3 g2@3 g3@9 d3@3",
  B: "[g3@3 d3@2 ~ d4@14 ~ a3@2 c4 d4@4 ~@2 [e4,b4]@3 ~@3 [d5,g5]@3 c5@2 d5@3 [g5,d6]@7 c6@3 d6@3 g6@13 ~@2, ~@23 g4@5 ~@44]/3", // E5 G5
  C: "a3@3 d4@3 a3@3 d4 ~ e4, ~@21 d4@2 ~",
  D: "[g4@3 e4@3 d4@3 g4@6 e4@3 d4@2 ~ g5@5 e5@3 ~ d5@3 g5@6 e5@3 d5@2 ~@4]/2",
  E: "[b4,g5] ~@2 [c5,g5,a5] ~@2 [d5,a5,b5] ~@2 [d5,b5]@9 ~@6", // Em Am7 Bm7 G
})).s("gm_distortion_guitar").gain(0.64)

// drums · kick
const kick = s("bd").struct("<~ [x!2]!55 x [x!2]!33 ~@3>").gain(0.8)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~ [~@3 x ~@4]!55 ~ [~@3 x ~@4]!33 ~@3>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<A B@15 C B@7 D B@7 E B@9 F B F B@3 G B@5 H B I B@7 J B@5 K B@5 L B@13 ~@3>".pickRestart({
  A: "~@5 x!3", B: "~ x ~ x", C: "~@2 x ~@2 x!3", D: "~@6 x ~@8 x ~ x!3 ~ x!2 ~", E: "x!8",
  F: "~@6 x ~@8 x ~ x!2 ~@2 x ~@2", G: "~@6 x ~@8 x ~@2 x!2 ~ x ~@2", H: "~@6 x ~@8 x ~ x!2 ~@2 x ~ x",
  I: "x ~@5 x ~@2 x ~@2 x!2 ~ x!2 ~ x!2 ~ x!2 ~", J: "~@6 x ~@8 x!2 ~ x ~ x!3 ~", K: "~@2 x ~@3 x!2",
  L: "~@6 x ~@8 x ~@2 x ~ x!2 ~@2",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  ~
  [~ x ~ x ~ x ~@2]!23
  [~ x ~ x ~@4]
  [~ x ~ x ~ x ~@2]!31
  [~ x ~@6]
  [~ x ~ x ~ x ~@2]!33
  ~@3
>`).gain(0.24)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5
>`.pickRestart({
  A: "~@7 x",
})).gain(0.16)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@4
>`.pickRestart({
  A: "~@7 x",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct("<~@9 A ~ A ~ A ~ A ~ A ~@7 A ~@23 A ~@7 A ~@7 A ~@27>".pickRestart({
  A: "x",
})).gain(0.72)

stack(
  piano, piano_soft, overdriven_guitar, bass, distortion_guitar, kick, kick_soft, snare, hihat, hihat_soft, open_hat,
  crash
)

More by Warren Zevon