Strudelify

Godzilla

Blue Oyster Cult

KeyE majorTempo96 bpm
0:00/0:00
// Godzilla — Blue Oyster Cult
// 96 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 57, 4/4 at bar 57) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 84 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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 · overdriven guitar · "clean guitar"
const overdriven_guitar = note("<~@4 A B@2 C ~@2 D E ~@2 F G H ~ I J K ~@44 L M@2 N ~@15>".pickRestart({
  A: "~@4 [e4,e5]@7 ~@5", B: "~@4 [e4,e5]@9 ~@3", C: "~ [e4,e5]@2 ~",
  D: "~@5 [g#3,d#4]!2 [a3,e4]!2 [a#3,f4] [a#3,b3,f4,f#4] [b3,f#4]!3 [c4,g4] [b3,f#4]", // G#5 A5 A#5 F#maj7 B5 C5 B5
  E: "[a#3,b3,f4,f#4] [a#3,f4] [a3,a#3,e4,f4] [a3,e4]!2 [g#3,a3,d#4,e4] [g#3,d#4]!2 [g3,g#3,d4,d#4] [g3,d4] ~@6", // F#maj7 A#5 Fmaj7 A5 Emaj7 G#5 D#maj7 G5
  F: "~@2 e4 f#4@2 e4 a4@4 f#4 e4@5", G: "~@2 e4 f#4 a4@3 f#4 e4 f#4 e4 c#4 b3 c#4 ~ a3", H: "f#3 ~@3",
  I: "a4@3 f#4 e4@2 f#4 a4 ~ b4 ~@4 a4 b4", J: "e5@3 b4 a4 ~ f#4 a4@2 b4 a4 f#4 e4 c#4 b3 a3", K: "e3 ~@3",
  L: "[e4,e5]@7 ~@9", M: "[e4,e5]@9 ~@7", N: "[e4,e5] ~",
})).s("gm_overdriven_guitar").gain(0.32).pan(0.4)

// chords · overdriven guitar · "clean guitar" · soft notes · F#5 G5 Dmaj7 F#5
const overdriven_guitar_soft = note("<~@10 [[f#3,c#4]!3 [g3,d4]!2 ~@11] [~@10 [f#3,g3,c#4,d4] [f#3,c#4]!5] ~@72>")
  .s("gm_overdriven_guitar").gain(0.08).pan(0.4)

// chords · distortion guitar · "guitar-dist"
const distortion_guitar = note(`<
  A B A B A B A B C B C B C B A B A B A B D E F G H E G@2 A B A B C B A B I J F G H J G@2 K@2 ~@8 L M N O P Q R S P T U
  V@8 W@2 V@8 ~
>`.pickRestart({
  A: "[f#2,f#3]@4 ~ [b2,b3,f#4] [c#3,c#4] [g#2,g#3,d#4]", B: "[a2,a3,e4]@4 ~ [d#3,d#4,a#4] [e3,e4] [a2,a3,e4]",
  C: "f#2@4 ~ [b2,b3,f#4] [c#3,c#4] [g#2,g#3,d#4]", // B5 C# G#5
  D: "[e2,e3,g#3]!2 [d2,d3] [d2,d3,g#3] [c#2,c#3,e3,g#3] [c#2,c#3,g#3] [b1,b2,e3,g#3] [b1,b2,g#3]", // E D Ddim C#m C#5 E
  E: "[e2,e3,g#3]!2 [d2,d3,e3,g#3] [d2,d3,g#3] [c#2,c#3,e3,g#3]!2 [b1,b2,e3,g#3]!2", // E E7 Ddim C#m E
  F: "[f#2,f#3,a#3]!2 [e2,e3,f#3,a#3]!2 [d#2,d#3,f#3,a#3]!2 [c#2,c#3,d#3,f#3,a#3] [c#2,c#3,f#3,a#3]", // F# F#7 D#m D#m7 F#
  G: "[f#2,f#3,a#3]!2 [e2,e3,f#3,a#3]!2 [d#2,d#3,f#3,a#3]!2 [c#2,c#3,f#3,a#3]!2", // F# F#7 D#m F#
  H: "[e2,e3,g#3] [e2,e3] [d2,d3,e3,g#3] [d2,d3,g#3] [c#2,c#3,e3,g#3] [c#2,c#3,g#3] [b1,b2,g#3] [b1,b2,e3,g#3]", // E E7 Ddim C#m C#5 E
  I: "[e2,g#3]!2 [d2,d3] [d2,d3,g#3] [c#2,c#3,e3,g#3] [c#2,c#3,g#3] [b1,b2,e3,g#3] [b1,b2,g#3]", // E D Ddim C#m C#5 E
  J: "[e2,e3,g#3] [e2,g#3] [d2,d3,e3,g#3] [d2,d3,g#3] [c#2,c#3,e3,g#3]!2 [b1,b2,e3,g#3]!2", K: "[[f#3,f#4], c#4@7 ~]/2",
  L: "~@15 c#3", M: "e3 f#3 a3 f#3@2 ~ f#3 c#3 e3 f3 f#3 ~ f#3 ~@2 c#3",
  N: "e3 f#3 a3 f#3@2 ~ f#3 c#3 e3 f3 f#3 ~ [e2,e3,g#3]@2 [e2,g#3]@2", // E
  O: "[d2,d3] [d2,d3,g#3] [c#2,c#3,e3,g#3] [c#2,c#3,g#3] [b1,b2,e3,g#3] [b1,b2,g#3] [e2,e3,g#3] [e2,g#3]", // D Ddim C#m C#5 E
  P: "[d2,d3,e3,g#3] [d2,d3,g#3] [c#2,c#3,e3,g#3]!2 [b1,b2,e3,g#3]!2 [f#2,f#3,a#3]!2", // E7 Ddim C#m E F#
  Q: "[e2,e3,f#3,a#3]!2 [d#2,d#3,f#3,a#3]!2 [c#2,c#3,d#3,f#3,a#3] [c#2,c#3,f#3,a#3] [f#2,f#3,a#3]!2", // F#7 D#m D#m7 F#
  R: "[e2,e3,f#3,a#3]!2 [d#2,d#3,f#3,a#3]!2 [c#2,c#3,f#3,a#3]!2 [e2,e3,g#3] [e2,e3]", // F#7 D#m F# E
  S: "[d2,d3,e3,g#3] [d2,d3,g#3] [c#2,c#3,e3,g#3] [c#2,c#3,g#3] [b1,b2,g#3] [b1,b2,e3,g#3] [e2,e3] [e2,g#3]", // E7 Ddim C#m C#5 E
  T: "[e2,e3,f#3,a#3]!2 [d#2,d#3,f#3,a#3]!2 [c#2,c#3,f#3,a#3]!2 [f#2,f#3,a#3]!2", // F#7 D#m F#
  U: "[e2,e3,f#3,a#3]!2 [d#2,d#3,f#3,a#3]!2 [c#2,c#3,f#3,a#3]!2 f#2@2", // F#7 D#m F#
  V: "[~@3 [b2,b3,f#4] [c#3,c#4] [g#2,g#3,d#4] [a2,a3,e4]@4 ~ [d#3,d#4,a#4] [e3,e4] [a2,a3,e4] [f#2,f#3]@4 ~ [b2,b3,f#4] [c#3,c#4] [g#2,g#3,d#4] [a2,a3,e4]@4 ~ [d#3,d#4,a#4] [e3,e4] [a2,a3,e4] [f#2,f#3]@4 ~ [b2,b3,f#4] [c#3,c#4] [g#2,g#3,d#4] [a2,a3,e4]@4 ~ [d#3,d#4,a#4] [e3,e4] [a2,a3,e4] [f#2,f#3]@4 ~ [b2,b3,f#4] [c#3,c#4] [g#2,g#3,d#4] [a2,a3,e4]@4 ~ [d#3,d#4,a#4] [e3,e4] [a2,a3,e4] [f#2,f#3]@2]/8", // B5 C# G#5 A5 D#5 E A5 F# …
  W: "[~@3 [b2,b3,f#4] [c#3,c#4] [g#2,g#3,d#4] [a2,a3,e4]@4 ~ [d#3,d#4,a#4] [e3,e4] [a2,a3,e4] f#2@2]/2", // B5 C# G#5 A5 D#5 E A5
})).s("gm_distortion_guitar").gain(0.48).pan(0.7)

// chords · distortion guitar · "guitar-dist" · soft notes
const distortion_guitar_soft = note(`<
  A B A B A B C B D B D B D B A B A B A B E F ~ G H F ~@2 A B A B D B A B I J ~ G H J ~@14 K L M ~ N O M ~ P@8 Q@8 R@4
>`.pickRestart({
  A: "c#3@4 ~ f#3 [g#3,g#4] d#3, c#4 ~@15", B: "e3@4 ~ a#3 [b3,b4] e3", C: "c#4 ~@9 f#3@2 [g#3,g#4]@2 d#3@2",
  D: "[f#3,c#4] ~@9 f#3@2 [g#3,g#4]@2 d#3@2, c#3 ~", E: "~@2 e3!2 ~ e3 ~ e3", F: "~@3 e3 ~@4", G: "~@6 d#2 ~",
  H: "~@5 e3!2 ~", I: "e3!4 ~ e3 ~ e3", J: "~ e3 ~ e3 ~@4", K: "~@7 e3", L: "e3!2 ~ e3 ~ e3 ~ e3", M: "~ e3 ~@6",
  N: "~@4 d#2 ~@3", O: "~@3 e3!2 ~@2 e3",
  P: "[~@12 [f#3,c#4] ~@9 f#3@2 [g#3,g#4]@2 d#3@2 e3@8 ~@2 a#3@2 [b3,b4]@2 e3@2 c#3@8 ~@2 f#3@2 [g#3,g#4]@2 d#3@2 e3@8 ~@2 a#3@2 [b3,b4]@2 e3@2 c#3@8 ~@2 f#3@2 [g#3,g#4]@2 d#3@2 e3@8 ~@2 a#3@2 [b3,b4]@2 e3@2 c#3@8 ~@2 f#3@2 [g#3,g#4]@2 d#3@2 e3@4, ~@12 c#3@8 ~@24 c#4 ~@31 c#4 ~@31 c#4 ~@19]/8", // F#5 G# B G# B G# B G#
  Q: "[~@6 a#3@2 [b3,b4]@2 e3@2 c#3@8 ~@2 f#3@2 [g#3,g#4]@2 d#3@2 e3@8 ~@2 a#3@2 [b3,b4]@2 e3@2 [f#3,c#4] ~@9 f#3@2 [g#3,g#4]@2 d#3@2 e3@8 ~@2 a#3@2 [b3,b4]@2 e3@2 c#3@8 ~@2 f#3@2 [g#3,g#4]@2 d#3@2 e3@8 ~@2 a#3@2 [b3,b4]@2 e3@2 c#3@8 ~@2 f#3@2 [g#3,g#4]@2 d#3@2 e3@4, ~@12 c#4 ~@31 c#3@8 ~@24 c#4 ~@31 c#4 ~@19]/8", // B G# B F#5 G# B G# B …
  R: "[~@3 a#3 [b3,b4] e3 c#3@4 ~ f#3 [g#3,g#4] d#3 e3@4 ~ a#3 [b3,b4] e3 c#3@4 ~@6, ~@12 c#4 ~@31 c#4 ~@19]/4", // B G# B
})).s("gm_distortion_guitar").gain(0.32).pan(0.7)

// bass · electric bass pick · "bass-pick"
const bass = note(`<
  A B C B A D C E@3 C F C G C D C F C F H@2 I J H@2 K@2 C F C F C G C D H@2 I J H@2 K@2 L M@3 N@2 O@2 N@2 P Q R S T U V
  S T W X@7 Y@8 Z@4 ~
>`.pickRestart({
  A: "f#1@9 ~ b1@2 c#2@2 g#1@2", B: "a1@4 ~ d#2 e2 a1", C: "f#1@4 ~ b1 c#2 g#1", D: "a1@9 ~ d#2@2 e2@2 a1@2",
  E: "[a1@5 ~ e2 a1 f#1@4 ~ b1 c#2 g#1 a1@5 d#2 e2 a1, ~@5 d#2@16 ~@3]/3", F: "a1@5 d#2 e2 a1",
  G: "~@5 d#2 e2 a1, a1@7 ~", H: "e2 d2 c#2 b1", I: "f#1 e2 d#2 ~", J: "f#1 e2 d#2 c#2", K: "f#1 e1 d#2 c#2", L: "f#1",
  M: "[c#3 e3 f#3 ~ f#3 ~@5 e3 c#3@2 b2 c#3@10 ~@2 [e2,b2] [f#2,c#3] ~ [e2,b2] [f#2,c#3]@9 f#1 f#1@7 ~]/3", // E5 F#5 E5 F#5
  N: "f#1@6 ~ f#1 f#1@7 ~", O: "[f#1@8 ~@2 [e2,b2] [f#2,c#3] ~ [e2,b2] [f#2,c#3]@9 f#1 f#1@7 ~]/2",
  P: "f#1@6 ~ f#1 f#1@7 c#2", Q: "e2 f#2 a2 f#2@2 ~ f#2 c#2 e2 f2 f#2 ~ f#2 ~@2 c#2",
  R: "e2 f#2 a2 f#2@2 ~ f#2 c#2 e2 f2 f#2 ~ e2@4", S: "d2 c#2 b1 e2", T: "d2 c#2 b1 f#1", U: "e2 d#2 c#2 f#1",
  V: "e2 d#2 c#2 e2", W: "e1 d#2 c#2 f#1",
  X: "[e1@4 d#2@4 c#2@4 f#1@9 ~ b1@2 c#2@2 g#1@2 a1@9 ~ d#2@2 e2@2 a1@2 f#1@8 ~@2 b1@2 c#2@2 g#1@2 a1@10 ~@2 e2@2 a1@2 f#1@8 ~@2 b1@2 c#2@2 g#1@2 a1@10 d#2@2 e2@2 a1@2 f#1@4, ~@35 d#2@16 ~@5]/7",
  Y: "[~@6 b1@2 c#2@2 g#1@2 a1@10 d#2@2 e2@2 a1@2 f#1@8 ~@2 b1@2 c#2@2 g#1@2 ~@10 d#2@2 e2@2 a1@2 f#1@8 ~@2 b1@2 c#2@2 g#1@2 a1@9 ~ d#2@2 e2@2 a1@2 f#1@8 ~@2 b1@2 c#2@2 g#1@2 a1@10 d#2@2 e2@2 a1@2 f#1@4, ~@22 a1@7 ~@35]/8",
  Z: "[~@3 b1 c#2 g#1 a1@5 d#2 e2 a1 f#1@4 ~ b1 c#2 g#1 a1@5 d#2 e2 a1 f#1@2]/4",
})).s("gm_electric_bass_pick").gain(0.64).pan(0.6)

// chords · brass section
const brass_section = note(`<
  ~@8 A B C ~ A B D ~ E B D ~ F G H@2 I G J@2 ~@8 K G H@2 I G J@2 ~@12 L M N O L M P O ~@4 Q R S T Q R S T Q R S T Q R S
  T
>`.pickRestart({
  A: "f#5 ~ f#5 ~ f#5 ~ f#5!3 e5!2 ~ e5@3 ~", B: "e5 ~ e5 ~ e5 ~ e5 ~ e5 d#5!2 ~ d#5@4", C: "d#5 ~@7", D: "d#5 ~@15",
  E: "f#5 ~ f#5 ~ f#5 ~ f#5!3 e5!2 ~ e5@2 ~ e5", F: "e5@6 [b4,e5] ~@9, b4@3 ~@13",
  G: "[b4,e5] ~ [b4,e5] ~ [b4,e5] ~ [g#4,c#5] [b4,e5]@2 ~ [g#4,c#5] ~ [b4,e5] ~ [c#5,f#5] ~", // E5 C#5 E5 C#5 E5 F#5
  H: "[[e5,a5] c#5@2 ~@7 c#5 b4@2 a4 f#4@6 ~@12, ~ f#5 ~@30]/2", I: "[b4,e5]@5 ~ [b4,e5] ~@9",
  J: "[[e5,a5] [c#5,f#5] ~@8 c#5 b4@2 a4 f#4@6 ~@12]/2", K: "e5@5 ~ [b4,e5] ~@9, b4@3 ~@13", L: "~@3 [b4,e5]",
  M: "~@2 [b4,e5] ~@9 [b4,e5] ~ [b4,e5] ~", // E5
  N: "[b4,e5] ~ [g#4,c#5] [b4,e5]@2 ~ [g#4,c#5] ~ [b4,e5] ~ [c#5,f#5] ~ [e5,a5] c#5@2 ~, ~@13 f#5 ~@2", // E5 C#5 E5 C#5 E5 F#5 A5
  O: "~@6 c#5 b4@2 a4 f#4@6",
  P: "[b4,e5] ~ [g#4,c#5] [b4,e5]@2 ~ [g#4,c#5] ~ [b4,e5] ~ [c#5,f#5] ~ [e5,a5] [c#5,f#5] ~@2", Q: "~@12 f#5 ~ f#5 ~",
  R: "f#5!3 ~ f#5 e5!2 ~ e5@2 ~@2 e5 ~ e5 ~", S: "e5 ~ e5 ~ e5 d#5!2 ~ d#5@4 d#5@2 ~@2", T: "~@6 f#5 ~ a5 f#5@2 ~@5",
})).s("gm_brass_section").gain(0.64)

// drums · kick
const kick = s("bd").struct(`<
  A@3 B C D@2 E D F D@9 F C G D F E@2 D@2 E H D F D@3 F D I D@2 E F D@2 E J D K L@2 M D@2 L N D O P Q R Q S Q S@2 T@5
  S@3 U T S T@2 S T@2 S T ~
>`.pickRestart({
  A: "x!4", B: "x!3 ~", C: "x ~@2 x!2 ~@3", D: "x ~@3 x!2 ~@2", E: "x ~@3 x!2 ~ x", F: "x!2",
  G: "x ~ x ~@3 x!2 ~@2 x ~@3 x ~", H: "x ~@7 x ~ x!2 ~ x ~@2", I: "x!2 ~@2 x!2 ~@2", J: "x ~@7 x ~ x ~@2 x ~@2",
  K: "x ~@6 x!2 ~@6 x", L: "x ~@6 x!2 ~@7", M: "x ~@6 x!2 ~ x ~@2 x ~ x", N: "x ~@6 x!2 ~ x ~@5", O: "x ~@2 x",
  P: "~@2 x!2 ~@2 x!2", Q: "~ x ~ x", R: "~@2 x!2 ~@4", S: "~@2 x!2 ~@2 x ~", T: "~@2 x!2 ~ x!2 ~", U: "~@3 x ~@2 x ~",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B@7 C B@3 C B@3 D B E B F B@3 C B@3 G B@3 H B@3 C B H B I B@12 J K L K M K N K O K@7 O K@9 P Q
>`.pickRestart({
  A: "~@10 x!2 ~ x!3", B: "~ x ~ x", C: "~@4 x ~@7 x ~ x!2", D: "~@4 x ~@6 x ~ x!3", E: "~ x ~@2",
  F: "~@4 x ~@5 x!2 ~ x!3", G: "~@4 x ~@5 x ~ x!4", H: "~@4 x ~@5 x ~ x ~ x!2", I: "~@4 x ~@7 x ~@2 x",
  J: "~@4 x ~@3 x ~ x!2 ~@4", K: "x!2", L: "x ~@5 x ~ x ~ x!2 ~@4", M: "x ~@5 x ~ x!4 ~@4", N: "x ~@5 x ~@2 x!3 ~@4",
  O: "x ~@7 x ~ x!2 ~@4", P: "x ~ x!2", Q: "x",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@3 A B C@3 D C@6 E B F C G ~@4 H ~@3 C E C@7 I J K B C B C@2 L M N O@3 P Q R S T U C@10 V C@2 W C@12 ~
>`.pickRestart({
  A: "x!5 ~@3", B: "~ x!7", C: "x!8", D: "x!6 ~ x", E: "x!4 ~ x!3", F: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2",
  G: "x ~ x ~ x ~ x!2", H: "x", I: "x ~ x ~ x ~ x ~ x ~ x!6", J: "~ x!2 ~ x!4", K: "x ~ x ~ x ~ x ~ x!5 ~ x!2",
  L: "x ~ x ~ x ~ x!4 ~ x ~ x ~@2", M: "x ~ x!14", N: "x ~ x!3 ~ x!10", O: "x!4 ~@2 x!10", P: "~ x!3 ~@2 x!7 ~ x!2",
  Q: "x!4 ~@2 x!3 ~ x!6", R: "x ~ x!3 ~ x!7 ~ x!2", S: "x!5 ~ x!10", T: "x ~ x ~ x ~ x!5 ~ x ~ x!2",
  U: "x!3 ~ x ~ x ~ x ~ x ~@3 x ~", V: "x!2 ~ x!5", W: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@19 A ~@25 B ~@2 C@5 ~@18 D ~@11 E>".pickRestart({
  A: "~ x ~ x ~ x ~@2", B: "~@5 x ~ x", C: "~ x ~@2", D: "x!2", E: "x",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@3 A ~@7 A ~@5 A ~ A ~ A ~@5 A ~@5 A ~ A ~ A ~@13 B ~ B ~ B ~ B ~ B ~@3 B ~@15
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~@20 A@4 B A@2 C A@8 ~@21 A D A D A D A E F@4 ~@15>".pickRestart({
  A: "x!8", B: "~ x!7", C: "x!7 ~", D: "x!6 ~ x", E: "x!6 ~@2", F: "x!2",
})).gain(0.64)

stack(
  overdriven_guitar, overdriven_guitar_soft, distortion_guitar, distortion_guitar_soft, bass, brass_section, kick,
  snare, hihat, open_hat, crash, tambourine
)

More by Blue Oyster Cult