Strudelify

Bullet With Butterfly Wings

The Smashing Pumpkins

KeyD majorTempo120 bpm
0:00/0:00
// Bullet With Butterfly Wings — The Smashing Pumpkins
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 36, 4/4 at bar 37) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 133 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 2, Guitar 3.
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 · electric guitar clean · "Guitar 1"
const electric_guitar_clean = note(`<
  A B C B C B C B C B C B C B D E F E F E F G H I J K I J K I J K I J L M@8 N@2 O@8 P@6 Q@2 R S@6 T@3 U@8 V W ~@12 X Y@6
  Z@8 AA@16 AB@8 ~
>`.pickRestart({
  A: "~@5 [b3,f#4,b4] [b3,f#4] [a3,f#4]", B: "[b3,f#4]!2 [g3,b3,f#4]!2 [e3,b3,f#4]!4",
  C: "[e3,b3,f#4]@2 [a3,f#4,b4]@2 [a3,f#4]@2 [a3,f#4,b4]@2 [a3,f#4]!2 [b3,f#4,b4]@2 [b3,f#4]@2 [a3,f#4]@2", // Esus2 B7 D B7 D B5 D
  D: "[e3,b3,f#4]@2 [a3,f#4,b4]@2 [a3,f#4]@2 [a3,f#4,b4]@2 [a3,f#4]!2 [b3,f#4,b4]@2 [b3,f#4]@2 [b3,f#4]@2", // Esus2 B7 D B7 D B5
  E: "[e3,b3,f#4]!4 [g3,b3,f#4]!4", // Esus2 Gmaj7
  F: "[g3,b3,f#4]@2 [a3,f#4,b4]@2 [a3,f#4,b4]@2 [a3,f#4,b4]@2 [a3,f#4,b4]!2 [b3,f#4,b4]@2 [b3,f#4]@2 [b3,f#4]@2", // Gmaj7 B7 B5
  G: "[g3,b3,f#4]!4 [a3,f#4] [a3,f#4,b4] [a3,f#4]!2", // Gmaj7 D B7 D
  H: "[a3,f#4]@2 [a3,f#4]@2 [a3,f#4]@2 [a3,f#4]@2 [a3,f#4]@2 [b3,f#4,b4]@3 ~ [b3,f#4,b4]@2", // D B5
  I: "[a3,d4]@2 [g3,d4,g4,d5]@3 ~ [g3,d4,g4,d5]@3 ~ [a3,d4,a4,d5]@3 ~ [a3,d4,a4,d5]@2", // D5 G5 D5
  J: "~@2 a4@3 ~ a4 ~ e3@2 [b4,e5]@3 ~ e3 ~", K: "[g3,d4,g4,d5]@9 ~ [b3,f#4,b4]@3 ~ [b3,f#4,b4]@2",
  L: "[g3,d4,g4,d5]@9 ~ f#3@2 e3@2 f#3@2", // G5
  M: "[[a3,e4,a4]@2 ~@32 [b3,f#4,b4]@2 [b3,f#4]@2 f#4@2 [b3,f#4]@2 [b3,f#4]@2 [g3,b3,f#4]@2 [g3,b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [a3,f#4,b4]@2 [a3,f#4]@2 [a3,f#4,b4]@2 [a3,f#4] f#4 [b3,f#4,b4]@2 [b3,f#4]@2 f#4@2 [b3,f#4]@2 [b3,f#4]@2 [g3,b3,f#4]@2 [g3,b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [a3,f#4,b4]@2 [a3,f#4]@2 [a3,f#4,b4]@2 [a3,f#4] f#4 [b3,f#4,b4]@2 [b3,f#4]@2 f#4@2 [b3,f#4]@2 [b3,f#4]@2 [g3,b3,f#4]@2 [g3,b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [a3,f#4,b4]@2 [a3,f#4]@2 [a3,f#4,b4]@2, ~ [e4,a4]@63, ~@2 a3@36 a3@20 ~@7 a3@5 a3@20 ~@7 a3@5 a3@20 ~@6]/8", // A5 B5 Gmaj7 Esus2 B7 D B7 D …
  N: "[[a3,f#4] f#4 [b3,f#4,b4]@2 [b3,f#4]@2 f#4@2 [b3,f#4]@2 [b3,f#4]@2 [g3,b3]@2 [g3,b3]@2 [e3,b3,f#4]@2 [e3,b3]@2 [e3,b3]@2 [e3,b3]@2 [e3,b3]@2 [a3,f#4,b4]@2 [a3,f#4]@2 [a3,f#4,b4]@2, ~ a3@5 a3@20 ~@6]/2", // D B5 G Esus2 E5 B7 D B7
  O: "[~@2 [b4,a5]@2 b4@2 e5@2 [b4,g5]@4 e5@3 ~ [b4,f#5]@5 ~ e5@3 ~ g5@2 a5@2 d5@2 e5@2 [b4,a5]@2 b4@2 e5@2 [b4,g5]@4 e5@3 ~ [b4,f#5]@5 ~ e5@3 ~ g5@2 a5@2 d5@2 e5@2 [b4,a5]@2 b4@2 e5@2 [b4,g5]@4 e5@3 ~ [b4,f#5]@5 ~ e5@3 ~ g5@2 a5@2 d5@2 e5@2 [b3,f#4,b4]@2 [b3,f#4]@2 [b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [g3,b3,f#4]@2 [g3,b3,f#4]@2 [g3,b3,f#4]@2 [g3,b3,f#4]@2 [g3,b3,f#4]@2 [a3,f#4,b4]@2 [a3,f#4,b4]@2 [a3,f#4,b4]@2, a3@61 ~@3]/8", // B7 Em B5 B7 Em B5 B7 Em …
  P: "[[a3,f#4,b4] [f#4,b4] [b3,f#4,b4]@2 [b3,f#4]@2 [b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [e3,b3,f#4]@2 [g3,b3,f#4]@2 [g3,b3,f#4]@2 [g3,b3,f#4]@2 [g3,b3,f#4]@2 [g3,b3,f#4]@2 [a3,f#4,b4]@2 [a3,f#4,b4]@2 [a3,f#4,b4]@2, ~ a3@25 ~@6]/2", // B7 B5 Esus2 Gmaj7 B7
  Q: "[[a3,f#4,b4] [f#4,b4] b4@2 b4@2 b4@2 b4@2 b4@2 b4@2 b4@2 b4@2 b4@2 b4@2 b4@2 b4@2 [a3,f#4]@4 [a3,f#4]@2, ~ a3@25 ~@6]/2", // B7 B5 D
  R: "~@2 [b3,f#4,b4]@3 ~ [b3,f#4,b4]@2 ~@2 [g3,d4,g4,d5]@3 ~ [g3,d4,g4,d5]@2, ~ a3", // B5 G5
  S: "[~@2 [d4,a4,d5]@3 ~ [d4,a4,d5]@3 ~ [a3,e4,a4]@4 e4@4 [b4,e5]@3 ~ e3@2 [g3,d4,g4,d5]@9 ~ [b3,f#4,b4]@3 ~ [b3,f#4,b4]@2 ~@2 [g3,d4,g4,d5]@3 ~ [g3,d4,g4,d5]@3 ~ [d4,a4,d5]@3 ~ [d4,a4,d5]@3 ~ [a3,e4,a4]@4 e4@4 [b4,e5]@3 ~ e3@2 [g3,d4,g4,d5]@9 ~ [b3,f#4,b4]@3 ~ [b3,f#4,b4]@2 ~@2 [g3,d4,g4,d5]@3 ~ [g3,d4,g4,d5]@2, ~@7 a4@18 ~@6 a4@17, ~@7 a3@13 a3@9 ~@2 a3@13 a3@4, ~@9 e4@20 ~@4 e4@15]/6", // D5 A5 E5 G5 B5 G5 D5 A5 …
  T: "[~@2 [d4,a4,d5]@3 ~ [d4,a4,d5]@3 ~ [a3,e4,a4]@4 e4@4 b4@3 ~ e3@2 [g3,d4,g4,d5]@5 ~ f#4@3 ~ [b3,f#4,b4]@3 ~ [b3,f#4]@2 e3@2 [g3,d4,g4,d5]@3 ~ [g3,d4,g4,d5]@2, ~@7 a4@17, ~@7 a3@8 a3@9, ~@3 e4@5]/3", // D5 A5 G5 B5 G5
  U: "[~@2 [d4,a4,d5]@3 ~ [d4,a4,d5]@3 ~ a3@4 a3@2 ~@12 b5@5 ~@11 g#5@5 ~@11 b5@5 ~@11 c#6@2 d#6@3 f#6 ~@10 b5@5 ~@11 g#5@5 ~@11 b5@4, ~@5 [e4,a4]@59, ~ a3@7]/8", // D5 A5
  V: "~@3 c#6", W: "~@2 d6@7 ~ e6@3 ~@3", X: "~ b3 f#4 b4 g4 g3 d4 d5",
  Y: "[g4@2 [d4,a4]@2 ~@2 d5@2 g4@2 ~@4 b4@2 ~@2 [e3,b3]@2 ~@2 b4@2 g3@4 d4@2 b4@2 g4@2 b3@2 f#4@2 b4@2 g4@2 g3@2 d4@2 d5@2 g4@2 d4@2 ~@2 d5@2 g4@2 ~@4 b4@3 ~ e3@2 ~@2 [g4,b4]@2 g3@4 d4@2 [g4,b4]@2 g4@2 b3@3 ~ [b4,e5]@2 g4@2 g3@3 ~ [d5,e5]@2, ~ a4@3 a4@9 a4@11, ~@5 a3@24 a3@19, ~@3 e4@2 e4@10 e4@2 e4@7]/6", // D5 E5 G E5 Dsus2
  Z: "[g4@2 d4@2 ~@2 [d5,e5]@2 g4@2 ~@4 [b4,e5]@2 g4@2 e3@2 ~@2 [b4,e5]@2 g3@4 d4@2 b4@2 g4@2 b3@2 f#4@2 [b4,e5]@2 g4@2 g3@2 d4@2 [d5,e5]@2 g4@2 d4@2 ~@2 [d5,e5]@2 g4@2 ~@4 [b4,e5]@2 g4@2 [b4,e5]@3 ~ e3@2 [g3,d4,g4]@5 ~ [d4,g4]@3 ~ [b3,f#4,b4]@3 ~ [b3,f#4,b4]@2 d4@2 [g3,d4,g4,d5]@3 ~ [d4,g4,d5]@3 ~ [a3,d4,a4,d5]@4 [a3,d4,a4,d5]@4 [a3,e4,a4]@4 ~@2 [a#3,f4]@2 [b3,f#4,b4]@3 ~ [b3,f#4,b4]@2 ~@2 [g3,d4,g4,d5]@3 ~ [g3,d4,g4]@2, ~@2 a4@24 a4@23 ~@15, ~@5 a3@24 a3@15 a3@5 ~@6 a3@5 a3@4, ~@6 e4@4 e4@20 e4@3 e4@20 ~@2 [e4,a4]@9]/8", // Dsus2 E5 Dsus2 E5 G5 B5 G5 D5 …
  AA: "[[c#4,g#4]@2 [a3,d4,a4,d5]@4 [a3,a4]@4 [a3,e4,a4]@2 [a3,e4,a4]@2 ~@2 [a#3,f4,a#4]@2 [b3,f#4,b4]@3 ~ [b3,f#4,b4]@2 ~@2 [g3,d4,g4,d5]@3 ~ [g3,d4,g4]@2 [c#4,g#4]@2 [a3,d4,a4,d5]@4 [a3,a4]@4 [a3,e4,a4]@2 [a3,e4,a4]@2 ~@2 [a#3,f4,a#4]@2 [b3,f#4,b4]@3 ~ [b3,f#4,b4]@2 ~@2 [g3,d4,g4,d5]@3 ~ [g3,d4,g4]@2 [c#4,g#4]@2 [a3,d4,a4,d5]@4 [a3,a4]@4 [a3,e4,a4]@2 [a3,e4,a4]@2 ~@2 [a#3,f4,a#4]@2 [b3,f#4,b4]@3 ~ [b3,f#4,b4]@2 ~@2 [g3,d4,g4,d5]@3 ~ [g3,d4,g4]@2 [c#4,g#4]@2 [a3,d4,a4,d5]@4 [a3,a4]@4 [a3,e4,a4]@2 [a3,e4,a4]@2 ~@2 [a#3,f4,a#4]@2 [b3,f#4,b4]@3 ~ [b3,f#4,b4]@2 ~@2 [g3,d4,g4,d5]@3 ~ [g3,d4,g4]@2, ~@3 [d4,d5] ~@3 e4@14 ~@2 e4@14 ~@2 e4@14 ~@2 [e4,a4]@9, ~@7 a4@10 ~@6 a4@10 ~@6 a4@10 ~@15, ~@7 a3@5 a3@5 ~@2 [d4,d5] ~@3 a3@5 a3@5 ~@2 [d4,d5] ~@3 a3@5 a3@5 ~@2 [d4,d5] ~@3 a3@5 a3@4]/8", // C#5 D5 A A5 A#5 B5 G5 C#5 …
  AB: "[[c#4,g#4]@2 [a3,d4,a4,d5]@4 [a3,a4]@4 [a3,e4,a4]@2 [a3,e4,a4]@2 ~@2 [a#3,f4,a#4]@2 [b3,f#4,b4]@3 ~ [b3,f#4,b4]@2 ~@2 [g3,d4,g4,d5]@3 ~ [g3,d4,g4]@2 [c#4,g#4]@2 [a3,d4,a4,d5]@4 [a3,a4]@4 [a3,e4,a4]@2 [a3,e4,a4]@2 ~@2 [a#3,f4,a#4]@2 [b3,f#4,b4]@3 ~ [b3,f#4,b4]@2 d4@2 [g3,d4,g4,d5]@3 ~ [d4,g4,d5]@3 ~ [a3,d4,a4,d5]@4 [a3,d4,a4,d5]@4 ~@4 f4@2 ~@2 [b4,e5]@2 ~@2 g3@2 [g3,d4,g4,d5]@9 ~ [f#3,c#4]@12 [f3,c4]@2 [e3,b3]@2 ~@14, ~@3 [d4,d5] ~@3 e4@14 ~@2 e4@14 e4@4 e4@16 ~@7, ~@7 a4@10 ~@6 a4@10 ~@4 a4@20 ~@7, ~@7 a3@5 a3@5 ~@2 [d4,d5] ~@3 a3@5 a3@5 ~@4 a3@5 a3@15 ~@7]/8", // C#5 D5 A A5 A#5 B5 G5 C#5 …
})).s("gm_electric_guitar_clean").gain(0.2)

// chords · electric guitar clean · "Guitar 2"
const electric_guitar_clean_2 = note("<~@72 A B@4 C@2 D E F@8 G@8 ~@2 H I J H I K L M ~@26>".pickRestart({
  A: "~@2 [g#3,d#4]@2 [g#3,d#4]@2 [g#3,d#4]@2 [b3,f#4]@5 ~ [g#3,d#4]@2", // G#5 B5 G#5
  B: "[~@2 [f#3,c#4]@2 e3@2 e3@2 ~@10 [g#3,d#4]@2 [g#3,d#4]@2 [g#3,d#4]@2 [b3,f#4]@5 ~ [g#3,d#4]@2 ~@2 [f#3,c#4]@2 e3@2 e3@2 ~@10 [g#3,d#4]@2 [g#3,d#4]@2 [g#3,d#4]@2 [b3,f#4]@5 ~ [g#3,d#4]@2, ~ [a3,e4]@4 [a3,e4]@3]/4", // F#5 G#5 B5 G#5 F#5 G#5 B5 G#5 …
  C: "[~ [f#3,c#4] e3!2 ~@5 [g#3,d#4]!3 [b3,f#4]@4, ~ [a3,e4]@3]/2", D: "~@2 [f#3,c#4]@3 ~@3 e4@6 e4@2, ~ a3",
  E: "~@2 [e3,b4,e5]@5 ~ [g3,d4]@8, ~ e4@7", // E5 G5
  F: "[~@2 [f#3,c#4]@2 e3@2 e3@2 d4@9 ~ [e3,b4,e5]@5 ~ [g3,d4]@9 ~ [f#3,c#4]@2 e3@2 e3@2 d4@9 ~ [e3,b4,e5]@5 ~ [g3,d4]@9 ~ [f#3,c#4]@2 e3@2 e3@2 d4@9 ~ [e3,b4,e5]@5 ~ [g3,d4]@9 ~ [f#3,c#4]@2 e3@2 e3@2 d4@9 ~ [e3,b3]@5 ~ [g3,d4]@8, ~ a3@4 a3@4 a3@4 a3@3, ~@9 e4@16 e4@16 e4@23]/8", // F#5 E5 G5 F#5 E5 G5 F#5 E5 …
  G: "[~@2 [f#3,c#4]@2 e3@2 e3@2 e4@10 [e3,b4,e5]@2 e3@2 e3@2 [g3,d4]@9 ~ [f#3,c#4,f#4,a#4]@2 [f#3,c#4,f#4,a#4]@2 [f#3,c#4,f#4,a#4]@2 [f#3,c#4,f#4,a#4]@2 [f#3,c#4,f#4,a#4]@2 [f#3,c#4,f#4,a#4]@2 [f#3,c#4,f#4,a#4]@2 [f#3,c#4,f#4,a#4]@2 [f#3,c#4,f#4,a4]@2 [f#3,c#4,f#4,a4]@2 [f#3,c#4,f#4,a4]@2 [f#3,c#4,f#4,a4]@2 [f#3,c#4,f#4,a4]@2 [f#3,c#4,f#4,a4]@2 [f#3,c#4,f#4,a4]@2 [f#3,c#4,f#4]@2 ~@62, ~ a3@15, ~@9 e4@55, ~ a4]/8", // F#5 E5 G5 F# F#m F#5
  H: "~@2 a5@7 ~@7", I: "~@2 f#5@7 ~ g5@2 f#5@2 ~@2", J: "~ d5 ~@6", K: "~@7 e3", L: "e3 ~@7",
  M: "[c#4,g#4] ~@5 [a3,e4,a4] ~", // C#5 A5
})).s("gm_electric_guitar_clean").gain(0.21)

// chords · distortion guitar · "Guitar 3"
const distortion_guitar = note("<~@24 A ~@2 A ~@85 B C B C D E D F G H I H J K L M N ~@3>".pickRestart({
  A: "~@2 e4@3 ~ e4@3 ~@7", B: "~@10 b4@3 ~ b4@2", C: "~@4 b4@2 b4@3 ~ b4@3 ~@3", D: "~ a4 b4 ~@2 a4 b4!2",
  E: "~@4 b4@2 b4@3 ~ c#5@2 b4@2 b4@2", F: "~@4 b4@2 b4@3 ~ c#5 b4@3 ~@2", G: "a5 ~@4 a5 b5!2",
  H: "~@4 b5@2 b5@3 c#6 b5@3 ~@3", I: "~@5 a5 b5!2", J: "~@2 a5@2 b5@2 ~@4 a5@3 ~@3", K: "~ f#5 g5!2 f#5!2 ~ d5",
  L: "~@2 e5@3 ~@5 e5@4 ~@2", M: "c#5@2 ~@3 c#5@2 b4@3 ~@6", N: "~ e5",
})).s("gm_distortion_guitar").gain(0.21)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A B C B C B C B C B C B C B D E F E F E F G H I J K I J K I J K I J L M@2 N O N O N O N O N O N O N O P Q P Q P Q P Q
  R M S T U S T U S T U S T V W V W V W V W X Y X Y X Y X Y X Y X Z AA AB ~@10 AC AD T AE T AE T AE T AE T AE T AE T AE
  T AE T AE T AE T AE T AF AG ~@2
>`.pickRestart({
  A: "~@5 b1!2 a2", B: "b2!2 g2!2 e2!4", C: "e2 a2!4 b1!2 a2", D: "e2 a2!4 b1 b2!2", E: "e2!4 g2!4",
  F: "g2 a2!4 b1 b2!2", G: "g2!4 a2!4", H: "a2!5 b2!3", I: "a2 g2!3 c#3 d3!3",
  J: "d3@2 a2@2 a2@2 a2@2 a2@2 e3@3 ~ e2@2", K: "g2!4 a2 b2!3", L: "g2!5 f#2 e2 f#2", M: "a2!8",
  N: "a2 b1!2 a2 b2!2 g2!2", O: "e2!5 a2!3", P: "a2 b1 b2!2 e2!4", Q: "g2!5 a2!3", R: "a2 b1 b2!2 g2!4",
  S: "a2 b2!3 a2 g2!3", T: "c#3 d3!4 a2!3", U: "a2@2 e3@3 ~ e2@2 g2@2 g2@2 g2@2 g2@2", V: "a2 g#2 f#2 g#2 b2!3 g#2",
  W: "g#2 f#2 e2 f#2 a2!4", X: "a2 e2!3 g2!4", Y: "g2 f#2!3 a2!4", Z: "g2 f#2!7", AA: "f#2!8", AB: "f#2 ~@7",
  AC: "~ e3 e2!2 g2!4", AD: "g2 b2!3 a2 g2!3", AE: "a#2 b2!3 a2 g2!3", AF: "a#2 e3 a2 e2 g2@4", AG: "~@2 f#2@11 ~@3",
})).s("gm_electric_bass_pick").gain(0.31)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@2 A B A C D C E F G H I J E ~@23 K L M ~@2 N O P Q R S T U L ~@24 V L V W ~@53
>`.pickRestart({
  A: "~@3 x ~ x ~@2", B: "~ x!2 ~", C: "~ x", D: "~@3 x ~ x ~ x", E: "~@8 x!3 ~@5", F: "~@2 x!2 ~ x ~ x",
  G: "~ x!2 ~ x ~@3", H: "~ x ~@2", I: "x ~ x!4 ~ x", J: "~@2 x ~@4 x", K: "x ~@2 x", L: "x!2 ~@6", M: "x ~@3 x!3 ~",
  N: "x!2 ~@4 x ~", O: "x ~ x ~ x!2 ~ x", P: "x!3 ~@9 x ~@3", Q: "x!2 ~@2", R: "~@3 x ~@4", S: "x ~ x ~@4 x",
  T: "x!2 ~@5 x", U: "~ x ~ x ~@3 x", V: "~@5 x!3", W: "x",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~@22 A B@14 ~@24 B@13 C D B@2 E A B@13 ~@11 B@27 ~@2>".pickRestart({
  A: "~@5 x ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x!3", D: "x!2 ~ x ~ x ~ x", E: "~ x ~ x ~ x ~@2",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A B ~ C D B D E ~ F G B H C ~@9 I ~@2 J ~@2 K ~@2 L ~@3 L M L N O P ~ L H N Q R Q S ~@12 T ~@2 U ~@2 T ~@59 V ~@3
>`.pickRestart({
  A: "~ x!2 ~", B: "~ x ~@6", C: "~ x ~ x ~@4", D: "~ x ~@2", E: "x!2 ~@2", F: "~@3 x ~ x ~ x", G: "~@2 x!2", H: "~ x",
  I: "~@12 x!3 ~", J: "~@13 x!2 ~", K: "~@6 x!2", L: "~@3 x", M: "~@4 x ~@2 x", N: "~@7 x", O: "x ~@2 x",
  P: "x ~@5 x!2", Q: "~ x ~@4 x ~", R: "x ~@3 x!4", S: "~@5 x!2 ~", T: "~@4 x!2 ~@10", U: "~@4 x!3 ~@9",
  V: "~@2 x!2 ~@4",
})).gain(0.72)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@7 A ~@19 B ~@2 B ~@2 B ~@7 C D ~@3 D ~ D ~@20 E ~@6 A F ~@37 G ~@13 E ~@3
>`.pickRestart({
  A: "~@3 x", B: "~@12 x!2 ~@2", C: "~ x ~@6", D: "~@5 x ~@2", E: "~@4 x!2 ~@10", F: "x", G: "~@15 x",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@24 A B ~ A C D E C F G H ~@28 I J ~ I K L I M N I O B ~@2 P Q B ~ R ~@23 M S M@2 N T U V K W X W Y W Z ~ J ~ D Q AA
  AB AC V I AD ~@2
>`.pickRestart({
  A: "~@5 x ~@2", B: "x", C: "x ~@4 x ~@2", D: "x!2 ~@6", E: "~@2 x!2 ~ x ~@2", F: "x!2 ~@5 x", G: "~@3 x ~ x ~@2",
  H: "x ~ x!2 ~ x ~@2", I: "~ x ~@2 x ~@3", J: "~ x ~@6", K: "~ x ~@2 x!2 ~@2", L: "~@6 x!2", M: "~ x ~@3 x ~@2",
  N: "x!2 ~@2 x!2 ~@2", O: "~ x ~@3 x!3", P: "~@5 x!3", Q: "x!2 ~@4 x ~", R: "~@11 x ~@2 x ~", S: "~ x ~ x ~@4",
  T: "x!2 ~@2 x ~@3", U: "x!3 ~@2 x!2 ~", V: "~ x ~ x ~ x ~ x", W: "~@3 x ~@4", X: "~@2 x ~@12 x", Y: "~ x ~@5 x",
  Z: "~ x!2 ~@2 x!2 ~", AA: "x ~@2 x", AB: "x!4 ~@4", AC: "x!2 ~ x ~ x ~@2", AD: "~ x ~@14",
})).gain(0.72)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@75 A B ~@2 C D ~@29 E ~@16 F ~@5>".pickRestart({
  A: "~@3 x!5", B: "x!2 ~@6", C: "~@4 x!4", D: "x", E: "~@5 x ~@2", F: "~ x!2 ~",
})).gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@76 A B ~@29 C D ~@5 E ~@18>".pickRestart({
  A: "~@4 x!2 ~@2", B: "~ x ~@6", C: "~ x", D: "x!2", E: "x!2 ~@6",
})).gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~@74 [~@3 x] [x!2 ~@6] ~@57>").gain(0.48)

// drums · bongos
const bongos = s("bongo:18").struct("<~@74 [~ x ~@6] ~@58>").gain(2.1)

stack(
  electric_guitar_clean, electric_guitar_clean_2, distortion_guitar, bass, kick, snare, low_tom, hihat, mid_tom,
  high_tom, crash, crash_soft, ride, tambourine, bongos
)

More by The Smashing Pumpkins