Strudelify
Sifting cover art

1989 · Bleach

Sifting

Nirvana

KeyE minorTempo120 bpm
0:00/0:00
// Sifting — Nirvana
// 120 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (1/4 at bar 1, 4/4 at bar 2, 2/4 at bar 57, 4/4 at bar 58, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 136 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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.

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@4 A@4 B C B D B C B D B C B C B C B C B C B C B C B C E@7 F@2 G@2 H I@4 J@5 K@4 L@8 M@8 N@4 O@8 P@2 Q@3 R@2 S T@3 U
  V@6 W@8 X@7 Y@7 Z@8 AA@3
>`.pickRestart({
  A: "[e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~@17", B: "[e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@20",
  C: "[e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@4 [b2,e3]@8 [a#2,d#3]@8", D: "[e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~@21",
  E: "[e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [d3,g3]@20", // E5 G5
  F: "[[e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [d3,g3]@9 [d3,g3]@4 [d3,g3]@4 ~ [d3,g3]@4 [c3,g3,c4]@17 ~ [c3,g3,c4]@8 [c3,g3,c4]@4]/2", // E5 G5 C5
  G: "[~ [a2,e3,a3]@4 a2 b2@8 b2@8 a2@4 ~ g2@4 e2@4 ~ g2@4 [c3,g3,c4]@17 [c3,g3,c4]@7, ~@14 a2 ~@49]/2", // A5 C5
  H: "~@2 [c3,g3,c4]@4 [a2,e3,a3]@4 ~ b2@9 b2@8 a2@4, ~@11 a2 ~@8 a2 ~@11", // C5 A5
  I: "[~ g2@4 e2@4 g2@4 ~ [c3,g3,c4]@17 [c3,g3,c4]@9 [c3,g3,c4]@4 [a2,e3,a3]@4 ~ b2@8 a2 b2@8 a2@4 g2@4 ~ e2@4 g2@4 ~ [c3,g3,c4]@17 [c3,g3,c4]@9 [c3,g3,c4]@4 [a2,e3,a3]@4 a2 b2@8 a2, ~@49 a2 ~@78]/4", // C5 A5 C5 A5
  J: "[b2@8 a2@4 g2@4 ~ e2@4 g2@4 [c3,g3,c4]@17 ~ [c3,g3,c4]@9 [c3,g3,c4]@4 [a2,e3,a3]@4 a2 b2@8 a2 b2@8 a2@4 g2@4 e2@4 ~ g2@4 [c3,g3,c4]@17 ~ [c3,g3,c4]@8 [c3,g3,c4]@4 ~ [a2,e3,a3]@4 a2 b2@8 b2@9 a2@4 g2@4 e2@4, ~@139 a2 ~@20]/5", // C5 A5 C5 A5
  K: "[~ g2@4 [c3,g3,c4]@17 [c3,g3,c4]@9 [c3,g3,c4]@4 ~ [a2,e3,a3]@4 a2 b2@8 b2@8 a2@4 ~ g2@4 e2@4 g2@4 ~ [b2,f#3,b3]@52 ~, ~@49 a2 ~@78]/4", // C5 A5 B5
  L: "[~@17 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~@2 [c3,f3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@4 [b2,e3]@8 [a#2,d#3]@8 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@4 [b2,e3]@8 [a#2,d#3]@8 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@4 [b2,e3]@8 [a#2,d#3]@8 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@2]/8", // E5 F5 E5 F5 E5 D#5 E5 F5 …
  M: "[~@2 [b2,e3]@8 [a#2,d#3]@8 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@4 [b2,e3]@8 [a#2,d#3]@8 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@4 [b2,e3]@8 [a#2,d#3]@8 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@4 [b2,e3]@8 [a#2,d#3]@8 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@2]/8", // E5 D#5 E5 F5 E5 F5 E5 D#5 …
  N: "[~@2 [b2,e3]@8 [a#2,d#3]@8 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@4 [b2,e3]@8 [a#2,d#3]@8 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [c3,f3]@2]/4", // E5 D#5 E5 F5 E5 F5 E5 D#5 …
  O: "[~@2 [b2,e3]@8 [a#2,d#3]@8 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [d3,g3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [d3,g3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [d3,g3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [d3,g3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [d3,g3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [d3,g3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [d3,g3]@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [d3,g3]@2]/8", // E5 D#5 E5 G5 E5 G5 E5 G5 …
  P: "[~@7 [d3,g3]@4 [d3,g3]@4 ~ [d3,g3]@4 [c3,g3,c4]@17 ~ [c3,g3,c4]@8 [c3,g3,c4]@4 ~ [a2,e3,a3]@4 a2 b2@8]/2", // G5 C5 A5
  Q: "[b2@9 a2@4 g2@4 e2@4 ~ g2@4 [c3,g3,c4]@17 [c3,g3,c4]@9 [c3,g3,c4]@4 ~ [a2,e3,a3]@4 a2 b2@8 b2@8 a2@4 ~ g2@4 e2@4 g2@4 ~, a2 ~@69 a2 ~@25]/3", // C5 A5
  R: "[[c3,g3,c4]@17 [c3,g3,c4]@9 [c3,g3,c4]@4 [a2,e3,a3]@4 ~ b2@8 a2 b2@8 a2@4 ~ g2@4 e2@3, ~@35 a2 ~@28]/2", // C5 A5
  S: "~ g2@4 ~ [c3,g3,c4]@17 [c3,g3,c4]@9", // C5
  T: "[[c3,g3,c4]@4 [a2,e3,a3]@4 ~ b2@8 a2 b2@8 a2@4 g2@4 ~ e2@4 g2@4 [c3,g3,c4]@17 ~ [c3,g3,c4]@9 [c3,g3,c4]@4 [a2,e3,a3]@4 a2 b2@8 a2 b2@8, ~@9 a2 ~@86]/3", // C5 A5 C5 A5
  U: "a2@4 g2@4 ~ e2@4 g2@4 [c3,g3,c4]@15", // C5
  V: "[~@3 [c3,g3,c4]@8 [c3,g3,c4]@4 ~ [a2,e3,a3]@4 a2 b2@8 a2 b2@8 a2@4 g2@4 e2@4 ~ g2@4 [c3,g3,c4]@17 ~ [c3,g3,c4]@8 [c3,g3,c4]@4 ~ [a2,e3,a3]@4 a2 b2@8 b2@8 a2@4 ~ g2@4 e2@4 ~ g2@4 [b2,f#3,b3]@52 ~@15, ~@99 a2 ~@92]/6", // C5 A5 C5 A5 B5
  W: "[~@3 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ g3@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ b2@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ f3 f#3@7 g3@4 f#3@4 d#3@4 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ a2 b2@7 d3@4 b2@4 a2@4 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ b2@20 [e2,b2]@4 [e2,b2]@4 e2@3 ~ e2@20 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ f3 f#3@7 g3@4 f#3@4 d#3@4 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ a2 b2@7 d3@4 b2@4 a2, ~@171 b2@12 ~@73]/8", // E5
  X: "~@3 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~@14", // E5
  Y: "[~@3 [e2,b2]@3 ~ [e2,b2]@3 ~ [e2,b2]@3 ~ [d3,g3]@8 [d3,g3]@4 [d3,g3]@4 [d3,g3]@4 [c3,g3,c4]@16 [c3,g3,c4]@8 [c3,g3,c4]@4 [a2,e3,a3]@4 b2@8 b2@8 a2@4 g2@4 e2@4 g2@4 [c3,g3,c4]@16 [c3,g3,c4]@8 [c3,g3,c4]@4 [a2,e3,a3]@4 b2@8 b2@8 a2@4 g2@4 e2@4 g2@4 [c3,g3,c4]@16 [c3,g3,c4]@8 [c3,g3,c4]@4 [a2,e3,a3]@4 b2@8 b2@8 a2@4 g2@4 e2@4 g2, ~@67 a2 ~@7 a2 ~@55 a2 ~@7 a2 ~@55 a2 ~@7 a2 ~@20]/7", // E5 G5 C5 A5 C5 A5 C5 A5
  Z: "[~@3 [c3,g3,c4]@16 [c3,g3,c4]@8 [c3,g3,c4]@4 [a2,e3,a3]@4 b2@8 b2@8 a2@4 g2@4 e2@4 g2@4 [c3,g3,c4]@16 [c3,g3,c4]@8 [c3,g3,c4]@4 [a2,e3,a3]@4 b2@8 b2@8 a2@4 g2@4 e2@4 g2@4 [c3,g3,c4]@16 [c3,g3,c4]@8 [c3,g3,c4]@4 [a2,e3,a3]@4 b2@8 b2@8 a2@4 g2@4 e2@4 g2@4 [c3,g3,c4]@16 [c3,g3,c4]@8 [c3,g3,c4]@4 [a2,e3,a3]@4 b2@8 b2@8 a2@4 g2@4 e2@4 g2, ~@35 a2 ~@7 a2 ~@55 a2 ~@7 a2 ~@55 a2 ~@7 a2 ~@55 a2 ~@7 a2 ~@20]/8", // C5 A5 C5 A5 C5 A5 C5 A5
  AA: "[~@3 [b2,f#3,b3]@64 ~@29]/3", // B5
})).s("gm_distortion_guitar").gain(0.46).pan(0.6)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@4 A@4 B C B C B C B C B C B C B C B C B C B C B C B C D@7 E@2 F@2 G H@2 I J@2 K@4 L@3 ~ M@8 N@8 O@4 P@8 Q R S@3 T@2
  U V@3 W@3 X@3 ~ Y@2 Z@3 Y Z@3 Y AA@5 AB@8 AC@8 ~@2
>`.pickRestart({
  A: "e1!4 ~@4", B: "e1!3 c2@5", C: "e1!3 c2 b1@2 a#1@2", D: "e1!3 d2@5",
  E: "[e1@4 e1@4 e1@4 d2@9 d2@4 d2@4 ~ e1@4 c2@9 c2@4 c2@4 ~ c2@8 c2@4]/2",
  F: "[~ b1@4 b1@9 b1@8 a1@4 ~ g1@4 e1@4 ~ g1@4 c2@9 c2@4 c2@4 c2@7]/2", G: "~@2 c2@4 b1@4 ~ b1@9 b1@8 a1@4",
  H: "[~ g1@4 e1@4 g1@4 ~ c2@8 c2@4 ~ c2@4 c2@9 c2@4 b1@4 ~ b1@8 b1@7]/2", I: "~@2 a1@4 g1@4 ~ e1@4 g1@4 ~ c2@8 c2@4",
  J: "[~ c2@4 c2@9 c2@4 b1@4 b1@9 b1@9 a1@4 g1@4 ~ e1@4 g1@4 c2@7]/2",
  K: "[~@2 c2@4 c2@4 ~ c2@9 c2@4 b1@4 b1@9 b1@9 a1@4 g1@4 e1@4 ~ g1@4 c2@9 c2@4 c2@4 ~ c2@8 c2@4 ~ b1@4 b1@9 b1@9 a1@4 g1@4 e1@4]/4",
  L: "[~ g1@4 c2@9 c2@4 c2@4 c2@9 c2@4 ~ b1@4 b1@9 b1@8 a1@4 ~ g1@4 e1@4 g1@4 ~ b1@17 ~@4]/3",
  M: "[~@17 e1@4 e1@4 e1@4 ~ c2@20 e1@4 e1@4 e1@4 c2@4 b1@8 a#1@8 e1@4 e1@4 e1@4 c2@20 e1@4 e1@4 e1@4 c2@4 b1@8 a#1@8 e1@4 e1@4 e1@4 c2@20 e1@4 e1@4 e1@4 c2@4 b1@8 a#1@8 e1@4 e1@4 e1@4 c2@20 e1@4 e1@4 e1@4 c2@2]/8",
  N: "[~ b1@4 a#1@4 e1@2 e1@2 e1@2 c2@10 e1@2 e1@2 e1@2 c2@2 b1@4 a#1@4 e1@2 e1@2 e1@2 c2@10 e1@2 e1@2 e1@2 c2@2 b1@4 a#1@4 e1@2 e1@2 e1@2 c2@10 e1@2 e1@2 e1@2 c2@2 b1@4 a#1@4 e1@2 e1@2 e1@2 c2@10 e1@2 e1@2 e1@2 c2]/8",
  O: "[~ b1@4 a#1@4 e1@2 e1@2 e1@2 c2@10 e1@2 e1@2 e1@2 c2@2 b1@4 a#1@4 e1@2 e1@2 e1@2 c2@10 e1@2 e1@2 e1@2 c2]/4",
  P: "[~ b1@4 a#1@4 e1@2 e1@2 e1@2 d2@10 e1@2 e1@2 e1@2 d2@10 e1@2 e1@2 e1@2 d2@10 e1@2 e1@2 e1@2 d2@10 e1@2 e1@2 e1@2 d2@10 e1@2 e1@2 e1@2 d2@10 e1@2 e1@2 e1@2 d2@10 e1@2 e1@2 e1@2 d2]/8",
  Q: "~@7 d2@4 d2@4 ~ e1@4 c2@9 c2@3", R: "~ c2@4 ~ c2@8 c2@4 ~ b1@4 b1@9",
  S: "[b1@9 a1@4 g1@4 e1@4 ~ g1@4 c2@9 c2@4 c2@4 c2@9 c2@4 ~ b1@4 b1@9 b1@8 a1@4 ~ g1@4 e1@4 g1@4 ~]/3",
  T: "[c2@9 c2@4 c2@4 c2@9 c2@4 b1@4 ~ b1@8 b1@9 a1@4 ~ g1@4 e1@3]/2", U: "~ g1@4 ~ c2@8 c2@4 ~ c2@4 c2@9",
  V: "[c2@4 b1@4 ~ b1@8 b1@9 a1@4 g1@4 ~ e1@4 g1@4 c2@9 c2@4 ~ c2@4 c2@9 c2@4 b1@4 b1@9 b1@9]/3",
  W: "[a1@4 g1@4 ~ e1@4 g1@4 c2@9 c2@4 c2@4 ~ c2@8 c2@4 ~ b1@4 b1@9 b1@9 a1@4 g1@4 e1@4 ~ g1@4 c2@9]/3",
  X: "[c2@4 c2@4 ~ c2@8 c2@4 ~ b1@4 b1@9 b1@8 a1@4 ~ g1@4 e1@4 ~ g1@4 b1@17 ~@18]/3", Y: "~@3 e1@4 e1@4 e1@4 e1@4 ~@13",
  Z: "[~@3 e1@4 e1@4 e1@4 f#2@8 g2@4 f#2@4 d#2@4 e1@4 e1@4 e1@4 b1@8 d2@4 b1@4 a1@4 e1@4 e1@4 e1@4 e1@4 ~@13]/3",
  AA: "~@3 e1@4 e2@4 c2@4 b1@3 ~@14",
  AB: "[~@3 e1@4 e2@4 c2@4 d2@8 d2@4 d2@4 e1@4 c2@8 c2@4 c2@4 c2@8 c2@4 b1@4 b1@8 b1@8 a1@4 g1@4 e1@4 g1@4 c2@8 c2@4 c2@4 c2@8 c2@4 b1@4 b1@8 b1@8 a1@4 g1@4 e1@4 g1@4 c2@8 c2@4 c2@4 c2@8 c2@4 b1@4 b1@8 b1@8 a1@4 g1@4 e1@4 g1@4 c2@8 c2@4 c2@4 c2@8 c2@4 b1, ~@15 b1@3 ~@238]/8",
  AC: "[~@3 b1@8 b1@8 a1@4 g1@4 e1@4 g1@4 c2@8 c2@4 c2@4 c2@8 c2@4 b1@4 b1@8 b1@8 a1@4 g1@4 e1@4 g1@4 c2@8 c2@4 c2@4 c2@8 c2@4 b1@4 b1@8 b1@8 a1@4 g1@4 e1@4 g1@4 c2@8 c2@4 c2@4 c2@8 c2@4 b1@4 b1@8 b1@8 a1@4 g1@4 e1@4 g1@4 b1@29]/8",
})).s("gm_electric_bass_finger").gain(0.51)

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

// drums · snare
const snare = s("sd").struct(`<
  A@32 B@7 C D E F G H I J K L M N O P Q R S T U V@19 W@8 X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM ~ AN AO@15 AP AQ
  AR AQ AR AQ AR AQ AR AQ AR AQ AR AQ AR AS AT ~
>`.pickRestart({
  A: "~@3 x", B: "x ~@2 x ~@2 x ~", C: "x ~@11 x ~@8 x ~@3 x ~@4 x ~", D: "x ~ x ~@8 x ~@3 x ~@4 x ~@7 x ~@3",
  E: "~ x ~@3 x ~@12 x ~@8 x ~@3 x", F: "~ x ~@2 x ~ x ~ x ~@8 x ~@3 x ~@3 x ~@6", G: "~@2 x ~@3 x ~@4 x ~@12 x ~@7",
  H: "~ x ~@3 x ~ x ~ x ~@2 x ~ x ~@7 x ~@4 x ~@3 x", I: "~@8 x ~@3 x ~@4 x ~@12 x ~",
  J: "~@6 x ~@4 x ~ x ~ x ~ x ~@2 x ~@7 x ~@3", K: "~ x ~@3 x ~@8 x ~@3 x ~@3 x ~@9",
  L: "~@4 x ~@7 x ~@4 x ~ x ~ x ~ x ~ x ~@6", M: "~@2 x ~@3 x ~@4 x ~@8 x ~@3 x ~@3 x ~@3",
  N: "~@9 x ~@8 x ~@3 x ~@2 x ~ x ~ x ~ x", O: "~@8 x ~@3 x ~@4 x ~@7 x ~@4 x ~", P: "~@2 x ~@12 x ~@8 x ~@3 x ~ x ~",
  Q: "~ x ~ x ~ x ~@8 x ~@3 x ~@3 x ~@8 x", R: "~@4 x ~@3 x ~@12 x ~@8 x ~", S: "~@2 x ~ x ~ x ~@2 x ~ x ~@20",
  T: "~@7 x ~@8", U: "~ x ~@2", V: "~@5 x ~@10", W: "~@5 x ~@3 x ~@5 x", X: "~@7 x ~@3 x ~@4 x ~ x ~ x ~@8 x ~@2",
  Y: "~ x ~@4 x ~@7 x ~@4 x ~@3 x ~@8", Z: "~@4 x ~@8 x ~@3 x ~ x ~@2 x ~ x ~ x ~@5",
  AA: "~@3 x ~@3 x ~@3 x ~@8 x ~@4 x ~@3 x ~@2", AB: "~@10 x ~@8 x ~@3 x ~ x ~ x ~@2 x ~",
  AC: "x ~@8 x ~@3 x ~@3 x ~@8 x ~@3 x ~", AD: "~@3 x ~@12 x ~@8 x ~@3 x ~ x",
  AE: "~ x ~ x ~@2 x ~@7 x ~@4 x ~@3 x ~@8", AF: "x ~@3 x ~@4 x ~@12 x ~@7 x ~",
  AG: "~@3 x ~ x ~ x ~ x ~ x ~@8 x ~@4 x ~@3 x ~@2", AH: "~@6 x ~@3 x ~@3 x ~@12 x ~@4",
  AI: "~@4 x ~@4 x ~ x ~ x ~ x ~ x ~@8 x ~@3 x ~", AJ: "~@3 x ~@7 x ~@4 x ~@3 x ~@11",
  AK: "~ x ~@8 x ~@3 x ~@2 x ~ x ~ x ~ x ~@8", AL: "x ~@3 x ~@4 x ~@7 x ~@4 x ~@3 x ~@5",
  AM: "~@7 x ~@8 x ~@3 x ~ x ~@2 x ~ x ~ x ~@2", AN: "x ~@12 x ~@2", AO: "~@27 x ~@4",
  AP: "~@3 x ~@11 x ~@7 x ~@3 x ~@3 x", AQ: "~ x ~ x ~@7 x ~@3 x ~@3 x ~@7 x ~@3 x",
  AR: "~@3 x ~@11 x ~@7 x ~@3 x ~ x ~ x", AS: "~ x ~ x ~@28", AT: "~@3 x ~@28",
})).gain(0.46)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@39 A B C D E F G H I J K L M N O P Q R ~@28 S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ ~@15 AK AL AK AL AK AL AK
  AL AK AL AK AL AK AL AK AM AN ~
>`.pickRestart({
  A: "~@25 x ~@2 x ~ x ~", B: "x ~@6 x", C: "~ x ~@29 x", D: "~ x ~@2 x ~ x ~@25", E: "~ x ~ x ~@12",
  F: "~@5 x ~ x ~ x ~@2 x ~@19", G: "~@2 x!2 ~@4", H: "~@11 x ~ x ~ x ~ x ~@14", I: "~@7 x ~ x ~@6",
  J: "~@17 x ~ x ~ x ~ x ~@8", K: "~@5 x!2 ~", L: "~@22 x ~@2 x ~ x ~ x ~@2", M: "~@25 x ~@4 x ~", N: "~@14 x!2",
  O: "~ x ~ x ~@27 x", P: "~ x ~@6", Q: "~@2 x ~ x ~ x ~@2 x ~@22", R: "~ x ~@3 x ~@3 x ~@4 x ~@17",
  S: "~@11 x ~@2 x ~ x ~ x ~@13", T: "~@14 x ~@4 x ~@12", U: "~@17 x ~ x ~@2 x ~ x ~@7", V: "~@20 x ~@4 x ~@6",
  W: "~@23 x ~ x ~ x ~@2 x ~", X: "~@13 x ~ x", Y: "~@29 x ~ x", Z: "~ x ~ x ~@28", AA: "x!2 ~@6",
  AB: "~@3 x ~ x ~ x ~ x ~@22", AC: "~@3 x ~ x ~@10", AD: "~@9 x ~ x ~ x ~ x ~@16", AE: "~@11 x ~@4 x ~@15",
  AF: "~@14 x ~@2 x ~ x ~ x ~@10", AG: "~@17 x ~@4 x ~@9", AH: "~@20 x ~ x ~@2 x ~ x ~@4", AI: "~@19 x ~@3 x ~@3 x ~@4",
  AJ: "x", AK: "~@27 x ~ x ~ x", AL: "~ x ~@25 x ~@3 x", AM: "~ x ~@21 x ~@3 x ~@3 x", AN: "~@3 x ~@28",
})).gain(0.46)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@55
  [~@24 x!2 ~ x!2 ~ x ~]
  ~@45
  [~@10 x ~ x!3 ~@2 x ~@14]
  ~@31
  [~@15 x!3 ~ x ~ x ~ x!3 ~@3 x!3]
  [~ x!3 ~@28]
  ~
>`).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@39 B C D E C D E C D E C D E C D E F G H I@27 J K L J K L J K L J K L J K L M ~ N O@30 ~ P ~
>`.pickRestart({
  A: "x!4", B: "x ~@7 x ~@8 x ~@7 x ~@6", C: "~@2 x ~@8 x ~@8 x ~@7 x ~@3", D: "~@5 x ~@8 x ~@7 x ~@8 x",
  E: "~@8 x ~@8 x ~@7 x ~@6", F: "~ x ~@14", G: "~@7 x ~@8", H: "~@17 x ~@7 x ~@6", I: "~ x ~@3 x ~@3 x ~@3 x ~@2",
  J: "~@3 x ~@7 x ~@8 x ~@8 x ~@2", K: "~@6 x ~@7 x ~@8 x ~@8", L: "x ~@8 x ~@7 x ~@8 x ~@5",
  M: "~@3 x ~@7 x ~@8 x ~@11", N: "x", O: "~@3 x ~@7 x ~@7 x ~@7 x ~@4", P: "~@3 x ~@28",
})).gain(0.46)

// drums · high tom
const high_tom = s("ht").struct("<~@55 A ~@44 B C ~@31 D E ~>".pickRestart({
  A: "~@11 x!3 ~ x ~ x!2 ~ x!3 ~@9", B: "~@29 x!2 ~", C: "x!2 ~ x!2 ~ x!3 ~@23",
  D: "~@3 x!3 ~ x!3 ~ x!3 ~ x!9 ~ x!3 ~ x!3", E: "~ x!3 ~@28",
})).gain(0.41)

// drums · crash
const crash = s("cr").struct(`<
  ~@32 A@8 B C D E F G H I J K L M N O P Q R ~@20 S@8 T U V W X Y Z AA AB AC AD AE AF AG AH AI R AJ ~@15 AK AL AK AL AK
  AL AK AL AK AL AK AL AK AL AK AM AN ~
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "~@2 x ~@8 x ~@3 x ~@4 x ~@7 x ~@3", C: "~ x ~@3 x ~@12 x ~@13",
  D: "~@8 x ~@8 x ~@3 x ~@3 x ~@6", E: "~@2 x ~@3 x ~@4 x ~@12 x ~@7", F: "~@14 x ~@7 x ~@4 x ~@3 x",
  G: "~@8 x ~@3 x ~@4 x ~@12 x ~", H: "~@5 x ~ x", I: "~ x ~@3 x ~@8 x ~@3 x ~@3 x ~@9", J: "~@4 x ~@20 x ~@6",
  K: "~@2 x ~@3 x ~@4 x ~@8 x ~@3 x ~@3 x ~@3", L: "~@9 x ~@21 x", M: "~@8 x ~@3 x ~@4 x ~@7 x ~@4 x ~",
  N: "~@2 x ~@12 x ~@16", O: "~@5 x ~@8 x ~@3 x ~@3 x ~@8 x", P: "~@4 x ~@3 x ~@12 x ~@10", Q: "~@11 x ~@16 x ~@3",
  R: "~@7 x ~@8", S: "~@9 x ~@5 x", T: "~@20 x ~@8 x ~@2", U: "~ x ~@4 x ~@7 x ~@4 x ~@3 x ~@8", V: "~@2 x ~@10 x ~@2",
  W: "~@3 x ~@3 x ~@3 x ~@8 x ~@4 x ~@3 x ~@2", X: "~@5 x ~@10", Y: "x ~@8 x ~@3 x ~@3 x ~@8 x ~@3 x ~",
  Z: "~@3 x ~@12 x ~@15", AA: "~@6 x ~@7 x ~@4 x ~@3 x ~@8", AB: "x ~@3 x ~@4 x ~@12 x ~@9",
  AC: "~@11 x ~@8 x ~@4 x ~@3 x ~@2", AD: "~@6 x ~@3 x ~@3 x ~@12 x ~@4", AE: "~@17 x ~@8 x ~@3 x ~",
  AF: "~@3 x ~@7 x ~@4 x ~@3 x ~@11", AG: "~ x ~@21 x ~@8", AH: "x ~@3 x ~@4 x ~@7 x ~@4 x ~@3 x ~@5",
  AI: "~@7 x ~@21 x ~@2", AJ: "x", AK: "~@3 x ~@11 x ~@16", AL: "~@3 x ~@7 x ~@3 x ~@3 x ~@7 x ~@3 x",
  AM: "~@3 x ~@15 x ~@12", AN: "~@3 x ~@28",
})).gain(0.46)

// drums · ride
const ride = s("rd").struct(`<
  A@39 B C D E C D E C D E C D E C D E F ~ G H@27 I J K I J K I J K I J K I J K L ~@2 M@30 ~@3
>`.pickRestart({
  A: "x!8", B: "x ~@3 x ~@3 x ~@3 x ~@4 x ~@3 x ~@3 x ~@4 x ~", C: "~@2 x ~@3 x ~@4 x ~@3 x ~@4 x ~@3 x ~@3 x ~@3",
  D: "~ x ~@3 x ~@3 x ~@4 x ~@3 x ~@3 x ~@4 x ~@3 x", E: "~@4 x ~@3 x ~@3 x ~@4 x ~@3 x ~@3 x ~@4 x ~",
  F: "~ x ~ x ~@12", G: "~@17 x ~@3 x ~@3 x ~@4 x ~", H: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  I: "~@3 x ~@3 x ~@3 x ~@4 x ~@3 x ~@4 x ~@3 x ~@2", J: "~ x ~@4 x ~@3 x ~@3 x ~@4 x ~@3 x ~@3 x ~@4",
  K: "x ~@3 x ~@4 x ~@3 x ~@3 x ~@4 x ~@3 x ~@3 x ~", L: "~@3 x ~@3 x ~@3 x ~@4 x ~@3 x ~@4 x ~@6",
  M: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x",
})).gain(0.46)

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

More by Nirvana