Strudelify

Volcano Girls

Veruca Salt

KeyB minorTempo131 bpm
0:00/0:00
// Volcano Girls — Veruca Salt
// 131 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(131/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.

// chords · distortion guitar · "Guitar 1"
const distortion_guitar = note(`<
  ~ A B C A B C A B C D E D E D E D F G H I F J K L@2 G H I F J M N A B C A B C D E D O@16 A B C A B C P Q R P S@5 D E D
  E D E D T@2 U@2 V W U@2 X@3 P Q R P Q R P Q R P S@5 Y
>`.pickRestart({
  A: "[b2,f#3,b3,d#4]@2 ~@4 [b2,f#3,b3,d#4] [d3,a3,d4,f#4]", B: "[d3,a3,d4,f#4]@2 ~@4 [d3,a3,d4,f#4] [e3,b3,e4,g#4]",
  C: "[e3,b3,e4,g#4] ~@2 [e3,b3,e4,g#4]", D: "[a2,e3,a3] [b2,f#3,b3] ~ [a2,d3,a3,d4] [b2,e3,b3,e4]!3 [b2,f#3,b3]",
  E: "[b2,f#3,b3]!2 [d3,a3,d4]@2 [b2,f#3,b3]!2 [e3,b3,e4]@2", F: "[b2,f#3,b3]!8", G: "[b2,f#3,b3]!7 [e2,b2,e3]",
  H: "[e2,b2,e3]!7 [g2,d3,g3]", I: "[g2,d3,g3]!7 [b2,f#3,b3]", J: "[b2,f#3,b3]!7 [g2,d3,g3]",
  K: "[g2,d3,g3]!7 [e2,b2,e3]", L: "[[e2,b2,e3]!5 [a2,e3,a3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]!7]/2",
  M: "[g2,d3,g3]!7 [a2,e3,a3]", N: "[a2,e3,a3]!7 [b2,f#3,b3]", O: "b2 f#3 b3 a3@2 f#3 a3 f#3",
  P: "[b2,f#3,b3]!7 [d3,a3,d4]", Q: "[d3,a3,d4]!7 [e3,b3,e4]", R: "[e3,b3,e4]!7 [a3,d4]",
  S: "[[d3,a3,d4]!7 [e3,b3,e4]@2 [e3,b3,e4]!2 [d3,a3,d4]!2 [e3,b3,e4] [d3,a3,d4] [e3,b3,e4]@2 [e3,b3,e4]!2 [d3,a3,d4]!2 [e3,b3,e4] [d3,a3,d4] [e3,b3,e4]@2 [e3,b3,e4]!2 [d3,a3,d4]!2 [e3,b3,e4] [d3,a3,d4] [e3,b3,e4]@2 [e3,b3,e4]!7]/5", // D5 E5 D5 E5 D5 E5 D5 E5 …
  T: "[b2,f#3]!7 [a2,e3]", U: "[b2,f#3]!8", V: "[e2,b2]!8", W: "[g2,d3]!8", X: "[[g2,d3]!6 [g2,d3,g3] [a2,e3,a3]@17]/3",
  Y: "[b2,f#3,b3] ~", // B5
})).s("gm_distortion_guitar").gain(0.3).pan(0.6)

// chords · overdriven guitar · "Guitar 2"
const overdriven_guitar = note(`<
  ~@11 A@6 ~@25 B C D E B F G H@2 C D E B F I J K L M N O P Q R S T U@5 ~ A@4 V W ~@27
>`.pickRestart({
  A: "[~ [c4,d4] ~ [d4,e4]@2 ~@3]/2", B: "[b2,f#3,b3]!8", C: "[b2,f#3,b3]!7 [e2,b2,e3]", D: "[e2,b2,e3]!7 [g2,d3,g3]",
  E: "[g2,d3,g3]!7 [b2,f#3,b3]", F: "[b2,f#3,b3]!7 [g2,d3,g3]", G: "[g2,d3,g3]!7 [e2,b2,e3]",
  H: "[[e2,b2,e3]!5 [a2,e3,a3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]!7]/2", I: "[g2,d3,g3]!7 [a2,e3,a3]",
  J: "[a2,e3,a3]!7 [b2,f#3,b3]", K: "[e5,f5]@5 [e5,f5] d5@2", L: "a5@3 [d5,f#5]@3 b4@2", M: "b4 d5 f#5@3 [d5,f#5] b4@2",
  N: "c#5 b4 f#5 e5 c#5 b4 f#5 e5 c#5 b4 f#5 e5 c#5 b4 f#5 e5", O: "b4 a4 e5 d5 b4 a4 e5 d5 b4 a4 e5 d5 b4 a4 e5 d5",
  P: "a4@3 e4@3 d4@2", Q: "b3 a3 [d#4,f#4] [d#4,f#4]@2 a3 b3 a3", R: "b3@2 b3@2 e4 b3 d#4@2 b3@2 a3@2 b3@4",
  S: "e4 d4 b3 a3 f#3 e3 d3 b2!2 d3 e3 f#3 a3 b3 d4 e4", T: "b3@2 a3 b3 e4@2 [b3,d#4]@4 [a#3,d4]@2 [b3,d#4]@4",
  U: "[[b3,d#4]@2 [d4,f#4]@4 d3@2 [d4,f#4]@4 ~ [d4,f#4] [e4,g#4]@10 [b3,d#4,e4,f#4]@2 [b3,e4,g#4]@2 [b3,d#4,e4,f#4]@2 f#5@6 [b3,e4,g#4]@4 [b3,d#4,e4,f#4]@2 [b3,e4,g#4]@2 [b3,d#4,e4,f#4]@2 f#5@6 [b3,e4,g#4]@4 [b3,d#4,e4,f#4]@2 [b3,e4,g#4]@2 [b3,d#4,e4,f#4]@2 f#5@6 [b3,e4,g#4]@2 [b3,e4,g#4]@2 [b3,e4,g#4]@2 [b3,e4,g#4]@2 [b3,e4,g#4]@2 [b3,e4,g#4]@2]/5", // B D E B E B E B …
  V: "~ [c4,d4] ~ [d4,e4]", W: "[d4,e4] ~@3",
})).s("gm_overdriven_guitar").gain(0.2).pan(0.3)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@5 A@6 B A@4 B A@23 B C A@14 D A@12 C A@2 D A@7 ~@11 D A@6 D@2 A@3 D A@2 ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@3 x", D: "~ x ~@2",
})).gain(0.64)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@4 A ~@36 B ~@14 C D ~@11 B D@2 C ~@18 A ~@6 A@2 ~@3 A ~@3>".pickRestart({
  A: "~@3 x", B: "~@2 x!2 ~@3 x", C: "~@3 x ~@2 x!2", D: "~@3 x ~@3 x",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@90 [~@6 x!2] ~@16>").gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@90 [x!5 ~ x ~ x!4 ~@4] ~@16>").gain(0.4)

// drums · splash
const splash = s("cr").struct("<[x!4]!80 ~@10 [x!4]!16 ~>").gain(0.4)

stack(distortion_guitar, overdriven_guitar, kick, snare, snare_soft, mid_tom, high_tom, splash)

More by Veruca Salt