Strudelify

Seether

Veruca Salt

KeyB♭ majorTempo140 bpm
0:00/0:00
// Seether — Veruca Salt
// 140 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/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 · electric bass finger · "Bass"
const bass = note(`<
  ~@3 A B C D E D F G@2 H I J K H L J M N O P Q N O R S D E D E D E D T U V G@2 H I J W X Y J M N O P Q N O R Z D E D E
  D E D T U V AA AB AC AD AE AF AG AH AI AF AJ AK@2 D E D E D E D T D E D E D T U V D E D E D T U V AL AM AN AO@3
>`.pickRestart({
  A: "~@4 f2 e2 eb2 d2", B: "bb1!5 b1 ~@2", C: "bb1!5 a1 ab1 a1", D: "bb1!3 ab1!4 db2", E: "db2!3 bb1!2 db2!2 ab1",
  F: "db2!2 eb2 f2@2 db2!2 ab1", G: "bb1!6 ~ ab1", H: "bb1!8", I: "bb1!2 ~ bb1!3 c2 eb2", J: "ab1!8", K: "ab1!7 bb1",
  L: "bb1!4 c2 eb2 f2 bb1", M: "ab1!4 bb1 a1 ab1 a1", N: "bb1!2 d2 c2 g1!2 ~ g1", O: "eb2!3 d2 bb1!2 a1 ab1",
  P: "bb1!3 a1 g1!2 ~ g1", Q: "eb2!3 e2 f2!2 eb2 d2", R: "g1!2 g1@2 g1 g1@2 f1", S: "ab1!2 bb1 ab1 bb1 db2 bb1 ab1",
  T: "db2!2 eb2 f2@2 db2 ab1 a1", U: "bb1@2 ab1 bb1!2 ab1 bb1 db2", V: "eb2!2 db2 eb2@2 db2 bb1 ab1",
  W: "ab1@2 ab1@2 ab1@2 ab1@2 ab1@2 ab1@2 eb2@2 ab1 a1", X: "bb1!2 ~ bb1!5", Y: "bb1!2 ~ bb1 f2 eb2 c2 eb2",
  Z: "ab1!4 bb1 ab1 bb1 d2", AA: "bb1!4 ab1 bb1 ~ db2", AB: "db2!4 ab2 db2 d2!2", AC: "eb2!5 db2 bb1 db2",
  AD: "gb2!2 d2@2 db2 ab1 bb1 db2", AE: "db2!2 bb1 a1 ab1 a1 bb1 db2", AF: "eb2@2 eb2@2 eb2!2 bb2 eb2",
  AG: "eb2!2 bb2 eb2!3 bb2 eb2", AH: "db2@3 db2 db2@4", AI: "db2 db2@2 ab1 bb1 db2 bb1 ab1",
  AJ: "eb2!2 bb2 eb2 bb1 a1 ab1 g1", AK: "[f1@10 bb1 ab1 bb1 db2 ab1 a1]/2", AL: "bb1!4 bb1@2 ~@2", AM: "bb1!5 ~@3",
  AN: "bb1!3 ab1 ab1@2 ~@2", AO: "[ab1@2 ab1@2 bb1@3 eb2@2 eb2@31 ~@8]/3",
})).s("gm_electric_bass_finger").gain(0.53)

// chords · overdriven guitar · "Guitar 1"
const overdriven_guitar = note(`<
  ~@2 A@4 B C B C ~@10 D E D E D E F G B C B C B C B C H I ~@10 D E D E D E F G B C B C B C B C H I H J I K J I L J M I
  N O@2 B C B C B C B C B C B C B C H J B C B C B C H J A@2 P Q@3
>`.pickRestart({
  A: "[bb2,f3,d4]!5 ~@3", B: "[bb2,f3,d4]!2 ~ [ab2,eb3,c4]!3 ~ [db3,ab3,f4]",
  C: "[db3,ab3,f4]!2 ~ [bb2,f3,d4] ~ [db3,ab3,f4] ~@2", D: "[bb2,f3,d4]!4 [ab2,eb3,c4]!3 [eb3,bb3,g4]",
  E: "[eb3,bb3,g4]!4 [bb2,f3,d4]!4", F: "[g2,d3,bb3]!8", G: "[ab2,eb3,c4]!8", H: "[bb2,f3,d4]!8", I: "[eb3,bb3,g4]!8",
  J: "[db3,ab3,f4]!8", K: "[gb2,db3,bb3]!8", L: "[eb3,bb3,g4]!7 [db3,ab3,f4]", M: "[db3,ab3,f4]!7 [eb3,bb3,g4]",
  N: "[eb3,bb3,g4]!7 [f3,c4,a4]", O: "[f3,c4,a4]/2", P: "[bb2,f3,d4]!3 [ab2,eb3,c4] [ab2,eb3,c4]@2 ~@2",
  Q: "[[ab2,eb3,c4]@2 [ab2,eb3,c4]@2 [ab2,eb3,c4]@3 [eb3,bb3,g4]@2 [eb3,bb3,g4]@31 ~@8]/3", // Ab Eb
})).s("gm_overdriven_guitar").gain(0.6)

// chords · electric guitar muted · "Guitar 1 (mute)"
const electric_guitar_muted = note("<~@10 A@2 B@2 C@2 B@2 C@2 ~@18 A@2 B@2 C@2 B@2 C@2 ~@61>".pickRestart({
  A: "[bb2,f3]!7 [ab2,eb3]", B: "[bb2,f3]!8", C: "[ab2,eb3]!8",
})).s("gm_electric_guitar_muted").gain(0.52)

// other · overdriven guitar · "Guitar 2"
const overdriven_guitar_2 = note("<~@79 A@2 B C D@2 E@2 ~@22>".pickRestart({
  A: "[bb3@8 ab4@4 bb3@2 f4@4 bb3@2 eb4@2 db4@2 c4@2 db4@2 c4 db4@3]/2",
  B: "bb4@2 g4@2 ab4 g4 eb4@2 d4@2 eb4@2 e4@2 f4@2", C: "g4@2 f4@2 g4@2 g4@4 g4@2 f4@2 g4 f4",
  D: "[eb4@2 db4@2 eb4 db4 bb3@2 ab3@2 ab3@2 eb4@2 db4@4 bb3@2 f4 eb4 db4@2 bb3@4 ~@4]/2",
  E: "[c5@4 c5@2 bb4 c5@2 [ab4,c5]!7]/2", // Ab
})).s("gm_overdriven_guitar").gain(0.64)

// drums · rim
const rim = s("rim").struct("<[x!2] [x!4] ~@107>").gain(0.64)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3 A@2 B C A@2 B C A@8 B A@7 B C A@6 B C A@10 B A@7 B C A@6 B C A@5 B A@7 B C A@6 B A@5 B C A@12 B ~@2
>`.pickRestart({
  A: "x!2", B: "x", C: "~ x",
})).gain(0.4)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@4 A B C A@2 B C A@17 C A@6 B C A@19 C A@6 B C A@13 B C A@6 B A@6 C A@12 D ~@2
>`.pickRestart({
  A: "x!8", B: "x!4 ~@4", C: "~@2 x!6", D: "x!2 ~@6",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@5 A ~@3 A ~@17 B ~@7 A ~@19 B ~@7 A ~@6 C ~@21 B ~@16>".pickRestart({
  A: "~@12 x!4", B: "~@7 x!3 ~@3 x!3", C: "~@2 x!2 ~ x!2 ~",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~@27 [~@3 x ~@2 x ~] ~@27 [~@3 x ~@2 x ~] ~@36 [~@3 x ~@2 x ~] ~@16>").gain(0.8)

// drums · crash
const crash = s("cr").struct("<~@6 A ~@3 A ~@17 A ~@7 A ~@19 A ~@7 A ~@14 A ~@13 A ~@15>".pickRestart({
  A: "x",
})).gain(0.8)

stack(
  bass, overdriven_guitar, electric_guitar_muted, overdriven_guitar_2, rim, snare, low_tom, pedal_hat, mid_tom,
  high_tom, crash
)

More by Veruca Salt