Strudelify
Zooropa cover art

1993 · Zooropa

Zooropa

U2

KeyE majorTempo93 bpm
0:00/0:00
// Zooropa — U2
// 93 bpm, 4/4, key E 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: Full arrangement: all 115 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(93/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, A@4 for four bars: edit a riff to change every repeat.

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@8 A B C D E B F G H I J K L M N O P Q R S T U V W X Y Z D E B F G AA AB AC AD AE AF AG AH AI AJ AK AL AM ~ AN@3 AO
  AN@4 AP@2 AN@4 AQ@2 AP@2 AN AR AN@8 AS@2 AN@2 AS@2 AN@6 AS@2 AN@10 AS@2 AN@2 AS@2 AN@2 ~
>`.pickRestart({
  A: "~@11 a4 b3!2 a4 g#4", B: "b3!2 g#4 f#4!2 b3 f#4 b3 f#4!3 a4 b3!2 a4 g#4",
  C: "b3!2 g#4 f#4!2 b3 f#4 b3 f#4!3 ~@3 d5 c#5", D: "d4!2 c#5 b4!2 ~ b4 d4 b4!3 d5 d4 ~ d5 c#5",
  E: "d4!2 c#5 b4!2 d4 b4 d4 b4!3 a4 b3!2 a4 g#4", F: "b3!2 g#4 f#4!2 b3 f#4 b3 f#4!3 d5 d4!2 d5 c#5",
  G: "d4!2 c#5 b4!2 d4 b4 d4 b4!3 d5 d4!2 d5 c#5", H: "d4!2 c#5 b4!2 ~ b4 d4 b4!3 [e4,g#4]!3 [e4,f#4,g#4] e4",
  I: "e4 [e4,g#4] e4 ~ e4 ~@6 [e4,f#4,g#4] e4 [e4,g#4]!2 e4", // E
  J: "[e4,g#4]!2 e4 ~@4 e4 ~ e4!2 [e4,g#4]!2 e4 [e4,f#4,g#4] e4", // E
  K: "e4 [e4,g#4] ~ e4 ~@6 e4 [e4,f#4,g#4] [e4,g#4] e4 [e4,g#4] e4", // E
  L: "e4 [e4,g#4]!2 e4 ~@4 e4 ~ [e4,g#4] [a4,c#5] a4!2 [a4,c#5]!2", // E A
  M: "[a4,c#5]!3 ~ a4 ~ a4 ~@3 a4 [a4,d5] a4!2 [a4,d5]!2", N: "a4 [a4,d5]!2 a4 ~@2 a4 ~@4 [a4,c#5]!2 a4 [a4,c#5]!2",
  O: "[a4,c#5]!4 ~@5 a4 [a4,c#5] [a4,d5] a4!2 [a4,d5] a4", P: "[a4,d5]!3 a4!6 ~ [a4,d5] [e4,g#4] g#4 [e4,g#4]!2 g#4",
  Q: "[e4,g#4]!2 g#4 ~@7 g#4 [e4,g#4] g#4 [e4,g#4]!3", R: "g#4 [e4,g#4]!2 ~@4 g#4 ~@2 [e4,g#4]!3 g#4 [e4,g#4] g#4",
  S: "g#4 [e4,g#4]!2 g#4 ~@5 g#4 [e4,g#4]!6", T: "g#4 [e4,g#4]!2 g#4 [e4,g#4] ~@2 g#4!3 e4 [a4,c#5]!2 a4 [a4,c#5]!2",
  U: "[a4,c#5]!4 a4 [a4,c#5]!6 [a4,d5] a4 [a4,d5]!3", V: "a4 [a4,d5]!4 a4 [a4,d5]!5 [a4,c#5]!5",
  W: "a4 [a4,c#5]!3 ~@3 a4 ~ a4!2 [a4,d5]!2 a4 [a4,d5]!2", X: "[a4,d5]!4 a4!2 [a4,d5]!2 a4!2 [a4,d5] a4 b3!2 a4 g#4",
  Y: "b3!2 g#4 f#4!2 ~ f#4 b3 f#4!3 a4 b3!2 a4 g#4", Z: "b3!2 g#4 f#4!2 b3 f#4 b3 f#4!3 d5 ~ d4 d5 c#5",
  AA: "d4!2 c#5 b4!2 ~ b4 d4 b4!3 [e4,g#4]!3 [e4,f#4,g#4] [e4,g#4]", // E
  AB: "[e4,g#4]!3 e4!2 ~@3 e4 ~ e4 [e4,f#4,g#4] [e4,g#4]!4", AC: "[e4,g#4]!3 ~@2 e4!6 [e4,g#4]!3 [e4,f#4,g#4] [e4,g#4]",
  AD: "[e4,g#4]!3 e4 ~ e4!2 ~@2 e4!2 [e4,f#4,g#4] [e4,g#4]!3 e4", // E
  AE: "[e4,g#4]!3 e4 g#4 e4 ~ e4!2 ~ [e4,g#4] [a4,c#5]!2 a4 [a4,c#5]!2", // E A
  AF: "[a4,c#5]!5 c#5 [a4,c#5] ~@3 a4 [a4,d5] a4 [a4,d5]!3", AG: "[a4,d5]!4 a4!3 ~ a4!2 [a4,d5] [a4,c#5]!5",
  AH: "[a4,c#5]!5 a4 [a4,c#5] a4!2 [a4,c#5]!2 [a4,d5] a4 [a4,d5]!3", AI: "[a4,d5]!5 a4!4 ~ [a4,d5] e4!5",
  AJ: "b4!2 ~ b4 ~@3 b4!2 e4!5 [b3,e4] b3", AK: "b3!3 ~ b3!3 e4!2 ~ e4 ~ e4 b4!3", AL: "b4 ~@2 b4!3 e4!5 b3!4 ~",
  AM: "b3!4 ~@12", AN: "b4@3 e5@3 b4@2 g#5@2 b4@2 e5@4", AO: "b4@3 e5@3 b4@2 ~@2 b4@2 e5@4, ~@2 g#5 ~",
  AP: "a4@3 c#5@3 a4@2 f#5@2 a4@2 d5@4", AQ: "~@3 e5@3 b4@2 g#5@2 b4@2 e5@4, b4@5 ~@11",
  AR: "b4@3 e5@3 b4@2 g#5@2 b4@2 e5@3 ~", AS: "a4@3 c#5@3 a4@2 f#5@2 a4@2 c#5@4",
})).s("gm_distortion_guitar").gain(0.17).pan(0.1)

// chords · distortion guitar · soft notes
const distortion_guitar_soft = note(`<
  ~@11 A ~@4 B C D E F G H I J K L M N O P Q R S T A ~@4 U V W X Y Z AA AB AC AD AE AF ~@63
>`.pickRestart({
  A: "~@5 d4 ~@7 d4 ~@2", B: "~@5 d4 ~@9 g#4", C: "g#4 ~ g#4 [e4,g#4] g#4 [e4,g#4]!6 ~ g#4 ~ f#4 g#4",
  D: "~@2 g#4 [e4,g#4]!4 g#4 [e4,g#4] g#4!2 ~@2 g#4 ~ g#4", E: "g#4 ~ [e4,g#4] g#4 [e4,g#4]!6 g#4 ~@2 g#4 ~ g#4",
  F: "g#4 ~@2 g#4 [e4,g#4]!4 g#4 [e4,g#4] ~@2 c#5!2 ~@2", // E
  G: "~@3 [a4,c#5] c#5 [a4,c#5] c#5 [a4,c#5]!2 c#5!2 ~ d5!2 ~@2", H: "d5 ~@2 d5 [a4,d5]!2 ~ [a4,d5]!4 ~@2 c#5 ~@2",
  I: "~@4 [a4,c#5]!5 c#5 ~@2 d5!2 ~ d5", J: "~@3 d5!6 ~@6 e4", K: "~@2 e4 [e4,g#4]!6 g#4 e4 ~ e4 ~@3",
  L: "e4 ~@2 [e4,g#4]!4 e4 [e4,g#4]!2 ~@3 e4 ~ e4", M: "e4 ~@2 e4 [e4,g#4]!5 e4 ~@6",
  N: "e4 ~@2 e4 ~ [e4,g#4]!2 e4!2 ~@4 c#5 ~@2", O: "~@4 c#5 ~@7 d5 ~@3", P: "d5 ~@4 d5 ~@10",
  Q: "c#5 ~@3 [a4,c#5]!3 c#5 [a4,c#5] c#5!2 ~@2 d5 ~@2", R: "~@4 d5!2 ~@2 d5!2 ~@6", S: "~@5 b3 ~@3 b3 ~@6",
  T: "~@9 g#4 ~@2 d4 ~@3", U: "~@5 d4 ~@10", V: "~@3 g#4!2 [e4,g#4]!3 g#4 [e4,g#4] g#4 ~@3 f#4 ~",
  W: "~@3 [e4,g#4]!2 g#4!6 ~@5", X: "~@3 g#4 [e4,g#4] g#4!2 [e4,g#4]!2 g#4!2 ~@4 g#4",
  Y: "~@3 g#4 e4 g#4 [e4,g#4] g#4!2 [e4,g#4] ~@3 c#5 ~@2", Z: "~@5 a4 ~ [a4,c#5]!2 c#5!2 ~ d5 ~@3",
  AA: "~@4 d5!2 ~ [a4,d5] d5!2 ~@6", AB: "~@5 c#5 ~ c#5!2 ~@3 d5 ~@3", AC: "~@5 d5!4 ~@7", AD: "~@2 b4 ~ b4!3 ~@9",
  AE: "~@3 b3 ~@5 e4 ~ e4 ~@4", AF: "~ b4!2 ~@12 b3",
})).s("gm_distortion_guitar").gain(0.08).pan(0.1)

// bass · fretless bass
const bass = note(`<
  ~@8 A B C@3 B D@8 E@8 F@2 G B C@3 B D@8 H@3 ~@5 I J K J L I M K N@2 J L@4 J O P L@3 J@7 N@2 L J P N L@3 J@3 P N L@3
  J@7 N@2 L J P N L@2 ~
>`.pickRestart({
  A: "~@11 b1@2 b1 ~ b1", B: "~ a1 b1 ~ b1!2 ~ f#1@2 a1@2 b1@2 b1 ~ b1",
  C: "[~ a1 b1 ~ b1 b1@2 f#1@2 a1@2 d2@2 d2 ~ d2@2 c2 d2 ~ d2 d2@2 a1@2 c2@2 d2@2 d2 ~ d2@2 c2 d2 ~ d2 d2@2 a1@2 c2@2 b1@2 b1 ~ b1]/3",
  D: "[~ a1 b1 ~ b1 b1@2 f#1@2 a1@2 d2@2 d2 ~ d2@2 c2 d2 ~ d2 d2@2 a1@2 c2@2 d2@2 d2 ~ d2@2 c2 d2 ~ d2 d2@2 a1@2 c2 ~ e2@2 e2 ~ e2@2 d2 e2 ~ e2 e2@2 b1@2 d2@2 e2@2 e2 ~ e2@2 d2 e2 ~ e2 e2@2 b1@2 d2@2 e2@2 e2 ~ e2@2 d2 e2 ~ e2 e2@2 b1@2 d2@2 e2@2 e2 ~ e2@2 d2 e2 ~ e2 e2@2 b1@2 d2@2 f#2 ~ f#2 ~ f#2@2 e2 f#2@2 f#2 f#2@2 c#2@2 e2@2 d2 ~ d2 ~ d2]/8",
  E: "[~ c2 d2 ~ d2 d2@2 a1@2 c2@2 f#2 ~ f#2 ~ f#2@2 e2 f#2@2 f#2 f#2@2 c#2@2 e2@2 d2 ~ d2 ~ d2@2 c2 d2 ~ d2 d2@2 a1@2 c2@2 e2@2 e2 ~ e2@2 d2 e2 ~ e2 e2@2 b1@2 d2@2 e2@2 e2 ~ e2@2 d2 e2 ~ e2 e2@2 b1@2 d2@2 e2@2 e2 ~ e2@2 d2 e2 ~ [d2,e2] e2@2 b1@2 d2@2 e2@2 e2 ~ e2@2 d2 e2 ~ e2 e2@2 b1@2 d2@2 f#2 ~ f#2 ~ f#2@2 e2 f#2@2 f#2 f#2@2 c#2@2 e2@2 d2 ~ d2 ~ d2]/8", // Dsus2
  F: "[~ c2 d2 ~ d2 d2@2 a1@2 c2@2 f#2 ~ f#2 ~ f#2@2 e2 f#2 ~ f#2 f#2@2 c#2@2 e2@2 d2 ~ d2 ~ d2]/2",
  G: "~ c2 d2 ~ d2!2 ~ a1@2 c2 ~ b1@2 b1 ~ b1",
  H: "[~ c2 d2 ~ d2 d2@2 a1@2 c2@2 f#2 ~ f#2 ~ f#2@2 e2 f#2@2 f#2 f#2@2 c#2@2 e2@2 d2 ~ d2 ~ d2@2 c2 d2 ~ d2 d2@2 a1@2 c2@2 ~@5]/3",
  I: "d2 e2@2 d2 e2@2 d2 e2@2 d2 e2@2 b1@3 ~", J: "d2 e2@2 d2 e2@2 d2 e2@2 d2 e2@2 b1@2 d2@2",
  K: "d2 e2@2 d2 e2@2 d2 e2@2 d2 e2@2 b1@2 e2@2", L: "d2 e2@2 d2 e2@2 d2 e2@2 d2 e2@2 b1@2 d2 ~",
  M: "d2 e2@2 d2 e2@2 d2 e2@2 d2 e2@2 ~@2 e2 ~, ~@3 b1", N: "d2 e2@2 d2 e2@2 d2 e2@2 d2 e2@2 a1@2 e2@2",
  O: "d2 e2@2 d2 e2@2 d2 e2@2 ~ e2@2 d2@2 e2@2, ~@9 a1@2 ~@5", P: "d2 e2@2 d2 e2@2 d2 e2@2 a1 e2@2 a1@2 e2@2",
})).s("gm_fretless_bass").gain(0.4)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@8 A@8 B@8 C@8 A@8 B@8 ~@6 D E F G H E H E I@2 J G H G H G I@2 H K H@8 L M H@2 L M H@6 N M H@10 L M H@2 L M H@2 ~
>`.pickRestart({
  A: "[~@11 d4@6 b4@10 d4@7 b4@8 ~ a3@7 f#4@9 a3@6 f#4@9 ~ d4@6 b4@10 d4@7 b4@8 ~ a3@7 f#4@9 [a3,d4]@5, ~@11 f#4@15 ~ f#4@15 ~ d4@15 ~ d4@15 ~ f#4@15 ~ f#4@15 ~ d4@15 ~@6]/8", // D5
  B: "[~ f#4@9 ~ [g#4,b4]@16 [e4,g#4]@15 ~ [g#4,b4]@16 [e4,g#4]@15 ~ [f#4,a4]@16 [d4,f#4]@15 ~ [f#4,a4]@16 [d4,f#4]@5]/8", // G#m E G#m E F#m D F#m D
  C: "[~@11 [g#4,b4]@16 [e4,g#4]@15 ~ [g#4,b4]@15 ~ [e4,g#4]@15 ~ [f#4,a4]@16 [d4,f#4]@15 ~ [f#4,a4]@15 [d4,f#4]@6]/8", // G#m E G#m E F#m D F#m D
  D: "g#4@3 a4@5, e4@15 ~", E: "[e4,g#4]@5 ~ [e4,f#4]@10", F: "[e4,g#4]@6 [e4,a4]@9 ~", G: "g#4@6 f#4@9 ~, e4@15 ~",
  H: "g#4@6 a4@9 ~, e4@15 ~", I: "[[f#4,a4]@31 ~]/2", J: "[e4,g#4]@6 [e4,a4]@9 ~, ~@3 g#4@3 ~@2",
  K: "g#4@3 f#4@3 ~@2, e4@3 ~", L: "[f#4,a4]", M: "[e4,a4]@15 ~", N: "[f#4,a4]@3 ~",
})).s("gm_synth_strings_1").gain(0.24).pan(0.6)

// other · percussive organ
const percussive_organ = note("<~@16 A@2 B@2 C@2 D@2 A@2 E@2 C@2 D@2 ~@8 F@2 G@2 C@2 H@2 ~@67>".pickRestart({
  A: "[~@7 b4@4 a4@3 g#4@11 ~@2 g#4@5, ~@7 a#4 ~@24]/2", B: "[~ a4@5 ~ b4@4 a4@3 g#4@9 ~@4 g#4@5, ~@7 a#4 ~@24]/2",
  C: "[~ a4@6 b4@4 c#5@4 f#4@2 a4@4 b4@6 ~@5]/2", D: "[~@9 d5@2 c#5@4 f#4@2 a4@4 b4@6 ~@5]/2",
  E: "[~ a4@6 b4@4 a4@3 g#4@10 ~@3 g#4@5, ~@7 a#4 ~@24]/2", F: "[~@7 b4@4 a4@3 g#4@11 b3@2 g#4@5, ~@7 a#4 ~@24]/2",
  G: "[~ a4@6 b4@4 a4@3 g#4@10 ~ b3@2 g#4@5, ~@7 a#4 ~@24]/2", H: "[~@9 d5@2 c#5@4 f#4@2 a4@4 b4@9 ~@2]/2",
})).s("gm_percussive_organ").gain(0.72)

// other · percussive organ · soft notes
const percussive_organ_soft = note("<~@17 A ~ A ~@5 A ~ A ~@18 B ~@68>".pickRestart({
  A: "~@9 b3 ~@6", B: "~@9 c#5 ~@6",
})).s("gm_percussive_organ").gain(0.4)

// other · percussive organ
const percussive_organ_2 = note("<~@56 A@4 B@4 C@4 B@4 C@2 D@8 E@8 D@16 E@8 F>".pickRestart({
  A: "[e4@63 ~]/4", B: "[~ f#4, e4@9 ~@7]/4", C: "e4/2", D: "[e4@127 ~]/8", E: "e6/8", F: "[e2,e3,e6]",
})).s("gm_percussive_organ").gain(0.28)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@8 A@2 B@8 C@8 D@7 E@7 F@2 G@7 ~@66>".pickRestart({
  A: "[~@11 b2 b3@14 b2 [f#3,b3]@5, ~@11 f#3@14 ~@7]/2", // B5
  B: "[~@10 [d#3,f#3] [a3,d4]@15 d3 [a3,d4]@15 [b2,d3] [f#3,b3]@15 b2 [f#3,b3]@15 [d#3,f#3] [a3,d4]@15 [d3,f#3] [a3,d4]@15 ~ [b3,e4]@21]/8", // D#m D5 Bm B5 D#m D5 D D5 …
  C: "[~@10 [b2,e3] e4@31 [f#3,a3] [c#4,f#4]@16 [d4,f#4]@15 [f#3,a3] [c#4,f#4]@15 ~ [d4,f#4]@15 b2 [b3,e4]@21, ~@10 b3@31 ~@66 e3 ~@20]/8", // E5 F#m F#5 D F#m F#5 D E5
  D: "[~@10 [b2,e3] [b3,e4]@31 [f#3,a3] [c#4,f#4]@15 ~ [d4,f#4]@15 [f#3,a3] [c#4,f#4]@15 ~ [d4,f#4]@15 ~@2 b3@4, ~@107 f#3@5]/7", // E5 F#m F#5 D F#m F#5 D
  E: "[~@10 b2 [f#3,b3]@15 [d#3,f#3] [a3,d4]@15 d3 [a3,d4]@15 [b2,d#3] [f#3,b3]@15 b2 [f#3,b3]@15 [d#3,f#3] [a3,d4]@15 [d3,f#3] [a3,d4]@5]/7", // B5 D#m D5 B B5 D#m D5 D …
  F: "[~@11 [b3,e4]@21]/2", // E5
  G: "[~@10 [b2,e3] e4@31 [f#3,a3] [c#4,f#4]@16 [d4,f#4]@15 [f#3,a3] [c#4,f#4]@15 ~ [d4,f#4]@15 ~@6, ~@10 b3@31 ~@71]/7", // E5 F#m F#5 D F#m F#5 D
})).s("gm_electric_guitar_clean").gain(0.24).pan(0.8)

// other · recorder
const recorder = note("<~@48 A B C D E@6 ~@57>".pickRestart({
  A: "~@11 d2 e2@2 e2@2, ~@14 d2 ~", B: "d2 e2@2 d2 e2@2 d2 ~ d2 e2@2 d2 e2@2 e2@2, ~@7 e2@2 ~@5 d2 ~",
  C: "d2 e2@2 d2 e2@2 d2 ~ d2 e2@2 d2 ~ d2 e2@2, ~@7 e2@2 ~@3 e2@2 ~@2",
  D: "d2 e2@2 d2 e2@2 e2@2 d2 e2@2 d2 ~ d2 e2@2, ~@6 d2 ~@5 e2@2 ~@2",
  E: "[d2 e2@2 ~ e3@2 d3 e3 ~ [d3,e3] ~ d3 e3@2 d3 e3 d3 e3@2 e3@2 d3 e3@2 d3 e3@2 d3 e3@2 e3@2 ~ d3 ~@62, ~ e6@23, ~@4 d3 ~@14 d3 ~@10 d3 ~@65]/6", // Dsus2
})).s("gm_recorder").gain(0.32)

// bass · synth bass 2
const bass_2 = note("<A@8 ~@107>".pickRestart({
  A: "[~@11 g2@4 g1@3 ~ g1@8 g2@4 g1@3 ~ g1@8 g2@4 g1@3 ~ g1@8 g2@4 g1@3 ~ g1@8 g2@4 g1@3 ~ g1@8 g2@4 g1@3 ~ g1@8 g2@4 g1@3 ~ g1@8 ~@5]/8",
})).s("gm_synth_bass_2").gain(0.11)

// other · distortion guitar
const distortion_guitar_2 = note(`<
  ~@58 A B A C A D E@2 A B A F A G H ~ I J@2 K@2 L@2 M@2 N O ~ P@2 Q ~ R S R T R T U ~ V W@2 X@2 Y Z AA AB@2 AC@2 R AD
  AE@2 ~
>`.pickRestart({
  A: "~@10 f#4@3 f#4@2 ~", B: "f#4@3 e4@3 b3@3 e4@7", C: "f#4@3 e4@3 b3@3 e4@5 ~@2",
  D: "~ f#4@2 f#4@2 ~ g#4@2 f#4@6 e4@2, ~@8 g#4 ~@7", E: "[~ g#4@2 f#4@2 ~ e4@2 b3@2 ~ e4@9 ~@12]/2",
  F: "f#4@3 e4@3 b3@4 e4@5 ~", G: "f#4@2 ~@2 g#4 ~ g#4@2 f#4@6 e4@2, ~@3 f#4@2 ~@11", H: "g#4@3 f#4@2 e4@2 ~ b3@2 e4@6",
  I: "~@5 g#5@2 ~ f#5@3 e5@5", J: "~@4 g#5@2 ~ f#5@3 e5@5 ~",
  K: "[a5@2 ~ g#5@2 ~ f#5@3 ~ g#5@3 ~ e5@5 ~ g#5@2 ~ f#5@3 ~ e5@5]/2", L: "~@2 e5 ~ g#5@2 ~ f#5@2 ~ e5@5 ~",
  M: "[a5@3 ~ g#5@2 ~@2 f#5@2 ~@2 e5@2 f#5@4 e5@2 d5@5 ~@7]/2", N: "~@10 f#5@3 ~ f#5 ~", O: "f#5@3 e5@3 b4@2 e5@7 ~",
  P: "[f#5!2 ~ f#5 ~ f#5 ~ f#5@2 e5 ~ e5@7 ~@14]/2", Q: "g#5@2 f#5 ~ e5@6 ~@6", R: "~@10 f#5@2 ~ f#5@2 ~",
  S: "f#5@2 ~ e5@2 ~ b4@3 e5@6 ~", T: "f#5@2 ~ e5@2 ~ e5@9 ~", U: "g#5@2 f#5 e5@13", V: "~@2 g#5 f#5@2 e5@3",
  W: "[~@2 e5 ~ g#5@3 f#5@3 e5@8 ~@2 g#5@2 f#5@4 e5@6]/2", X: "[a5@4 g#5@2 f#5@4 g#5@4 e5@5 ~ g#5@2 f#5@4 e5@6]/2",
  Y: "~@2 e5 ~ g#5@2 f#5@4 e5@6", Z: "~@2 e5 ~ g#5@2 f#5@4 e5@5 ~", AA: "a5@3 ~ g#5@2 f#5@3 ~ g#5@2 e5@4",
  AB: "[f#5@20 ~@6 f#5@3 ~ f#5 ~]/2", AC: "[f#5@3 e5@2 ~ e5@21 ~@5]/2", AD: "f#5@5 e5@3", AE: "[g#5@2 f#5 e5@21 ~@8]/2",
})).s("gm_distortion_guitar").gain(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@8
  [~@11 x ~ x ~@2]
  [~ x!2 ~@2 x ~@5 x ~ x ~@2]!39
  [~ x!2 ~@2 x ~@10]
  ~@5
  [x ~@2 x ~@2 x ~@2 x!2 ~@2 x!2 ~]!60
  ~
>`).gain(0.72)

// drums · snare
const snare = s("sd").struct("<~@8 A B@5 C B D B@11 E B@19 F ~@5 G@11 H G@15 I G@23 J G@8 ~>".pickRestart({
  A: "~@15 x", B: "~@7 x ~@7 x", C: "~@7 x ~ x!2 ~@4 x", D: "~@4 x ~@2 x ~@7 x", E: "~@7 x ~ x ~@5 x", F: "~@7 x ~@8",
  G: "~@4 x ~@7 x!2 ~@2", H: "~@4 x ~@7 x!4", I: "~@4 x ~@5 x ~ x!2 ~@2", J: "~@4 x ~@7 x!3 ~",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B C B C B C B C B@3 C B C B C B C B C B@3 C B C B C B C B C B@3 C@4 D ~@5 E F E F E@3 F E F E F E F E F E F E F
  E F E F E F@3 E F E F E F E F E F E F E@3 F E F E F E@12 ~
>`.pickRestart({
  A: "~@13 x ~ x", B: "~ x!3 ~ x ~ x ~ x ~ x ~ x ~ x", C: "~ x!3 ~ x ~ x ~ x ~@3 x ~ x", D: "~ x!3 ~ x ~ x ~ x ~@6",
  E: "~@2 x!2 ~ x!4 ~ x!2 ~ x!3", F: "x ~ x!2 ~ x!4 ~ x!2 ~ x!3",
})).gain(0.4)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@9 [~ x]!40 ~@5 [~ x ~@7 x ~@6]!60 ~>").gain(0.24)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@10 A ~ A ~@3 B ~@3 B ~@3 B ~@7 B ~@7 C ~@3 C ~@3 D ~@8 E ~@3 F ~@3 G ~@7 F ~@3 E ~@3 E ~@3 F ~@3 E ~@3 E ~@3 E ~@3 H
  ~ I ~ J ~ F ~ F ~ I@2 K ~
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@9 x ~@6", C: "~@7 x ~ x ~@6", D: "~@6 x!2 ~@8", E: "~@7 x", F: "~@6 x!2", G: "~@11 x!2 ~@3",
  H: "~@3 x ~@12", I: "~@3 x", J: "~@9 x!2 ~ x ~@3", K: "~@5 x!3",
})).gain(0.72)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@20 A ~@27 B ~@8 C ~@45 D ~@8 E ~@2>".pickRestart({
  A: "~@7 x ~@8", B: "~@4 x!2 ~@10", C: "~@3 x", D: "~@5 x ~@2", E: "~@7 x",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@24 A ~@7 B ~@7 B ~@3 C ~@3 D ~@8 D ~@3 E ~@3 F ~@7 G ~@3 H ~@3 I ~@3 J ~@3 K ~@3 I ~ H ~ I ~@3 I ~ L ~ M ~ J ~ D ~ D
  N O ~
>`.pickRestart({
// … 49 more lines

More by U2