Strudelify
Cool To Hate cover art

1997 · Ixnay On The Hombre

Cool To Hate

The Offspring

KeyA♭ majorTempo170 bpm
0:00/0:00
// Cool To Hate — The Offspring
// 170 bpm, 4/4, key Ab 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: duplicate parts dropped: ch 5 "Voc2B" lead 2 sawtooth (copy of ch 2 "Voc2" lead 1 square); ch 4 "Guit2" distortion guitar (copy of ch 3 "Guit1" distortion guitar)
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(170/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, A@4 for four bars: edit a riff to change every repeat.

// other · lead 1 square · "Voc2"
const lead_1_square = note("<~@16 A B ~@2 A B ~@26 A B ~@2 A B ~@50 C@3 ~ D@3 ~@6>".pickRestart({
  A: "~@3 ab5@5", B: "g5@3 f5@5", C: "[~@13 ab5@10 g5@5 f5@10 ~@10]/3", D: "[~@12 ab5@9 g5@6 f5@10 ~@11]/3",
})).s("gm_lead_1_square").gain(0.32).pan(0.8)

// bass · electric bass finger
const bass = note(`<
  A B A B A B A B C D E D C D F G H I J I H I J I J I J I A B A B A B A B A B A B C D E D C D F G H I J I H I J I J I J
  I K L@2 M N O@2 P Q@3 R S@3 T U@2 V W@3 X Y@3 Z AA AB@2 AC@2 AD@8 AE@5 AF AG AH AI AJ@5 AK AL AM
>`.pickRestart({
  A: "f2!2 ~@3 c2 f2!2", B: "eb2!2 ~@3 bb1 eb2!2", C: "f2@5 c2 f2!2", D: "eb2@5 bb1 eb2!2", E: "db2@5 ab1 db2!2",
  F: "bb1!8", G: "c2!8", H: "f2@2 f2@2 f2@3 ab1@3 ab1@2 ab1@2 ab1@2", I: "eb2@2 eb2@2 eb2@3 bb1@3 bb1@2 bb1@2 bb1@2",
  J: "db2@2 db2@2 db2@3 ab1@3 ab1@2 ab1@2 ab1@2", K: "f2@2 f2@2 ~@3 c2@2 f2@2 ~ f2@2 ~@2",
  L: "[~ c2@2 eb2@2 eb2@2 ~@3 bb1@2 ~ eb2@2 eb2@2 ~@3 bb1@2 f2@2 f2@2 ~@3 c2@2 ~]/2",
  M: "f2@2 f2@2 ~@3 c2@2 eb2@2 eb2@2 ~@3", N: "bb1@2 ~ eb2@2 eb2@2 ~@3 bb1@2 f2@2 f2@2",
  O: "[~@3 c2@2 ~ f2@2 f2@2 ~@3 c2@2 eb2@2 eb2@2 ~@3 bb1@2 ~ eb2@2 eb2@2 ~@3]/2",
  P: "bb1@2 bb1@2 bb1@2 ~ bb1@2 bb1@2 ~ bb1@2 bb1@2",
  Q: "[bb1@2 ~ bb1@2 c2@2 ~ c2@2 c2@2 c2@2 ~ c2@2 c2@2 c2@2 ~ c2@2 f2@2 ~ f2@2 f2@2 f2@2 ~ ab1@2 ab1@2 ab1@2 ~ ab1@2 eb2@2 ~ eb2@2]/3",
  R: "eb2@2 eb2@2 ~ bb1@2 bb1@2 bb1@2 ~ bb1@2 db2@2",
  S: "[~ db2@2 db2@2 db2@2 ~ ab1@2 ab1@2 ab1@2 ~ ab1@2 eb2@2 ~ eb2@2 eb2@2 eb2@2 ~ bb1@2 bb1@2 bb1@2 ~ bb1@2 f2@2 ~ f2@2 f2@2 f2@2 ~ ab1@2]/3",
  T: "ab1@2 ab1@2 ~ ab1@2 eb2@2 ~ eb2@2 eb2@2 eb2@2",
  U: "[~ bb1@2 bb1@2 ~ bb1@2 bb1@2 db2@2 ~ db2@2 db2@2 db2@2 ~ ab1@2 ab1@2 ~ ab1@2 ab1@2 eb2@2 ~]/2",
  V: "eb2@2 eb2@2 eb2@2 ~ bb1@2 bb1@2 ~ bb1@2 bb1@2",
  W: "[f2@2 ~ f2@2 f2@2 f2@2 ~ ab1@2 ab1@2 ~ ab1@2 ab1@2 eb2@2 ~ eb2@2 eb2@2 eb2@2 ~ bb1@2 bb1@2 ~ bb1@2 bb1@2 db2@2 ~ db2@2 db2@2 db2@2 ~]/3",
  X: "ab1@2 ab1@2 ~ ab1@2 ab1@2 eb2@2 ~ eb2@2 eb2@2",
  Y: "[~ eb2@2 bb1@2 bb1@2 ~ bb1@2 bb1@2 f2@2 ~ f2@2 f2@2 ~ f2@2 ab1@2 ab1@2 ~ ab1@2 ab1@2 eb2@2 ~ eb2@2 eb2@2 ~ eb2@2 bb1@2 bb1@2 ~ bb1@2]/3",
  Z: "bb1@2 db2@2 ~ db2@2 db2@2 db2@2 ~ ab1@2 ab1@2", AA: "ab1@2 ab1@2 ~ eb2@2 eb2@2 eb2@2 eb2@2 ~ bb1@2",
  AB: "[bb1@2 bb1@2 bb1@2 ~ db2@2 db2@2 db2@2 db2@2 ab1@2 ab1@2 ~ ab1@2 ab1@2 eb2@2 eb2@2 eb2@2 eb2@2]/2",
  AC: "[~ bb1@2 bb1@2 bb1@2 bb1@2 db2@2 db2@2 db2@2 db2@2 ab1@2 ab1@2 ~ ab1@2 ab1@2 eb2@2 eb2@2 eb2@2]/2",
  AD: "[eb2@2 bb1@2 bb1@2 bb1@2 bb1@2 f2@14 eb2@2 f2@14 f2@2 eb2@13 eb2@2 f2@16 f2@10 c2@2 f2@2 f2@2 eb2@10 bb1@2 eb2 eb2@2 db2@10 ab1@2 db2@2 db2@2 eb2@8]/8",
  AE: "[~@2 bb1@2 eb2@2 eb2@2 f2@10 c2@2 f2@2 f2@2 eb2@9 bb1@2 eb2@2 eb2@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 f2@2 f2@2 f2@3 ab1@2]/5",
  AF: "~ ab1@2 ab1@2 ab1@2 eb2 eb2@2 eb2@3 bb1@3", AG: "bb1@2 bb1@2 bb1@2 db2@2 db2@2 db2@3 ab1@3",
  AH: "ab1@2 ab1@2 ab1@2 eb2@2 eb2@2 eb2@3 bb1@3", AI: "bb1@2 bb1@2 bb1@2 f2@2 f2@2 f2@3 ab1@3",
  AJ: "[ab1 ab1@2 ab1@2 eb2@2 eb2@2 eb2@3 bb1@3 bb1@2 bb1@2 bb1@2 db2@2 db2@2 db2@3 ab1@3 ab1@2 ab1@2 ab1@2 eb2@2 eb2@2 eb2@3 bb1@3 bb1@2 bb1@2 bb1@2 db2@2 db2@2 db2@3 ab1@3 ~ ab1@2 ab1@2 eb2@2 eb2@2 eb2@3 bb1@3 bb1@2, ~@63 ab1@2 ~@15]/5",
  AK: "bb1@2 bb1@2 db2@2 db2@2 db2@3 ab1@3 ab1@2", AL: "ab1@2 ab1@2 eb2@2 eb2@2 eb2@3 bb1@3 bb1@2",
  AM: "bb1@2 ~ f2@4 ~@9, ~ bb1 ~@6",
})).s("gm_electric_bass_finger").gain(0.5)

// chords · distortion guitar · "Guit1"
const distortion_guitar = note(`<
  A B A B A B A B C D E D C D F G H I J I H I J I J I J I A B A B A B A B A B A B C D E D C D F G H I J I H I J I J I J
  I K L@2 M N O@2 P Q@3 R S@3 T U@2 V W@3 X Y@3 Z AA AB@2 AC@2 AD@8 AE@5 AF AG AH AI AJ@5 AK AL AM
>`.pickRestart({
  A: "[f3,c4,f4]!2 ~@3 [c3,g3,c4] [f3,c4,f4]!2", B: "[eb3,bb3,eb4]!2 ~@3 [bb2,f3,bb3] [eb3,bb3,eb4]!2",
  C: "[f3,c4,f4]@5 [c3,g3,c4] [f3,c4,f4]!2", D: "[eb3,bb3,eb4]@5 [bb2,f3,bb3] [eb3,bb3,eb4]!2",
  E: "[db3,ab3,db4]@5 [ab2,eb3,ab3] [db3,ab3,db4]!2", F: "[bb2,f3,bb3]!8", G: "[c3,g3,c4]!8",
  H: "[f3,c4]@2 [f3,c4]@2 [f3,c4]@3 [ab2,eb3]@3 [ab2,eb3]@2 [ab2,eb3]@2 [ab2,eb3]@2", // F5 Ab5
  I: "[eb3,bb3]@2 [eb3,bb3]@2 [eb3,bb3]@3 [bb2,f3]@3 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3]@2", // Eb5 Bb5
  J: "[db3,ab3]@2 [db3,ab3]@2 [db3,ab3]@3 [ab2,eb3]@3 [ab2,eb3]@2 [ab2,eb3]@2 [ab2,eb3]@2", // Db5 Ab5
  K: "[f3,c4,f4]@2 [f3,c4,f4]@2 ~@3 [c3,g3]@2 [f3,c4,f4]@2 ~ [f3,c4,f4]@2 ~@2", // F5 C5 F5
  L: "[~ [c3,g3]@2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 ~@3 [bb2,f3]@2 ~ [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 ~@3 [bb2,f3]@2 [f3,c4,f4]@2 [f3,c4,f4]@2 ~@3 [c3,g3]@2 ~]/2", // C5 Eb5 Bb5 Eb5 Bb5 F5 C5
  M: "[f3,c4,f4]@2 [f3,c4,f4]@2 ~@3 [c3,g3]@2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 ~@3", // F5 C5 Eb5
  N: "[bb2,f3]@2 ~ [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 ~@3 [bb2,f3]@2 [f3,c4,f4]@2 [f3,c4,f4]@2", // Bb5 Eb5 Bb5 F5
  O: "[~@3 [c3,g3]@2 ~ [f3,c4,f4]@2 [f3,c4,f4]@2 ~@3 [c3,g3]@2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 ~@3 [bb2,f3]@2 ~ [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 ~@3]/2", // C5 F5 C5 Eb5 Bb5 Eb5
  P: "[bb2,f3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 ~ [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 ~ [bb2,f3,bb3]@2 [bb2,f3,bb3]@2", // Bb5
  Q: "[[bb2,f3,bb3]@2 ~ [bb2,f3,bb3]@2 [c3,g3,c4]@2 ~ [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 ~ [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 ~ [c3,g3,c4]@2 [f3,c4,f4]@2 ~ [f3,c4,f4]@2 [f3,c4,f4]@2 ab2@2 ~ [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 ~ ab2@2 [eb3,bb3,eb4]@2 ~ [eb3,bb3,eb4]@2]/3", // Bb5 C5 F5 Ab5 Eb5
  R: "[eb3,bb3,eb4]@2 bb2@2 ~ [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 ~ bb2@2 [db3,ab3,db4]@2", // Eb5 Bb5 Db5
  S: "[~ [db3,ab3,db4]@2 [db3,ab3,db4]@2 ab2@2 ~ [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 ~ ab2@2 [eb3,bb3,eb4]@2 ~ [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 bb2@2 ~ [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 ~ bb2@2 [f3,c4,f4]@2 ~ [f3,c4,f4]@2 [f3,c4,f4]@2 ab2@2 ~ [ab2,eb3,ab3]@2]/3", // Db5 Ab5 Eb5 Bb5 F5 Ab5
  T: "[ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 ~ ab2@2 [eb3,bb3,eb4]@2 ~ [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 bb2@2", // Ab5 Eb5
  U: "[~ [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 ~ [bb2,f3,bb3]@2 bb2@2 [db3,ab3,db4]@2 ~ [db3,ab3,db4]@2 [db3,ab3,db4]@2 ab2@2 ~ [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 ~ [ab2,eb3,ab3]@2 ab2@2 [eb3,bb3,eb4]@2 ~]/2", // Bb5 Db5 Ab5 Eb5
  V: "[eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 bb2@2 ~ [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 ~ [bb2,f3,bb3]@2 bb2@2", // Eb5 Bb5
  W: "[[f3,c4,f4]@2 ~ [f3,c4,f4]@2 [f3,c4,f4]@2 ab2@2 ~ [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 ~ [ab2,eb3,ab3]@2 ab2@2 [eb3,bb3,eb4]@2 ~ [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 bb2@2 ~ [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 ~ [bb2,f3,bb3]@2 bb2@2 [db3,ab3,db4]@2 ~ [db3,ab3,db4]@2 [db3,ab3,db4]@2 ab2@2 ~]/3", // F5 Ab5 Eb5 Bb5 Db5
  X: "[ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 ~ [ab2,eb3,ab3]@2 ab2@2 [eb3,bb3,eb4]@2 ~ [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2", // Ab5 Eb5
  Y: "[~ bb2@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 ~ [bb2,f3,bb3]@2 bb2@2 [f3,c4,f4]@2 ~ [f3,c4,f4]@2 [f3,c4,f4]@2 ~ ab2@2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 ~ [ab2,eb3,ab3]@2 ab2@2 [eb3,bb3,eb4]@2 ~ [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 ~ bb2@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 ~ [bb2,f3,bb3]@2]/3", // Bb5 F5 Ab5 Eb5 Bb5
  Z: "bb2@2 [db3,ab3,db4]@2 ~ [db3,ab3,db4]@2 [db3,ab3,db4]@2 ab2@2 ~ [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2", // Db5 Ab5
  AA: "[ab2,eb3,ab3]@2 ab2@2 ~ [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 bb2@2 ~ [bb2,f3,bb3]@2", // Ab5 Eb5 Bb5
  AB: "[[bb2,f3,bb3]@2 [bb2,f3,bb3]@2 bb2@2 ~ [db3,ab3,db4]@2 [db3,ab3,db4]@2 [db3,ab3,db4]@2 ab2@2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 ~ [ab2,eb3,ab3]@2 ab2@2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 bb2@2]/2", // Bb5 Db5 Ab5 Eb5
  AC: "[~ [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 bb2@2 [db3,ab3,db4]@2 [db3,ab3,db4]@2 [db3,ab3,db4]@2 ab2@2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 ~ [ab2,eb3,ab3]@2 ab2@2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2]/2", // Bb5 Db5 Ab5 Eb5
  AD: "[bb2@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 bb2@2 [f3,c4,f4]@14 [eb3,bb3,eb4]@2 [f3,c4,f4]@14 [f3,c4,f4]@2 [eb3,bb3,eb4]@13 [eb3,bb3,eb4]@2 [f3,c4,f4]@16 [f3,c4,f4]@10 [c3,g3,c4]@2 [f3,c4,f4]@2 [f3,c4,f4]@2 [eb3,bb3,eb4]@10 [bb2,f3,bb3]@2 [eb3,bb3,eb4] [eb3,bb3,eb4]@2 [db3,ab3,db4]@10 [ab2,eb3,ab3]@2 [db3,ab3,db4]@2 [db3,ab3,db4]@2 [eb3,bb3,eb4]@8]/8", // Bb5 F5 Eb5 F5 Eb5 F5 C5 F5 …
  AE: "[~@2 [bb2,f3,bb3]@2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 [f3,c4,f4]@10 [c3,g3,c4]@2 [f3,c4,f4]@2 [f3,c4,f4]@2 [eb3,bb3,eb4]@9 [bb2,f3,bb3]@2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [f3,c4]@2 [f3,c4]@2 [f3,c4]@3 [ab2,eb3]@2]/5", // Bb5 Eb5 F5 C5 F5 Eb5 Bb5 Eb5 …
  AF: "~ [ab2,eb3]@2 [ab2,eb3]@2 [ab2,eb3]@2 [eb3,bb3] [eb3,bb3]@2 [eb3,bb3]@3 [bb2,f3]@3", // Ab5 Eb5 Bb5
  AG: "[bb2,f3]@2 [bb2,f3]@2 [bb2,f3]@2 [db3,ab3]@2 [db3,ab3]@2 [db3,ab3]@3 [ab2,eb3]@3", // Bb5 Db5 Ab5
  AH: "[ab2,eb3]@2 [ab2,eb3]@2 [ab2,eb3]@2 [eb3,bb3]@2 [eb3,bb3]@2 [eb3,bb3]@3 [bb2,f3]@3", // Ab5 Eb5 Bb5
  AI: "[bb2,f3]@2 [bb2,f3]@2 [bb2,f3]@2 [f3,c4]@2 [f3,c4]@2 [f3,c4]@3 [ab2,eb3]@3", // Bb5 F5 Ab5
  AJ: "[[ab2,eb3] [ab2,eb3]@2 [ab2,eb3]@2 [eb3,bb3]@2 [eb3,bb3]@2 [eb3,bb3]@3 [bb2,f3]@3 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3]@2 [db3,ab3]@2 [db3,ab3]@2 [db3,ab3]@3 [ab2,eb3]@3 [ab2,eb3]@2 [ab2,eb3]@2 [ab2,eb3]@2 [eb3,bb3]@2 [eb3,bb3]@2 [eb3,bb3]@3 [bb2,f3]@3 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3]@2 [db3,ab3]@2 [db3,ab3]@2 [db3,ab3]@3 [ab2,eb3]@3 ~ [ab2,eb3]@2 [ab2,eb3]@2 [eb3,bb3]@2 [eb3,bb3]@2 [eb3,bb3]@3 [bb2,f3]@3 [bb2,f3]@2, ~@63 [ab2,eb3]@2 ~@15]/5", // Ab5 Eb5 Bb5 Db5 Ab5 Eb5 Bb5 Db5 …
  AK: "[bb2,f3]@2 [bb2,f3]@2 [db3,ab3]@2 [db3,ab3]@2 [db3,ab3]@3 [ab2,eb3]@3 [ab2,eb3]@2", // Bb5 Db5 Ab5
  AL: "[ab2,eb3]@2 [ab2,eb3]@2 [eb3,bb3]@2 [eb3,bb3]@2 [eb3,bb3]@3 [bb2,f3]@3 [bb2,f3]@2", // Ab5 Eb5 Bb5
  AM: "[bb2,f3]@2 ~ [f3,c4,f4]@4 ~@9, ~ [bb2,f3] ~@6", // Bb5 F5 Bb5
})).s("gm_distortion_guitar").gain(0.49).pan(0.1)

// drums · kick
const kick = s("bd").struct(`<
  A@14 ~@2 B@12 A@18 ~@2 B@12 C D E F G H I ~@2 J K L M N O P Q R S T U V W X Y F Z L AA M AB AC AD J@2 AE AF AG AH@4 AI
  ~ AJ AK@4 AL@4 AM@3 AN
>`.pickRestart({
  A: "x ~@2 x", B: "x ~@3 x ~@2 x ~@4 x ~@3", C: "x ~ x ~@4 x ~ x ~@2 x ~@3", D: "~@3 x ~ x ~@4 x ~@2 x ~ x",
  E: "~@6 x ~ x ~@4 x ~@2", F: "x ~ x ~@6 x ~ x ~@4", G: "x ~@2 x ~ x ~@6 x ~ x ~", H: "~@3 x ~@2 x ~ x ~@6 x",
  I: "~ x ~@4 x ~@2 x ~ x ~@4", J: "~@4 x!2 ~@2", K: "~@2 x ~ x ~@6 x ~@2 x ~", L: "~@5 x ~ x ~@6 x ~",
  M: "~ x ~@6 x ~ x ~@5", N: "~ x ~@2 x ~@6 x ~ x ~@2", O: "~@4 x ~@2 x ~@6 x ~", P: "x ~@6 x ~@2 x ~@5",
  Q: "~ x ~ x ~@6 x ~@2 x ~@2", R: "~@4 x ~ x ~@6 x ~@2", S: "x ~@6 x ~ x ~@6", T: "x ~@2 x ~@6 x ~ x ~@3",
  U: "~@3 x ~@2 x ~@6 x ~ x", V: "~@6 x ~@2 x ~@6", W: "x!2 ~@3 x!2 ~", X: "~@3 x ~ x ~@7 x ~ x", Y: "~@3 x!2 ~@3",
  Z: "~@3 x ~ x ~@6 x ~ x ~", AA: "x ~@6 x ~ x ~@5 x", AB: "~ x ~ x ~@5 x ~ x ~@4", AC: "~ x ~ x ~@6 x ~ x ~@3",
  AD: "~ x!2 ~@2 x ~@2", AE: "~@7 x ~ x ~@6", AF: "~@9 x ~@6", AG: "~@5 x ~@3 x ~@6", AH: "~ x!2 ~", AI: "~@3 x ~@12",
  AJ: "~@7 x ~@3 x ~@2 x ~", AK: "~@2 x ~@3 x ~@3 x ~@2 x ~@2", AL: "~ x ~@3 x ~@3 x ~@2 x ~@3",
  AM: "x ~@3 x ~@3 x ~@2 x ~@4", AN: "x ~@2 x ~@12",
})).gain(0.44)

// drums · snare
const snare = s("sd").struct(`<
  A@14 B C A@30 B C A@12 D E F G H I J K L M H N O P N Q R S T U E V D E F G H N V W X Y P ~@3 Z AA AB A@3 AC AD AE AF
  AG@3 AH AA@2 A@4 AI
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x!8", C: "x ~ x ~ x ~ x ~ x!8", D: "~@5 x ~@8 x ~", E: "~ x", F: "~ x ~@9 x ~@4",
  G: "~@2 x ~@4 x", H: "~@7 x ~@8", I: "~ x ~@8 x ~@5", J: "~@4 x ~@8 x ~@2", K: "~@2 x ~@2 x ~ x ~ x ~@2 x ~ x ~",
  L: "x ~@2 x ~ x ~@2 x ~ x ~ x ~@2 x", M: "x!3 ~@10 x ~@2", N: "x ~@8 x ~@6", O: "~@3 x ~@9 x ~@2", P: "~@3 x ~@4",
  Q: "~@3 x ~@8 x ~@3", R: "~@6 x ~@8 x", S: "~@9 x ~@6", T: "~ x ~@4 x ~", U: "~@5 x ~@9 x", V: "~@2 x ~@8 x ~@4",
  W: "~ x ~ x", X: "~@5 x ~@7 x ~@2", Y: "~@3 x ~@3 x", Z: "~@5 x!4 ~@2 x ~@3 x", AA: "~@3 x ~@3 x ~@3 x ~@3 x",
  AB: "~@3 x ~@2 x ~@3 x ~@3 x ~", AC: "~@2 x ~@2 x ~ x ~ x ~ x ~ x ~ x", AD: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  AE: "x!7 ~@2 x ~@3 x ~@2", AF: "~ x ~@3 x ~@2 x ~@3 x ~@3", AG: "x!4", AH: "x ~@2 x ~@3 x ~@3 x ~@3 x", AI: "~ x ~@6",
})).gain(0.38)

// drums · low tom
const low_tom = s("lt").struct("<~@92 [~@14 x!2] [x!9 ~ x ~@3 x!2]!2 [x!8 ~ x ~@3 x!3] [x!5 ~@11] ~@20>").gain(0.38)

// drums · mid tom
const mid_tom = s("mt").struct("<~@69 [~@3 x ~ x!3 ~@8] ~@47>").gain(0.38)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@14 B C ~@12 D A@17 B C ~@12 E F G H I J K ~@2 L M E F N O I J K I P F M E F N O I E Q D R S T ~@3 U R A@3 V W X ~@13
>`.pickRestart({
  A: "x!4", B: "x!8", C: "x!4 ~@4", D: "~ x!3", E: "x ~@4 x ~@3 x ~@4 x ~", F: "~@3 x ~@4 x ~@4 x ~@2",
  G: "~ x ~@4 x ~@4 x ~@4", H: "x ~@3 x ~@4 x ~@4 x ~", I: "~@2 x ~@4 x ~@4 x ~@3", J: "~ x ~@4 x ~@3 x ~@4 x",
  K: "~@4 x ~@4 x ~@3 x ~@2", L: "~@8 x ~@4 x ~@2", M: "~@2 x ~@3 x ~@4 x ~@4", N: "~ x ~@4 x ~@4 x ~@3 x",
  O: "~@4 x ~@4 x ~@4 x ~", P: "x ~@4 x ~@4 x ~@4 x", Q: "~@2 x ~@4 x ~@3 x ~@3 x", R: "~ x ~@3 x ~@3 x ~@3 x ~@2",
  S: "~ x ~@4 x ~@3 x ~@3 x ~", T: "~ x ~ x ~@4", U: "~@9 x ~@3 x ~@2", V: "x ~@3 x ~@3 x ~@3 x ~@2 x",
  W: "~@3 x ~@3 x ~ x ~ x ~ x ~ x", X: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2",
})).gain(0.38)

// drums · crash
const crash = s("cr").struct("<~@16 A ~@3 A ~@7 B ~@19 A ~@3 A ~@39 C D@2 E ~@8 F ~@3 G ~@7 H>".pickRestart({
  A: "~@7 x ~@8", B: "x", C: "~@5 x ~@2", D: "~@4 x!2 ~@2", E: "~@7 x ~ x ~@6", F: "~@7 x", G: "~@13 x ~@2",
  H: "~@3 x ~@12",
})).gain(0.44)

// drums · ride
const ride = s("rd").struct("<~@16 A@12 ~@20 A@12 ~@44 B C A@3 D E@3 A@3 F>".pickRestart({
  A: "x!8", B: "~@7 x ~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~ x!2 ~ x ~ x ~ x ~", D: "x!2 ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  E: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", F: "x!2 ~@6",
})).gain(0.38)

stack(lead_1_square, bass, distortion_guitar, kick, snare, low_tom, mid_tom, open_hat, crash, ride)

More by The Offspring