Strudelify

Genocide

The Offspring

KeyF majorTempo175 bpm
0:00/0:00
// Genocide — The Offspring
// 175 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 134 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(175/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// 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@2 B C A@2 B C A@2 B C A@2 B C ~@8 D@7 E A F G H A F G H A@2 B C A@2 B C ~@8 A@2 B C A@2 B C I J K L A F G H A F G H
  A F G H A F G H M N O P M N O P Q N O P M N O P Q R S T U V S W A F G H A F G H A F G H A F G H A F G H A F G L X ~
>`.pickRestart({
  A: "[g2,d3] ~ [g2,d3] ~ [g2,d3]!2 [g2,d3]@3 ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~", // G5
  B: "[f2,c3] ~ [f2,c3] ~ [f2,c3]!2 [f2,c3]@3 ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~", // F5
  C: "[c3,g3] ~ [c3,g3] ~ [c3,g3]!2 [c3,g3]@3 ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~", // C5
  D: "[g2,d3,g3] ~ [g2,d3,g3] ~ [g2,d3,g3] ~ [g2,g3]@3 ~ [g2,d3,g3] ~ [g2,d3,g3] ~ [g2,d3,g3] ~, ~@6 d3 ~@9", // G5 G G5
  E: "c3@3 ~ c3@3 ~ c3@3 ~ d3@3 ~", F: "[bb2,f3] ~ [bb2,f3] ~ [bb2,f3]!2 [bb2,f3]@3 ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~",
  G: "[f3,c4] ~ [f3,c4] ~ [f3,c4]!2 [f3,c4]@3 ~ [f3,c4] ~ [f3,c4] ~@3", // F5
  H: "[d3,g3] ~ [d3,g3] ~ [d3,g3]!2 [d3,g3]@3 ~ [d3,g3] ~ [d3,g3] ~ [d3,g3] ~", I: "~@8 [g2,c3]@5 ~@3",
  J: "[g2,c3]@5 ~@3 [g2,c3]@5 ~@3", K: "[g2,d3]@11 ~@5", L: "d3@3 ~ d3@3 ~ d3@3 ~ c3@3 ~",
  M: "g2 ~ d3 ~ g2 ~ d3 ~ g2 ~ d3 ~ g2 ~ d3 ~", N: "bb2 ~ f3 ~ bb2 ~ f3 ~ bb2 ~ f3 ~ bb2 ~ f3 ~",
  O: "f3 ~ c4 ~ f3 ~ c4 ~ f3 ~ c4 ~ f3 ~ c4 ~", P: "c3 ~ g3 ~ c3 ~ g3 ~ c3 ~ g3 ~ c3 ~ g3 ~",
  Q: "[g2,d3] ~ [g2,d3] ~ g2 ~ d3 ~ g2 ~ d3 ~ g2 ~ d3 ~", R: "[bb2,f3] ~ [bb2,f3] ~ bb2 ~ f3 ~ bb2 ~ f3 ~ bb2 ~ f3 ~",
  S: "[f3,c4] ~ [f3,c4] ~ f3 ~ c4 ~ f3 ~ c4 ~ f3 ~ c4 ~", T: "[c3,g3] ~ [c3,g3] ~ c3 ~ g3 ~ c3 ~ g3 ~ c3 ~ g3 ~",
  U: "[g2,d3]@2 [g2,d3]@2 g2 ~ d3 ~ g2 ~ d3 ~ g2 ~ d3 ~", V: "[bb2,f3]@2 [bb2,f3]@2 bb2 ~ f3 ~ bb2 ~ f3 ~ bb2 ~ f3 ~",
  W: "[c3,g3] ~ [c3,g3] ~ [c3,g3]!2 [c3,g3]@3 ~ [c3,g3]!3 ~ [c3,g3] ~", X: "[g2,d3]",
})).s("gm_distortion_guitar").gain(0.51).pan(0.2)

// other · distortion guitar · "Guitar 2"
const distortion_guitar_2 = note(`<
  ~@8 A B C D A B C D ~@24 A B C D A B C D ~@32 A B C ~ E F G H E F G H I F G H E F G H I J K L M N K O ~@8 A B C D A B
  C D A B C D A B C ~@3
>`.pickRestart({
  A: "g4 ~ bb4 ~ bb4 ~ bb4 ~ a4 ~ a4 ~ bb4 ~ bb4 ~", B: "c5 ~ c5 ~ c5 ~ bb4 ~ bb4 ~ bb4 ~ a4 ~ a4 ~",
  C: "f4 ~ a4 ~ a4 ~ a4 ~ bb4 ~ a4 ~ f4 ~ a4 ~", D: "c4 ~ e4 ~ e4 ~ e4 ~ f4 ~ e4 ~ d4 ~ e4 ~",
  E: "g3 ~ d4 ~ g3 ~ d4 ~ g3 ~ d4 ~ g3 ~ d4 ~", F: "bb3 ~ f4 ~ bb3 ~ f4 ~ bb3 ~ f4 ~ bb3 ~ f4 ~",
  G: "f4 ~ c5 ~ f4 ~ c5 ~ f4 ~ c5 ~ f4 ~ c5 ~", H: "c4 ~ g4 ~ c4 ~ g4 ~ c4 ~ g4 ~ c4 ~ g4 ~",
  I: "[g3,d4] ~ [g3,d4] ~ g3 ~ d4 ~ g3 ~ d4 ~ g3 ~ d4 ~", J: "[bb3,f4] ~ [bb3,f4] ~ bb3 ~ f4 ~ bb3 ~ f4 ~ bb3 ~ f4 ~",
  K: "[f4,c5] ~ [f4,c5] ~ f4 ~ c5 ~ f4 ~ c5 ~ f4 ~ c5 ~", L: "[c4,g4] ~ [c4,g4] ~ c4 ~ g4 ~ c4 ~ g4 ~ c4 ~ g4 ~",
  M: "[g3,d4]@2 [g3,d4]@2 g3 ~ d4 ~ g3 ~ d4 ~ g3 ~ d4 ~", N: "[bb3,f4]@2 [bb3,f4]@2 bb3 ~ f4 ~ bb3 ~ f4 ~ bb3 ~ f4 ~",
  O: "[c4,g4] ~ [c4,g4] ~ [c4,g4]!2 [c4,g4]@3 ~ [c4,g4]!3 ~ [c4,g4] ~", // C5
})).s("gm_distortion_guitar").gain(0.51).pan(0.9)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@8 A@2 B C A@2 B C A@2 B C A@2 B C A@2 B D A@2 B E F G H I F G H I A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C
  ~@4 F G H I F G H I F G H I F G H I ~@24 F G H I F G H I F G H J F G H J F G H J F G H ~ K ~
>`.pickRestart({
  A: "g2 ~ g2 ~ g2 ~ g2@3 ~ g2!2 d2 ~ d2 ~", B: "f2 ~ f2 ~ f2 ~ f2@3 ~ f2!2 c2 ~ c2 ~",
  C: "c3 ~ c3 ~ c3 ~ c3@3 ~ c3!2 f2 ~ f2 ~", D: "c2 ~ c2 ~ c2 ~ c2@3 ~ c2!2 d2 ~ d2 ~",
  E: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~", F: "g2 ~ g2!3 ~ g2!3 ~ g2!2 a2 ~ a2!2", G: "bb2 ~ bb2!3 ~ bb2!3 ~ bb2!2 d3 ~ d3!2",
  H: "f3 ~ f3!3 ~ f3!3 ~ f3!2 d3 ~ d3!2", I: "g3 ~ g3!3 ~ g3!3 ~ g3!3 ~ g3!2", J: "c3 ~ c3!3 ~ c3!3 ~ c3!3 ~ d3!2",
  K: "[g2,d3]", // G5
})).s("gm_electric_bass_pick").gain(0.51)

// other · sitar · "Background"
const sitar = note(`<
  ~@31 A B C D E B C D F ~@24 G H I A J C D E B C D F B C D E B C D F ~@24 B C D E B C D F J C D E B C D K L M L M L ~@2
  A ~@2
>`.pickRestart({
  A: "g4@3 ~ g4@3 ~ g4@3 ~ g4@3 ~", B: "bb4@3 ~ bb4@3 ~ g4@5 ~@3", C: "f4@3 ~ f4@3 ~ g4@5 ~@3",
  D: "f4@3 ~ f4@3 ~ f4@3 ~ f4@3 ~", E: "f4@3 ~ g4@3 ~ g4@5 ~@3", F: "f4@2 ~@2 g4@3 ~ g4@5 ~@3", G: "~@8 g4@5 ~@3",
  H: "g4@5 ~@3 g4@5 ~@3", I: "g4@11 ~@5", J: "bb4@2 ~@2 bb4@3 ~ g4@5 ~@3", K: "f4@2 ~@2 g4@3 ~ g4@3 ~ f4@3 ~",
  L: "f4 ~ f4@4 ~@2 g4@8", M: "~@12 f4@3 ~",
})).s("gm_sitar").gain(0.51)

// drums · kick
const kick = s("bd").struct("<~@4 A@27 ~ A@32 ~@4 A@16 ~@8 B ~@7 B@5 ~@2 B A@23 C A ~>".pickRestart({
  A: "x", B: "x!2 ~@6", C: "~@10 x!2 ~@4",
})).gain(0.5).pan(0.6)

// drums · snare
const snare = s("sd").struct("<~@4 A@27 B A@23 C A@8 D@3 B A@16 ~@8 E ~@7 E@4 F A@2 E A@23 G H ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x!4", C: "~ x ~ x ~@4", D: "~@2 x!2", E: "x!2 ~@6", F: "x!2 ~ x ~ x ~ x",
  G: "x ~ x ~ x ~ x!2", H: "x",
})).gain(0.5).pan(0.6)

// drums · low tom
const low_tom = s("lt").struct("<~@55 A ~@8 B@3 ~@25 C ~@7 C@5 ~@2 D ~@26>".pickRestart({
  A: "~@8 x!8", B: "~@6 x!2 ~@8", C: "x!2 ~@6", D: "x ~ x ~ x ~@2 x ~@4 x!4",
})).gain(0.4).pan(0.6)

// drums · mid tom
const mid_tom = s("mt").struct("<~@64 [x!6 ~@10]!3 ~@40 [~@5 x ~@2 x!4 ~@4] ~@26>").gain(0.5).pan(0.6)

// drums · crash
const crash = s("cr").struct("<~@91 A B ~@6 C D E@3 B ~@29>".pickRestart({
  A: "x!16", B: "x", C: "x!15 ~", D: "~@3 x!13", E: "x ~@2 x!13",
})).gain(0.4).pan(0.6)

// drums · ride
const ride = s("rd").struct("<~@4 A@27 ~ A@23 ~ A@8 ~@4 A@16 ~@24 A@23 ~ B ~>".pickRestart({
  A: "x!8", B: "x",
})).gain(0.4).pan(0.6)

stack(distortion_guitar, distortion_guitar_2, bass, sitar, kick, snare, low_tom, mid_tom, crash, ride)

More by The Offspring