Strudelify

Champs Elysees

NOFX

KeyE majorTempo112 bpm
0:00/0:00
// Champs Elysees — NOFX
// 112 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 1 piano (copy of ch 6 acoustic guitar steel)
// note: Full arrangement: all 74 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/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.

// bass · tuba
const bass = note(`<
  ~@12 A B C D E F G H ~@8 A B C D E I G J K L M N M L D O ~@8 A B C D E I G H P Q R S T U V W P X Y ~@3
>`.pickRestart({
  A: "e2@2 ~@10 d#2@3 ~@9", B: "c#2@4 ~@8 b1@3 ~@9", C: "a1 ~@3 g#1 ~@3", D: "f#1 ~@3 b1 ~@3", E: "e2 ~@3 d#2 ~@3",
  F: "c#2 ~@3 b1 ~@3", G: "a1 ~@3 e1 ~@3", H: "a1 ~ b1 ~@5", I: "c#2@3 ~@9 b1@2 ~@10", J: "a1@3 ~@3 b1@2 ~@16",
  K: "f#1@2 ~@10 b1@3 ~@9", L: "e1 ~@3 c#2 ~@3", M: "f#1@3 ~@9 b1@2 ~@10", N: "e1 ~@11", O: "e2 ~ b1 ~ e1 ~@3",
  P: "e2@2 ~@4 e2@3 ~@3 d#2@3 ~@3 d#2@3 ~@3", Q: "c#2 ~ c#2 ~ b1 ~ b1 ~", R: "a1@2 ~@4 a1@3 ~@3 g#1@3 ~@3 g#1@3 ~@3",
  S: "f#1 ~ f#1 ~ b1 ~ b1 ~", T: "e2 ~ e2 ~ d#2 ~ d#2 ~", U: "c#2@2 ~@4 c#2@3 ~@3 b1@2 ~@4 b1@3 ~@3",
  V: "a1 ~ a1 ~ g#1 ~ g#1 ~", W: "a1@3 ~@3 b1@3 ~@3 e1@2 ~@10", X: "c#2@2 ~@4 c#2@3 ~@3 b1@3 ~@3 b1@3 ~@3",
  Y: "a1@2 ~@4 a1@3 ~@3 g#1@3 ~@9",
})).s("gm_tuba").gain(0.39).pan(0.6)

// bass · tuba · soft notes
const bass_soft = note("<~@70 [~@6 g#1 ~] [f#1 ~ f#1 ~ b1 ~ b1 ~] [e2 ~ e2 ~ d#2 ~ d#2 ~] ~>")
  .s("gm_tuba").gain(0.2).pan(0.6)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@4 A B C D E F G H I B C J K L M N O B C P E Q R H I B C S K L T N U V W X Y Z AA AB AC@4 AD@4 AE@4 AF@4 AE@4 AG@4
  AH@3 ~@3
>`.pickRestart({
  A: "[g#3,b3,e4]@4 ~@2 [g#3,b3,e4]@4 e3@2 [f#3,b3,d#4]@4 b2 ~ [f#3,b3,d#4]@4 d#3 ~, e2@5 ~ d#2@5 ~, ~@6 e3 ~@11 d#3 ~@5", // E B
  B: "[g#3,c#4,e4]@4 ~@2 [g#3,c#4,e4]@4 c#3 ~ [g#3,b3,d4]@4 g#2 ~ [g#3,b3,d4]@4 b2 ~, c#2@5 ~ b1@5 ~, ~@6 c#3 ~@11 b2 ~@5", // C#m G#dim
  C: "[a3,c#4,e4]@4 ~@2 [a3,c#4,e4]@4 a2@2 [g#3,b3,e4]@4 e2 ~ [g#3,b3,e4]@3 ~ g#2 ~, a1@5 ~ g#1@5 ~, ~@6 a2 ~@11 g#2 ~@5", // A E
  D: "[a#3,c#4,f#4]@3 ~@3 [f#2,a#3,c#4,f#4]@3 ~ f#2 ~ [b3,d#4,f#4]@3 ~@3 [b3,d#4,f#4]@3 ~ b2 ~, f#1@5 ~ b1@5 ~, ~@18 b2 ~@5", // F# B
  E: "[g#3,b3,e4]@3 ~@3 [g#3,b3,e4]@4 e3@2 [f#3,b3,d#4]@4 b2@2 [f#3,b3,d#4]@4 d#3@2, e2@10 ~@2 d#2@11 ~, ~@6 e3 ~@11 d#3@2 ~@4", // E B
  F: "[g#3,c#4,e4]@3 ~@3 [g#3,c#4,e4]@4 c#3@2 [g#3,b3,d4]@4 g#2@2 [g#3,b3,d4]@4 b2@2, c#2@5 ~ b1@5 ~, ~@3 c#3 ~@5 b2 ~@2", // C#m G#dim
  G: "[a3,c#4,e4]@4 ~@2 [a3,c#4,e4]@3 ~ a2@2 [g#3,b3,e4]@4 e2@2 [g#3,b3,e4]@4 g#2 ~, a1@5 ~ g#1@5 ~, ~@6 a2 ~@11 g#2@2 ~@4", // A E
  H: "[a1,a2,a3,c#4,e4]@4 ~@2 [b1,b2,b3,d#4,f#4]@3 ~@3 [g#3,b3,e4]@3 ~@9, ~@12 e2@5 ~@7", // A B E
  I: "[g#3,b3,e4]@4 ~@2 [g#3,b3,e4]@4 e3@2 [g#3,c4,d#4]@4 c3 ~ [g#3,c4,d#4]@4 d#3 ~, e2@5 ~ d#2@5 ~, ~@6 e3 ~@11 d#3 ~@5", // E G#
  J: "[a#3,c#4,f#4]@4 ~@2 [a#3,c#4,f#4]@3 ~ f#2 ~ [b3,d#4,f#4]@4 ~@2 [b3,d#4,f#4]@3 ~ b2 ~, f#1@5 ~ b1@5 ~, ~@6 f#2 ~@11 b2 ~@5", // F# B
  K: "[g#3,b3,e4]@2 ~ [g#3,b3,e4]@2 e3 [g#3,c4,d#4]@2 c3 [g#3,c4,d#4]@2 d#3, e2@10 ~@2 d#2@11 ~, ~@6 e3 ~@11 d#3@2 ~@4", // E G#
  L: "[g#3,c#4,e4]@2 ~ [g#3,c#4,e4]@2 c#3 [g#3,b3,d4]@2 g#2 [g#3,b3,d4]@2 b2, c#2@11 ~ b1@10 ~@2, ~@6 c#3 ~@11 b2@2 ~@4", // C#m G#dim
  M: "[a3,c#4,e4]@4 ~@2 [a3,c#4,e4]@4 a2@2 [g#3,b3,e4]@4 e2 ~ [g#3,b3,e4]@4 g#2 ~, a1@5 ~ g#1@5 ~, ~@6 a2 ~@11 g#2@2 ~@4", // A E
  N: "[a1,a2,a3,c#4,e4]@4 ~@2 [b1,b2,b3,d#4,f#4]@3 ~@3 [e2,g#3,b3,e4]@6 ~@6", // A B E
  O: "[g#3,b3,e4]@4 ~@2 [g#3,b3,e4]@4 e3 ~ [f#3,b3,d#4]@4 b2 ~ [f#3,b3,d#4]@4 d#3 ~, e2@5 ~ d#2@5 ~, ~@6 e3 ~@11 d#3 ~@5", // E B
  P: "[a#3,c#4,f#4]@3 ~@3 [f#2,a#3,c#4,f#4]@3 ~ f#2 ~ [b3,d#4,f#4]@4 ~@2 [b3,d#4,f#4]@3 ~ b2 ~, f#1@5 ~ b1@5 ~, ~@18 b2 ~@5", // F# B
  Q: "[g#3,c#4,e4]@4 ~@2 [g#3,c#4,e4]@4 c#3@2 [g#3,b3,d4]@4 g#2 ~ [g#3,b3,d4]@4 b2@2, c#2@5 ~ b1@5 ~, ~@6 c#3 ~@11 b2@2 ~@4", // C#m G#dim
  R: "[a3,c#4,e4]@4 ~@2 [a3,c#4,e4]@3 ~ a2@2 [g#3,b3,e4]@4 e2 ~ [g#3,b3,e4]@4 g#2 ~, a1@5 ~ g#1@5 ~, ~@6 a2 ~@11 g#2@2 ~@4", // A E
  S: "[a#3,c#4,f#4]@4 ~@2 [f#2,a#3,c#4,f#4]@3 ~ f#2 ~ [b3,d#4,f#4]@4 ~@2 [b3,d#4,f#4]@3 ~ b2 ~, f#1@5 ~ b1@5 ~, ~@18 b2 ~@5", // F# B
  T: "[a3,c#4,e4]@4 ~@2 [a3,c#4,e4]@4 a2@2 [g#3,b3,e4]@4 e2@2 [g#3,b3,e4]@4 g#2 ~, a1@5 ~ g#1@5 ~, ~@6 a2 ~@11 g#2@2 ~@4", // A E
  U: "f#3@5 ~ [f#3,a3,c#4,f#4]@2 ~@2 f#3 ~ b2@4 ~@2 [f#3,b3,d#4]@3 ~ b2 ~, f#2@5 ~ b1@4 ~@2, ~@18 b2 ~@5", // F#m B
  V: "e3@5 ~ [g#3,b3,e4]@3 ~ e3 ~ c#3@4 ~@2 [g#3,c#4,e4]@3 ~ c#3 ~, e2@9 ~@3 c#2@10 ~@2, ~@6 e3 ~@11 c#3 ~@5", // E C#m
  W: "f#3@4 ~@2 [a3,c#4,f#4]@3 ~ f#3 ~ b2@3 ~@3 [f#3,b3,d#4]@3 ~ b2 ~, f#2@10 ~@2 b1@9 ~@3, ~@6 f#3 ~@11 b2 ~@5", // F#m B
  X: "[e2,e3,g#3,b3,e4] ~@11", // E
  Y: "f#3@4 ~@2 [a3,c#4,f#4]@4 f#3 ~ b2@4 ~@2 [f#3,b3,d#4]@4 b2 ~, f#2@10 ~@2 b1@9 ~@3, ~@6 f#3 ~@11 b2 ~@5", // F#m B
  Z: "e3@4 ~@2 e3 ~@3 e3 ~ c#3@4 ~@2 c#3 ~@3 c#3 ~, e2@5 ~ c#2@5 ~, ~ [g#3,b3,e4] ~ [g#3,c#4,e4]", // E C#m
  AA: "f#3@4 ~@2 [a3,c#4,f#4]@4 f#3 ~ b2@4 ~@2 [f#3,b3,d#4]@3 ~ b2 ~, f#2@5 ~ b1@5 ~, ~@6 f#3 ~@11 b2 ~@5", // F#m B
  AB: "[b3,e4]@2 ~@4 [b1,b2,g#3,b3]@3 ~@3 [e1,e3,g#3]@3 ~@9, e2!2", // E5 E
  AC: "[[g#3,b3,e4]@4 ~@2 [g#3,b3,e4]@4 e3@2 [f#3,b3,d#4]@4 b2 ~ [f#3,b3,d#4]@4 d#3 ~ [g#3,c#4,e4]@4 ~@2 [g#3,c#4,e4]@4 c#3 ~ [g#3,b3,d4]@4 g#2 ~ [g#3,b3,d4]@4 b2 ~ [a3,c#4,e4]@4 ~@2 [a3,c#4,e4]@4 a2@2 [g#3,b3,e4]@4 ~@2 [g#3,b3,e4]@3 ~ g#2 ~ [a#3,c#4,f#4]@3 ~@3 [f#2,a#3,c#4,f#4]@3 ~ f#2 ~ [b3,d#4,f#4]@3 ~@3 [b3,d#4,f#4]@3 ~ b2 ~, e2@2 e2, ~@6 e3 ~@5 d#2@10 ~@2 c#2@10 ~@2 b1@10 ~@2 a1@10 ~@2 g#1@10 ~@2 f#1@10 ~@2 b1@10 ~@2, ~@18 d#3@2 ~@10 c#3 ~@11 b2 ~@11 a2 ~@11 g#2 ~@23 b2 ~@5]/4", // E B C#m G#dim A E F# B
  AD: "[[g#3,b3,e4]@3 ~@3 [g#3,b3,e4]@4 e3@2 [f#3,b3,d#4]@4 b2@2 [f#3,b3,d#4]@4 d#3@2 [g#3,c#4,e4]@4 ~@2 [g#3,c#4,e4]@4 c#3@2 [g#3,b3,d4]@4 g#2 ~ [g#3,b3,d4]@4 b2@2 [a3,c#4,e4]@4 ~@2 [a3,c#4,e4]@3 ~ a2@2 [g#3,b3,e4]@4 ~@2 [g#3,b3,e4]@4 g#2 ~ [a1,a2,a3,c#4,e4]@4 ~@2 [b1,b2,b3,d#4,f#4]@3 ~@3 [g#3,b3,e4]@3 ~@9, e2@16 e2@5 e2@3, ~@6 e3 ~@5 d#2@11 ~ c#2@11 ~ b1@10 ~@2 a1@10 ~@2 g#1@10 ~@26, ~@18 d#3@2 ~@10 c#3 ~@11 b2@2 ~@10 a2 ~@11 g#2@2 ~@28]/4", // E B C#m G#dim A E A B …
  AE: "[[g#3,b3,e4]@4 ~@2 [g#3,b3,e4]@4 e3@2 [g#3,c4,d#4]@4 c3 ~ [g#3,c4,d#4]@4 d#3 ~ [g#3,c#4,e4]@4 ~@2 [g#3,c#4,e4]@4 c#3 ~ [g#3,b3,d4]@4 g#2 ~ [g#3,b3,d4]@4 b2 ~ [a3,c#4,e4]@4 ~@2 [a3,c#4,e4]@4 a2@2 [g#3,b3,e4]@4 ~@2 [g#3,b3,e4]@3 ~ g#2 ~ [a#3,c#4,f#4]@4 ~@2 [f#2,a#3,c#4,f#4]@3 ~ f#2 ~ [b3,d#4,f#4]@4 ~@2 [b3,d#4,f#4]@3 ~ b2 ~, e2@2 e2, ~@6 e3 ~@5 d#2@10 ~@2 c#2@10 ~@2 b1@10 ~@2 a1@10 ~@2 g#1@10 ~@2 f#1@10 ~@2 b1@10 ~@2, ~@18 d#3 ~@11 c#3 ~@11 b2 ~@11 a2 ~@11 g#2 ~@23 b2 ~@5]/4", // E G# C#m G#dim A E F# B
  AF: "[[g#3,b3,e4]@4 ~@2 [g#3,b3,e4]@4 e3@2 [g#3,c4,d#4]@4 c3@2 [g#3,c4,d#4]@4 d#3@2 [g#3,c#4,e4]@4 ~@2 [g#3,c#4,e4]@4 c#3@2 [g#3,b3,d4]@4 g#2@2 [g#3,b3,d4]@4 b2@2 [a3,c#4,e4]@4 ~@2 [a3,c#4,e4]@4 a2@2 [g#3,b3,e4]@4 ~@2 [g#3,b3,e4]@4 g#2 ~ [a1,a2,a3,c#4,e4]@4 ~@2 [b1,b2,b3,d#4,f#4]@3 ~@3 [g#3,b3,e4]@6 ~@6, e2@16 e2@5 e2@3, ~@6 e3 ~@5 d#2@10 ~@2 c#2@11 ~ b1@10 ~@2 a1@10 ~@2 g#1@10 ~@26, ~@18 d#3@2 ~@10 c#3 ~@11 b2@2 ~@10 a2 ~@11 g#2@2 ~@28]/4", // E G# C#m G#dim A E A B …
  AG: "[[g#3,b3,e4]@4 ~@2 [g#3,b3,e4]@4 e3@2 [g#3,c4,d#4]@4 c3@2 [g#3,c4,d#4]@4 d#3@2 [g#3,c#4,e4]@4 ~@2 [g#3,c#4,e4]@4 c#3@2 [g#3,b3,d4]@4 g#2 ~ [g#3,b3,d4]@4 b2@2 [a3,c#4,e4]@4 ~@2 [a3,c#4,e4]@4 a2@2 [g#3,b3,e4]@4 ~@2 [g#3,b3,e4]@4 g#2 ~ [a1,a2,a3,c#4,e4]@4 ~@2 [b1,b2,b3,d#4,f#4]@4 ~@2 [g#3,b3,e4]@6 ~@6, e2@16 e2@5 e2@3, ~@6 e3 ~@5 d#2@11 ~ c#2@11 ~ b1@10 ~@2 a1@10 ~@2 g#1@10 ~@26, ~@18 d#3@2 ~@10 c#3 ~@11 b2@2 ~@10 a2@2 ~@10 g#2@2 ~@28]/4", // E G# C#m G#dim A E A B …
  AH: "[[g#3,b3,e4]@4 ~@2 [g#3,b3,e4]@4 e3@2 [g#3,c4,d#4]@4 c3 ~ [g#3,c4,d#4]@4 d#3 ~ [g#3,c#4,e4]@4 ~@2 [g#3,c#4,e4]@4 ~@2 [g#3,b3,d4]@4 g#2 ~ [b3,d4]@4 ~@2 c#4@4 ~@2 c#4@4 ~@14, e2@8 ~, ~@6 e3 ~@5 d#2@10 ~@2 c#2@10 ~@2 b1@10 ~@2 a1@10 ~@14, ~@18 d#3@2 ~@10 c#3 ~@11 b2 ~@29]/3", // E G# C#m G#dim Bm
})).s("gm_acoustic_guitar_steel").gain(0.24).pan(0.4)

// chords · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note("<~@11 A ~@7 B ~@7 A ~@7 B ~@15 A ~@7 A ~@7 A ~ C D@2 E@2>".pickRestart({
  A: "~@12 e3@5 ~@7", B: "~@2 e3 ~", C: "~@10 c#3 ~@7 g#3@4 b2 ~",
  D: "[[a3,e4]@3 ~@3 [a3,e4]@4 a2@2 [g#3,b3,e4]@4 ~@2 [g#3,b3,e4]@3 ~ g#2 ~ [a#3,c#4,f#4]@4 ~@2 [f#2,a#3,c#4,f#4]@3 ~ f#2 ~ [b3,d#4,f#4]@4 ~@2 [b3,d#4,f#4]@3 ~ b2 ~, ~@6 a2 ~@5 g#1@10 ~@2 f#1@10 ~@2 b1@10 ~@2, ~ e2@2, ~@18 g#2 ~@23 b2 ~@5]/2", // A5 E F# B
  E: "[[g#3,b3,e4]@2 ~ [g#3,b3,e4]@2 e3 [g#3,c4,d#4]@2 c3 [g#3,c4,d#4]@2 d#3 ~@12, e2@13 ~@11, ~@6 e3 ~@5 d#2@11 ~@25, ~@9 d#3 ~@14]/2", // E G#
})).s("gm_acoustic_guitar_steel").gain(0.1).pan(0.4)

// other · clarinet
const clarinet = note("<~@13 A ~ B ~@13 C ~ B ~@4 D E F ~ G H I ~@10 A ~ B ~@5 J ~ K ~@5 L ~@4>".pickRestart({
  A: "~@4 g#4@2 f#4@4 e4@2 f#4@3 ~ e4@8", B: "~@4 f#5@2 f#5@3 ~ g#5 ~ d#5@4 b4@7 ~",
  C: "~@3 g4 g#4@2 f#4@4 e4@2 f#4@3 ~ e4@8", D: "a4@2 ~@2 a4 ~ a4@2 ~@2 a4 ~ g#4@4 f#4@8",
  E: "g#4@3 ~ b4 g4 g#4@4 e4@9 ~@5", F: "a4@3 ~ a4 ~ a4@3 ~ a4 ~ g#4@3 ~ e4 f4 f#4@3 ~ e4@2, g#4 ~@23",
  G: "a5@2 ~@2 a5 ~ a5@2 ~@2 a5 ~ g#5@4 f#5@8, g#5 ~@23", H: "g#5@3 a#5 b5@2 g#5@3 ~ e5@9 ~@5",
  I: "a5@3 ~ a5 ~ a5@3 ~ a5@2 g#5@3 ~ e5@2 f#5@3 ~ e5@2", J: "~@4 g#4@2 f#4@4 e4 ~ f#4@3 ~ e4@8",
  K: "~@3 f5 f#5@2 f#5@4 g#5 ~ d#5@4 b4@7 ~", L: "~@3 g4 g#4 ~ f#4@4 ~@2 f#4@3 ~@9",
})).s("gm_clarinet").gain(0.22).pan(0.6)

// other · clarinet · soft notes
const clarinet_soft = note("<~@39 A ~ B C ~@26 D ~ E ~@2>".pickRestart({
  A: "~@23 g5", B: "~@3 a5 ~@19 g5", C: "g#5 ~@23", D: "~@10 e4 ~@5 e4@8", E: "~@4 f#5@2 f#5@4 g#5 ~ d#5@4 b4@7 ~",
})).s("gm_clarinet").gain(0.13).pan(0.6)

// bass · fretless bass
const bass_2 = note(`<
  ~@4 A B C D E F G H A F C I A F J K A B C D E F G H A L C I M F J K N O N P N Q I R A B C D E F G H A F C I M F G K A
  L C I A F J K A F C I M ~
>`.pickRestart({
  A: "e2@8 ~@2 e2 ~ d#2@9 ~ d#2 ~", B: "c#2@9 ~ c#2 ~ b1@8 ~@2 b1 ~", C: "a1@8 ~@2 a1 ~ g#1@9 ~ g#1 ~",
  D: "f#1@9 ~ f#1 ~ b1@10 ~@2", E: "e2@9 ~ e2 ~ d#2@8 ~@2 d#2 ~", F: "c#2@8 ~@2 c#2 ~ b1@8 ~@2 b1 ~",
  G: "a1@8 ~@2 a1 ~ g#1@10 ~@2", H: "a1@2 ~ b1@2 ~ e1@2 ~@4", I: "f#1@8 ~@2 f#1 ~ b1@9 ~@3",
  J: "a1@8 ~@2 a1 ~ g#1@9 ~@3", K: "a1@3 ~@3 b1@3 ~@3 e1@4 ~@8", L: "c#2@8 ~@2 c#2 ~ b1@9 ~ b1 ~",
  M: "e2@8 ~@2 e2 ~ d#2@8 ~@2 d#2 ~", N: "f#1@8 ~@2 f#1 ~ b1@10 ~@2", O: "e2@3 ~@3 d#2@4 ~@2 c#2@10 ~@2", P: "e1 ~@11",
  Q: "e2@4 ~@2 d#2@4 ~@2 c#2@9 ~@3", R: "e2@2 ~@4 b1@3 ~@3 e1@3 ~@9",
})).s("gm_fretless_bass").gain(0.32).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A B@3 C B@3 D B@3 C B@3 D B@3 C B@3 D B@3 C B@3 D E@3 F E@2 B G B@3 C B@3 D B@3 C B@3 D B@3 C B@3 G B@3 C B ~
>`.pickRestart({
  A: "~@3 x", B: "x ~@4 x!2 ~@5", C: "x ~@4 x!2 ~ x ~@3", D: "x ~ x!2", E: "x ~@4 x!2 ~@4 x", F: "x!2 ~@2", G: "x!3 ~",
})).gain(0.17)

// drums · rim
const rim = s("rim").struct("<~@3 A B@7 C B@7 C B@7 C B@7 C B@3 D B@3 C B@7 C B@7 C B@7 ~ B@2 C ~@3>".pickRestart({
  A: "~@2 x", B: "~ x ~ x", C: "~ x ~@2", D: "x",
})).gain(0.22)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@7 A ~@7 A ~@7 A ~@7 A ~@15 A ~@7 A ~@7 A ~@6 B C D ~>".pickRestart({
  A: "~@2 x", B: "~@3 x", C: "~@3 x ~@4 x!2 ~@2", D: "~ x ~ x",
})).gain(0.12)

// drums · hihat
const hihat = s("hh").struct("<A@11 B A@7 B A@7 B A@7 B A@3 C A@3 D A@7 B A@7 B A@7 D A@2 E ~@3>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "x!2", D: "~ x", E: "x!2 ~@2",
})).gain(0.12)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@4 A@7 B A@7 B A@7 B A@7 B A@3 ~ A@2 C ~ A@7 B A@7 B A@6 C ~ A@2 D E@2 ~
>`.pickRestart({
  A: "~@2 x ~@2 x ~@2 x ~@2 x", B: "~@2 x ~@2 x ~@6", C: "~@2 x ~@2 x ~@2 x ~@3", D: "~@2 x ~@2 x!2 ~ x!2 ~ x",
  E: "x ~ x!2 ~ x!2 ~ x!2 ~ x",
})).gain(0.07)

// drums · low tom
const low_tom = s("lt").struct("<~@43 [~ x ~@2] ~@23 [~ x ~@2] ~@6>").gain(0.17)

// drums · mid tom
const mid_tom = s("mt").struct("<~@39 x ~@3 x ~@23 x ~@6>").gain(0.17)

// drums · crash
const crash = s("cr").struct("<~@11 A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@6>".pickRestart({
  A: "~@3 x",
})).gain(0.15)

// drums · ride
const ride = s("rd").struct("<~@4 A ~@7 A ~@7 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~@5>".pickRestart({
  A: "x",
})).gain(0.12)

stack(
  bass, bass_soft, acoustic_guitar_steel, acoustic_guitar_steel_2, clarinet, clarinet_soft, bass_2, kick, rim, rim_soft,
  hihat, hihat_soft, low_tom, mid_tom, crash, ride
)

More by NOFX