Strudelify

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: 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@4 AK AL AK 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@2 ab1@3 ab1@2]/4",
  AK: "ab1@2 ab1@2 eb2@2 eb2@2 eb2@3 bb1@3 bb1@2", AL: "bb1@2 bb1@2 db2@2 db2@2 db2@3 ab1@3 ab1@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@4 AK AL AK 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]@2 [ab2,eb3]@3 [ab2,eb3]@2]/4", // Ab5 Eb5 Bb5 Db5 Ab5 Eb5 Bb5 Db5 …
  AK: "[ab2,eb3]@2 [ab2,eb3]@2 [eb3,bb3]@2 [eb3,bb3]@2 [eb3,bb3]@3 [bb2,f3]@3 [bb2,f3]@2", // Ab5 Eb5 Bb5
  AL: "[bb2,f3]@2 [bb2,f3]@2 [db3,ab3]@2 [db3,ab3]@2 [db3,ab3]@3 [ab2,eb3]@3 [ab2,eb3]@2", // Bb5 Db5 Ab5
  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 AE@2 AF AG AH@2 AI@3
  AJ ~ AK AL AM@3 AN@3 AO AP@3 AQ
>`.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: "~@8 x ~@2 x ~@4", 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: "~@4 x!2 ~@2", AF: "~@7 x ~ x ~@6", AG: "~@9 x ~@6", AH: "~@5 x ~@3 x ~@6", AI: "~ x!2 ~",
  AJ: "~@3 x ~@12", AK: "~@7 x ~@3 x ~@2 x ~", AL: "~@3 x ~@3 x ~@2 x ~@2 x ~@2", AM: "~@2 x ~@3 x ~@3 x ~@2 x ~@2",
  AN: "~ x ~@3 x ~@3 x ~@2 x ~@3", AO: "~ x ~@3 x ~@3 x ~ x ~@4", AP: "x ~@3 x ~@3 x ~@2 x ~@4", AQ: "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 Q R S T U V E W D E F G H Q W X Y Z P ~@3 AA AB AC A@3 AD AE AF AG
  AH@3 AI AB@2 AJ A@3 AK
>`.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 ~@4 x ~@2", O: "~@3 x ~@9 x ~@2", P: "~@3 x ~@4",
  Q: "x ~@8 x ~@6", R: "~@3 x ~@8 x ~@3", S: "~@6 x ~@8 x", T: "~@9 x ~@6", U: "~ x ~@4 x ~", V: "~@5 x ~@9 x",
  W: "~@2 x ~@8 x ~@4", X: "~ x ~ x", Y: "~@5 x ~@7 x ~@2", Z: "~@3 x ~@3 x", AA: "~@5 x!4 ~@2 x ~@3 x",
  AB: "~@3 x ~@3 x ~@3 x ~@3 x", AC: "~@3 x ~@2 x ~@3 x ~@3 x ~", AD: "~@2 x ~@2 x ~ x ~ x ~ x ~ x ~ x",
  AE: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", AF: "x!7 ~@2 x ~@3 x ~@2", AG: "~ x ~@3 x ~@2 x ~@3 x ~@3", AH: "x!4",
  AI: "x ~@2 x ~@3 x ~@3 x ~@3 x", AJ: "~@3 x ~@3 x ~@2 x ~@3 x ~", AK: "~ 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 N O P Q J K Q R F M E N O P Q E S D T U V ~@3 W T X A@2 Y Z AA
  ~@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: "~@3 x ~@3 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: "~@3 x ~@4 x ~@3 x ~@3",
  O: "~ x ~@4 x ~@4 x ~@3 x", P: "~@4 x ~@4 x ~@4 x ~", Q: "~@2 x ~@4 x ~@4 x ~@3", R: "x ~@4 x ~@4 x ~@4 x",
  S: "~@2 x ~@4 x ~@3 x ~@3 x", T: "~ x ~@3 x ~@3 x ~@3 x ~@2", U: "~ x ~@4 x ~@3 x ~@3 x ~", V: "~ x ~ x ~@4",
  W: "~@9 x ~@3 x ~@2", X: "~ x ~@3 x ~@2 x ~@3 x ~@3", Y: "x ~@3 x ~@3 x ~@3 x ~@2 x",
  Z: "~@3 x ~@3 x ~ x ~ x ~ x ~ x", AA: "~ 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@2 F A@3 G>".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 ~ x ~ x ~ x ~ x!2 ~ x ~@2 x", G: "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