Strudelify

Thru the Eyes of Ruby

The Smashing Pumpkins

KeyB minorTempo70 bpm
0:00/0:00
// Thru the Eyes of Ruby — The Smashing Pumpkins
// 70 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 9 "Bass" named as a bass, played on electric bass finger (its electric guitar jazz patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 16 "EvilJayCee" electric guitar muted (copy of ch 13 acoustic guitar steel)
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar 4 (Flanged).
setcpm(70/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 · piano · E Ddim D5 F# A F# E
const piano = note(`<
  [[e5,g#5,b5]@2 ~ g#5 ~@3 d6, ~ e5 [d5,g#5] [d5,a5], ~@4 g#5@2 ~@3 d6@3 d6@2 ~@2, ~@5 b5@3 b5@2 b5@6, ~@13 f#6@3]
  [[c#5,f#5,a#5]@4 ~@2 c#6@2 [e5,a5,c#6]@4 [e5,a5,c#6] e6 c#6 ~, ~ [c#5,f#5,a#5] ~@2, ~@2 c#6 ~@5, ~@5 f#6@3 ~@8]
  [[e5,g#5,b5]]
  ~@125
>`).s("gm_piano").gain(0.02)

// chords · distortion guitar · "Guitar 1"
const distortion_guitar = note(`<
  ~@2 A B C D E F E F ~@23 G H G H I J I K I J I J L M N O P Q R S R T U T V T W X@2 ~@8 I J I K I J I J Y Z Y Z Y Z Y Z
  AA AB AA AB AA AB AA AC AD AC AE AF AG@4 ~@26
>`.pickRestart({
  A: "e4@2 b4!2 g#5 b4!3 g4 d5 b4 d4 a5 b4 d5 c#5", B: "f#3 c#4 b3 f#3 a#5 b4 c#5 b4 a4 e5 b4 a4 c#6 b4 e5 b4",
  C: "e4 b4!2 e4 g#5 b4!3 g4 d5 b4 d4 a5 b4 d5 b4", D: "f#4 c#5 b4 f#4 a#5 b4 c#5 b4 a4 e5 b4 a4 c#6 b4 e5 b4",
  E: "[e3,b3,e4,g#4]@2 [e3,b3,e4,g#4] [e3,b3,e4] [e3,b3,e4,g#4]@2 [e3,b3,e4,g#4] [e3,b3,e4] [g3,d4,g4,b4]!2 [g3,d4,g4]@2 [d4,a4,d5,f#5] [d4,a4,d5] [d4,a4,d5]@2", // E E5 E E5 G G5 D D5
  F: "[f#3,c#4,f#4,a#4] [f#3,c#4,f#4] [f#3,c#4,f#4,a#4] [f#3,c#4,f#4] [f#3,c#4,f#4,a#4]@2 [f#3,c#4,f#4,a#4] [f#3,c#4,f#4] [a3,e4,a4,c#5]@2 [a3,e4,a4]@2 [a3,e4,a4,c#5] [a#3,f4,a#4] [b3,f#4] e3", // F# F#5 F# F#5 F# F#5 A A5 …
  G: "[e3,b3,e4,g#4]@3 [e3,b3,e4,g#4] [e3,b3,e4]@2 [e3,b3,e4]!2 [g3,d4,g4,b4]@3 [d4,a4,d5] [d4,a4,d5,f#5]@2 [d4,a4] e3", // E E5 G D5 D D5
  H: "[f#3,c#4,f#4,a#4]@3 [f#3,c#4,f#4,a#4] [f#3,c#4,f#4,a#4]@2 [f#3,c#4,f#4,a#4] [a3,e4] [a3,e4,a4,c#5] [a3,e4,a4] [a3,e4,a4,c#5] [a3,e4,a4] [a3,e4,a4,c#5] [a#3,f4,a#4,d5] [b3,f#4,b4,d#5] e3", // F# A5 A A5 A A5 A A# …
  I: "[e3,b3,e4,g#4]@2 [e3,b3,e4,g#4] [e3,b3,e4] [e3,b3,e4,g#4] [e3,b3,e4] [e3,b3,e4,g#4] [a3,d4,g4] [g3,d4,g4,b4]@3 [d4,a4,d5] [d4,a4,d5,f#5]!2 [e3,a3]!2", // E E5 E E5 E Dsus4 G D5 …
  J: "[f#3,c#4,f#4,a#4]@3 [f#3,c#4,f#4] [f#3,c#4,f#4,a#4]@2 [f#3,c#4,f#4] [a3,e4] [a3,e4,a4,c#5]@2 [a3,e4,a4,c#5] [a3,e4,a4]!4 e3", // F# F#5 F# F#5 A5 A A5
  K: "[f#3,c#4,f#4,a#4]@3 [f#3,c#4,f#4,a#4] [f#3,c#4,f#4,a#4]@2 [f#3,c#4,f#4] a3 [a3,e4,a4,c#5] [a3,e4,a4] [a3,e4,a4,c#5] [a3,e4,a4] [a3,e4,a4,c#5] [a#3,f4,a#4,d5] [b3,f#4,b4,d#5] e3", // F# F#5 A A5 A A5 A A# …
  L: "[b3,f#4,b4,d#5]@3 [b3,f#4,b4,d#5] [b3,f#4,b4,d#5]@2 [a3,e4]!2 [a3,e4,a4,c#5]@3 [a3,e4,a4,c#5] [d4,a4,d5,f#5]@3 [e3,a3]", // B A5 A D A5
  M: "[g3,d4,g4,b4]!2 [g3,d4,g4,b4]@2 [g3,d4,g4,b4]@2 [g3,d4,g4,b4]!9 [b3,f#4,b4,d#5]", // G B
  N: "[b3,f#4,b4,d#5]!7 [a3,e4,a4,c#5]!4 [d4,a4,d5]!4 [e3,a3]", // B A D5 A5
  O: "[g3,d4,g4,b4] [d4,g4,b4] [g3,d4,g4,b4]@2 [g3,d4,g4,b4]@2 [g3,d4,g4,b4]!9 [b3,f#4,b4,d#5]", // G B
  P: "[b3,f#4,b4,d#5]@3 [b3,f#4,b4] [b3,f#4,b4,d#5]@2 [a3,e4]!2 [a3,e4,a4,c#5]@3 [a3,e4,a4,c#5] [d4,a4,d5,f#5]@3 [e3,a3]", // B B5 B A5 A D A5
  Q: "[g3,d4,g4,b4] [d4,g4,b4] [g3,d4,g4,b4]@2 [g3,d4,g4,b4]@2 [g3,d4,g4,b4]!9 [e3,a3]", // G A5
  R: "[a3,e4,a4,c#5]@3 [a3,e4,a4,c#5] [a3,e4,a4,c#5]@2 [a3,e4,a4,c#5]!4 [a3,e4,a4,c#5]@2 [a3,e4,a4,c#5]!3 [b3,f#4,b4,d#5]", // A B
  S: "[b3,f#4,b4,d#5]@2 [b3,f#4,b4,d#5]@2 [b3,f#4,b4,d#5] [b3,f#4,b4] [b3,f#4,b4,d#5]!8 [e3,a3] [a3,e4,a4]", // B B5 B A5
  T: "[b3,f#4,b4,d#5]@2 [b3,f#4,b4,d#5]@2 [b3,f#4,b4,d#5]!3 [d4,a4,d5,f#5] [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]@2 [d4,a4,d5,f#5]!2 [e3,a3]!2", // B D A5
  U: "[a3,e4,a4,c#5]@2 [a3,e4,a4,c#5]@2 [a3,e4,a4]@2 [a3,e4,a4]!2 [g3,d4,g4]!7 [b3,f#4,b4,d#5]", // A A5 G5 B
  V: "[a3,e4,a4,c#5]@2 [a3,e4,a4,c#5]@2 [a3,e4,a4]@2 [a3,e4,a4]!2 [g3,d4,g4]!7 [b3,f#4,b4,d5]", // A A5 G5 Bm
  W: "[a3,e4,a4]@2 [a3,e4,a4]@2 [a3,e4,a4]@2 [a3,e4,a4]!2 [g3,d4,g4]!4 [g3,d4,g4]@2 [e3,a3]!2", // A5 G5 A5
  X: "[f#3,c#4,f#4,a#4,b4,e5]/2", Y: "[b3,f#4,b4,d#5,f#5]!11 [d4,a4,d5,f#5]!2 [d4,a4,d5]!2 [a3,e4]",
  Z: "[a3,e4,a4,c#5] [a3,e4,a4] [a3,e4,a4,c#5] [a3,e4,a4] [a3,e4,a4,c#5] [a3,e4,a4] [a3,e4,a4,c#5] [a3,e4,a4] [a3,e4,a4,c#5] [a3,e4,a4] [a3,e4,a4,c#5] [e3,b3,e4]!5", // A A5 A A5 A A5 A A5 …
  AA: "[b3,f#4,b4]@2 [b3,f#4,b4]!2 [b3,e4,a4] [f#4,b4] [b3,f#4,b4]!2 [b3,f#4,b4]@2 [b3,f#4,b4] [b3,e4,a4] [d4,a4,d5]@2 [d4,a4,d5] [e3,a3]", // B5 Esus4 B5 Esus4 D5 A5
  AB: "[a3,e4,a4,c#5]@2 [a3,e4,a4]!2 [a3,d4,g4] [e4,a4] [a3,e4,a4]!2 [a3,e4,a4]@2 [a3,e4,a4] e3 [e3,b3,e4]@2 [e3,b3,e4]!2", // A A5 Dsus4 A5 E5
  AC: "[a3,e4,a4]@2 [a3,e4,a4]!2 [a3,d4,g4] [e4,a4] [a3,e4,a4]!2 [a3,e4,a4]@2 [a3,e4,a4] e3 [e3,b3,e4]@2 [e3,b3,e4]!2", // A5 Dsus4 A5 E5
  AD: "[b3,f#4,b4,d#5]@2 [b3,f#4,b4]!2 [b3,e4,a4] [f#4,b4] [b3,f#4,b4]!2 [b3,f#4,b4]@2 [b3,f#4,b4] [b3,e4,a4] [d4,a4,d5]@2 [d4,a4,d5] [e3,a3]", // B B5 Esus4 B5 Esus4 D5 A5
  AE: "[b3,f#4,b4,d#5]@2 [b3,f#4,b4]!2 [b3,e4,a4] [f#4,b4] [b3,f#4,b4]!2 [b3,f#4,b4]@2 [b3,f#4,b4] [b3,e4,a4] [d4,a4,d5]@2 [d4,a4,d5] e3", // B B5 Esus4 B5 Esus4 D5
  AF: "[a3,e4,a4]", AG: "[f#3,c#4,f#4,a#4]/4",
})).s("gm_distortion_guitar").gain(0.4)

// other · overdriven guitar · "Guitar 2"
const overdriven_guitar = note(`<
  ~@2 A B ~@2 C D E F ~@25 G H@2 ~@7 I J K L M N ~@3 O@6 P Q@2 P R P@5 S ~@23 T U@2 V W@2 ~@28
>`.pickRestart({
  A: "e4@2 b4 g#4 e5@2 b4 g4!2 d5 e5 d4 a5 b4 d5 c#5", B: "c#4 f#4 a#4@2 a3 e4 a4@2", C: "g#5@2 b5 f#6",
  D: "c#6@8 e6@4 e6 f6 f#6@2", E: "[g#5,e6]@3 [g#5,e6] [g#5,e6]@4 [b5,d6]@4 [f#5,a5]@3 [f#5,a5]",
  F: "[a5,a#5]@4 [a5,a#5]@3 [a5,a#5] [a#5,c#6]@8", G: "~@3 e5 f#5@4 e5@4 b5@3 b5",
  H: "[a#5@3 a#5 c#6@3 c#6 e6@4 f#6@8 d5@4 ~@8]/2",
  I: "[b3,b4] [c#4,c#5]@2 [c#4,c#5]!2 [d4,d5] [d4,d5]@2 [d4,d5] [e4,e5]!4 [f#4,f#5] [f#4,f#5]@2", J: "[g4,g5]@3 ~@5",
  K: "[b4,b5]!5 [c#5,c#6]!4 [d5,d6]!4 [e5,e6]!3", L: "[d4,d5]@3 ~",
  M: "[b3,b4,b5] [c#4,c#5,c#6]@2 [c#4,c#5,c#6]!2 [d4,d5,d6] [d4,d5,d6]@2 [d4,d5,d6] [e4,e5,e6]!4 [f#4,f#5,f#6] [f#4,f#5,f#6]@2", // B C# D E F#
  N: "[g4,g5,g6]", O: "[f5@4 c#5 d#5 f#5@4 d#5@2 c#5 f#5 a5@4 c#6@2 b5 a5 f#5@4 g5@2 g5@2 g5@2]/2", P: "~ a#4@3",
  Q: "~@2 a#4@4 ~ a#4", R: "~ a#4@2 ~", S: "f#6 d5 ~@2", T: "f#5@3 g5",
  U: "[b5@4 c#6 b5@2 a5@2 ~@5 e5!2 f#5@12 g5@4, e5@7 ~@9, ~@11 e6@17 ~@4]/2", V: "e5", W: "[~ c#6@3, c#5]/2",
})).s("gm_overdriven_guitar").gain(0.4)

// other · acoustic guitar nylon · "Guitar 4 (Flanged)"
const acoustic_guitar_nylon = note("<~@23 [~@4 d#6 ~@7 d#6 d6 c#6 c6] ~@104>").s("gm_acoustic_guitar_nylon").gain(0.1)

// other · acoustic guitar nylon · "Guitar 4"
const acoustic_guitar_nylon_2 = note(`<
  ~@10 A B A B A B A B A B A B C D E F G F G F H I J ~@69 K@3 L M N O P K@3 L Q N O P R@2 ~@8
>`.pickRestart({
  A: "e4 b4!2 e4 g#5 b4!3 g4 d5 b4 d4 a5 b4 d5 b4", B: "f#4 c#5 b4 f#4 a#5 b4 c#5 b4 a4 e5 b4 a4 c#6 b4 e5 b4",
  C: "[g4,b4,d5,g5] d5 b4 d5 b5 b4 d5 b4 g4 d5 b4 d5 b5 d5 g4 d5", // G
  D: "[b4,f#5] f#5 b4!2 d6 b4 f#5 b4!2 f#5 b4!2 [b4,f#5,d6] [a#4,f5,c#6] [a4,e5,c6] [a#4,d#5,b5]", // B5 Bm A#m Am Bmaj7
  E: "[g4,b4,d5,b5] d5 b4 d5 b5 b4 d5 b4 g4 d5 b4 d5 b5 b4 d5 b4", // G
  F: "[b4,f#5,d#6] f#5 b4!2 d#6 b4 f#5 b4 d4 f#5 b4 f#5 d6 b4 f#5 b4", // B
  G: "a4 e5 b4 a4 c#6 b4 e5 b4 g4 d5 b4 g4 b5 b4 d5 b4", H: "a4 e5 b4 a4 c#6 a4 e5 b4 g4 d5 b4 g4 b5 b4 d5 b4",
  I: "f#4 c#5 b4 c#5 a#5 b4 c#5 b4 f#4 c#5 b4 c#5 a#5 b4 c#5 b4", J: "[f#4,b4,c#5,a#5]",
  K: "[[f#3,c#4,f#4,a#4,b4]@6 f#3@2 c#4 f#4@2 a#4@9 e5 b4@10 [f#3,c#4,f#4,a#4]@5 b4 a#4@4 f#3 c#4@2 c#4 f#4@2 f#4]/3", // F#
  L: "a#4@3 b4@2 f#3 e5@8 f#5@2", M: "a5@8 f#5@4 c#5@3 e6", N: "a5@12 f#4 a4 c#5 e5",
  O: "f#4@2 a4 e5@2 b4 c#5 e5 a4@6 c#4 f#4", P: "f#4 a5 ~@2 f#4 e6 ~@8 b5@2", Q: "a5@8 b5@2 b5@3 b5 ~ e6",
  R: "[[f#3,c#4,f#4,a#4,b4]@6 f#3@2 c#4 f#4@2 a#4@9 e5 b4@10 [f#3,c#4,f#4,a#4]]/2", // F#
})).s("gm_acoustic_guitar_nylon").gain(0.22)

// other · distortion guitar · "Guitar 5"
const distortion_guitar_2 = note("<~@25 A@6 B@2 ~@95>".pickRestart({
  A: "[f5@4 c#5 d#5 f#5@4 d#5@2 c#5 f#5 a5@4 c#6@2 b5 a5 f#5@4 g5@2 g5@2 g5@2]/2", B: "f#5/2",
})).s("gm_distortion_guitar").gain(0.4)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@33 A B A B A B A B A B A B C D C D C D E F G H I H I J K L@9 M A B A B A B A B N O N O N O N O P Q P Q P Q P Q P Q P
  R S L@21 ~@8
>`.pickRestart({
  A: "e1@3 e1 e1@2 e1!2 g1@3 d2 d2@2 d2 e1", B: "f#1@3 f#1 f#1@2 f#1 a1!6 a#1 b1 e1",
  C: "b1@3 b1 b1@2 a1!2 a1@3 a1 d2@3 e1", D: "g1!2 g1@2 g1@2 g1!9 b1", E: "a1@3 a1 a1@2 a1!4 a1@2 a1!3 b1",
  F: "b1@2 b1@2 b1!10 e1 a1", G: "a1@3 a1 a1@2 a1!4 a1@2 a1!2 a#1 b1", H: "b1@2 b1@2 b1!3 d2 d2@2 d2@2 d2!2 e1!2",
  I: "a1@2 a1@2 a1@2 a1!2 g1!7 b1", J: "b1@2 b1@2 b1!3 d2 d2@2 d2@2 d2@2 e1!2",
  K: "a1@2 a1@2 a1@2 a1!2 g1!4 g1@2 f#1 e1", L: "f#1@4 f#1@4 f#1@2 f#1!2 e1@4", M: "f#1!16", N: "b1!11 d2!4 a1",
  O: "a1!11 e1!5", P: "b1@2 b1!6 b1@2 b1!2 d2@2 d2 e1", Q: "a1@2 a1!6 a1@2 a1 e1 e1@2 e1!2", R: "a1@14 a1 e1", S: "f#1",
})).s("gm_electric_bass_finger").gain(0.16)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note("<~@118 A B C D C D E C F ~>".pickRestart({
  A: "[c4,f4,c5,f5,a5]@3 ~@9 [f4,c5,f5]@2 ~@2", B: "[g3,d4,g4,a#4]@3 ~@9 [a#3,d4,f4,a#4,f5,a#5]@2 ~@2",
  C: "[c4,f4,c5,f5,a5]@3 ~ [f4,c5,f5]@3 [f4,c5,f5,a5] [f4,c5,f5]@3 ~ [f4,c5,f5]@2 [f4,a#4,d5] [f4,a#4,d5,g5]", // F F5 F F5 A# Gm7
  D: "[g3,d4,g4,a#4]@3 [g3,d4,g4,a#4,d5,g5] [g3,d4,g4,a#4,d5,g5]@2 [g3,d4,g4,a#4,d5,g5] [g4,a#4,d5,g5] [a#3,d4,f4,a#4,f5]@3 ~ [a#3,d4,f4,a#4,f5,a#5]@2 [a#3,d4,f4,a#4] [f4,c5,f5,a5]", // Gm A# F
  E: "[d#4,g4,a#4,d#5,g5]@3 [d#4,g4,a#4,d#5,g5] [d#4,g4,a#4,d#5,g5]@2 [a#4,d5,g5] [d5,g5] [a#3,d4,f4,a#4,f5]@3 ~ [a#3,d4,f4,a#4,f5]@2 [f4,a#4,f5] [f4,a#4,f5,a#5]", // D# Gm G5 A# A#5
  F: "[c4,g4,c5,e5,g5]@3 [c4,g4,c5,e5,g5] [c4,g4,c5,e5,g5]@2 [f4,a#4,d5,g5] [d5,g5] [a#3,d4,f4,a#4,g5]@3 ~ [a#3,d4,f4,a#4,f5]@2 [f4,a#4,d5]@2", // C Gm7 G5 Gm7 A#
})).s("gm_acoustic_guitar_steel").gain(0.06)

// chords · acoustic guitar steel · soft notes · F5 F F5 A# Gm7 Gm A# F …
const acoustic_guitar_steel_2 = note(`<
  ~@118
  [~@4 [f4,c5,f5]@3 [f4,c5,f5,a5] [f4,c5,f5]@3 ~@3 [f4,a#4,d5] [f4,a#4,d5,g5]]
  [~@3 [g3,d4,g4,a#4,d5,g5] [g3,d4,g4,a#4,d5,g5]@2 [g3,d4,g4,a#4,d5,g5] [g4,a#4,d5,g5] [a#3,d4,f4,a#4,f5]@3 ~@3 [a#3,d4,f4,a#4] [f4,c5,f5,a5]]
  ~@7
  [[a3,d#4,g#4,c5,d#5]@3 ~ [g#3,d#4,g#4,c5]@3 ~@9]
>`).s("gm_acoustic_guitar_steel").gain(0.03)

// other · electric guitar jazz · "Stephen Bornet"
const electric_guitar_jazz = note("<~@118 A B C D E F G H I J>".pickRestart({
  A: "~ c6@2 c6@3 a#5 ~", B: "a#5@3 a5 a5@2 f5@2 f5@7 ~", C: "~ a4@3 a#4 a4@3 a4@7 ~", D: "~@4 d5@2 c5 ~",
  E: "a5@8 a5@2 g5@5 ~", F: "a#5@3 a5 a5@3 ~ c6@7 ~", G: "a#5@3 a5 a5@2 g5@2 f5@7 ~", H: "d5@2 f5@6 f5@2 c5@5 ~",
  I: "g4@7 ~ a#4@7 ~", J: "e6@3 ~@13",
})).s("gm_electric_guitar_jazz").gain(0.07)

// other · electric guitar jazz · "Stephen Bornet" · soft notes
const electric_guitar_jazz_2 = note("<~@117 [a#5@3 a5 a5@2 a5@2 f5@4 f5@3 c6] ~@9 [~@3 d6 d6@2 c6@2 c6@2 d6@5 ~]>")
  .s("gm_electric_guitar_jazz").gain(0.03)

// other · pad warm
const pad_warm = note("<~@102 A@3 B C D E F A@3 B G D E F ~@10>".pickRestart({
  A: "[[f#3,c#4,f#4,a#4,b4]@6 f#3@2 c#4 f#4@2 a#4@9 e5 b4@10 [f#3,c#4,f#4,a#4]@5 b4 a#4@4 f#3 c#4@2 c#4 f#4@2 f#4]/3", // F#
  B: "a#4@3 b4@2 f#3 e5@8 f#5@2", C: "a5@8 f#5@4 c#5@3 e6", D: "a5@12 f#4 a4 c#5 e5",
  E: "f#4@2 a4 e5@2 b4 c#5 e5 a4@6 c#4 f#4", F: "f#4 a5 ~@2 f#4 e6 ~@8 b5@2", G: "a5@8 b5@2 b5@3 b5 ~ e6",
})).s("gm_pad_warm").gain(0.16)

// other · pad warm · soft notes
const pad_warm_soft = note("<~@118 A@2 ~@8>".pickRestart({
  A: "[[f#3,c#4,f#4,a#4,b4]@6 f#3@2 c#4 f#4@2 a#4@9 e5 b4@10 [f#3,c#4,f#4,a#4]]/2", // F#
})).s("gm_pad_warm").gain(0.1)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@2 B C B@6 D@8 A@3 D@5 E@2 F B C B@3 C B@3 C B@2 G H I H I H J B@5 K B@2 L@10 B C B@3 C B@2 A M@6 N B C B@3 C B C
  B@4 L@23 ~@7
>`.pickRestart({
  A: "x!16", B: "x!2 ~ x!3 ~ x", C: "x!2 ~@6", D: "x!2 ~ x!3 ~@2", E: "x ~@2 x ~@2 x ~ x ~ x ~ x!3 ~",
  F: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", G: "x!4", H: "~ x ~ x!3 ~ x", I: "x", J: "~ x ~ x!2 ~ x ~", K: "x!2 ~ x ~@4",
  L: "x!2 ~@2 x!2 ~@10", M: "~ x!15", N: "~ x!11 ~@4",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@85 [~@6 x!2] ~@42>").gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@5 A B C B@2 D@4 E@8 A@2 F E G E G E ~@2 H B C B@3 C B@3 C B@2 I J I J I K L D M@2 D M N M D ~@9 O B C B@3 C B@2 ~@7
  P B C B@3 C B Q B@4 ~@30
>`.pickRestart({
  A: "x!16", B: "~@2 x ~@3 x!2", C: "~@4 x!4 ~ x!7", D: "~ x ~ x", E: "~ x ~@2", F: "x!12 ~@4", G: "~@4 x ~@8 x!3",
  H: "~@12 x!4", I: "~ x!3 ~ x!3 ~ x!3 ~ x!3", J: "~@2 x ~ x!4", K: "~@4 x ~@5 x ~ x ~ x!2",
  L: "x ~@3 x ~@2 x ~ x!2 ~@2 x!3", M: "~@4 x ~@7 x ~ x!2", N: "~@4 x ~@4 x!3 ~ x!3", O: "~@8 x!8", P: "~@6 x!2",
  Q: "~@4 x!4 ~@2 x!2 ~ x!3",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@13 A B@8 ~@2 C B D B D B ~@27 E ~@2 F@9 ~@10 G ~ G@2 ~ G ~@8 H ~@4 F@23 ~@7
>`.pickRestart({
  A: "~@14 x!2", B: "~@12 x!3 ~", C: "~@12 x ~ x!2", D: "~@13 x ~@2", E: "~@2 x!2", F: "~@9 x!3 ~ x!3", G: "~@13 x!3",
  H: "~@9 x!2 ~ x!3 ~",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@6 A B A@5 C D E D E D E D E ~@3 D E D E D ~@2 F A B A@3 B A@3 B A@2 ~ G ~ G ~ H I J@5 K J@2 L@10 A B A@3 B A@2 ~@8 A
  B A@3 B A B A@4 L@23 ~@7
>`.pickRestart({
  A: "x!2 ~ x!3 ~ x", B: "x!2 ~@6", C: "x!2 ~ x!3 ~@2", D: "~ x ~ x ~ x ~@2", E: "~ x!3 ~ x ~@2", F: "x ~@2 x ~@4",
  G: "~ x ~ x!3 ~ x", H: "~ x ~ x!2 ~@3", I: "x!8", J: "~ x ~ x ~ x ~ x", K: "~ x ~ x ~@4", L: "~ x ~@6",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@13 [~@13 x ~@2] ~@46 [~@2 x!2]!9 ~@29 [~@2 x!2]!20 ~@10>").gain(0.4)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@118 [~@2 x!2]!3 ~@7>").gain(0.16)

// … 21 more lines

More by The Smashing Pumpkins