Strudelify

Beautiful Day

U2

KeyD majorTempo138 bpm
0:00/0:00
// Beautiful Day — U2
// 138 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 137 bars on a 24-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 program 29.
setcpm(138/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 · electric bass finger
const bass = note(`<
  ~@32 A B C D A B C D A E F D A E F D A E F D A E F D A B C D A B C D G H C D G H C D A E F D I@4 J K L@3 K M@4 N O ~@4
  A B C D A B C D G H C D G H C D A B C D A B C D A B C D A B C D ~@9
>`.pickRestart({
  A: "~ a1@3 a1@3 a1@3 b1@3 b1@3 b1@3 d2@3 d2@2", B: "~ d2@3 g1@3 g1@3 g1@3 g1@3 g1@3 g1@3 g1@2",
  C: "~ d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 a1@3 a1@2", D: "~ a1@3 a1@3 a1@3 a1@3 a1@3 a1@3 a1@3 a1@2",
  E: "~ d2@3 g2@3 g2@3 g2@3 g2@3 g2@3 g2@3 g2@2", F: "~ d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2@2",
  G: "~ f#1@3 f#1@3 f#1@3 f#1@3 f#1@3 g1@3 g1@3 g1@2", H: "~ g1@3 g1@3 g1@3 g1@3 g1@3 g1@3 g1@3 g1@2",
  I: "[~ e2@48 d2@47]/4", J: "~ e2@23", K: "~ g1@23", L: "[~ d2@48 e2@23]/3", M: "[~ d2@48 e2@24 g1@23]/4",
  N: "~ d2@23", O: "~ a1@23",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · string ensemble 2
const string_ensemble_2 = note("<A@2 B@4 C@24 D@3 ~@15 E@2 C@4 D@3 ~@35 E@2 F@3 ~@40>".pickRestart({
  A: "[~ [a3,c#4,e4]@18 d4@9 [g3,b3,d4,g4,b4]@20, ~@19 [a3,f#4]@13 ~@16]/2", // A G D
  B: "[~@10 d5@9 [a3,e4,a4,c#5]@30 [a3,c#4,e4]@18 d4@9 [g3,b3,d4,g4,b4]@20, ~ [a3,d4,f#4,a4,e5]@18 ~@48 [a3,f#4]@13 ~@16]/4", // A G D
  C: "[~@10 d5@9 [a3,e4,a4,c#5]@30 ~@9 f#4@9 d4@9 [g3,b3,d4,g4,b4]@20, ~ [a3,d4,f#4,a4,e5]@18 ~@30 [c#4,e4,a4]@18 [f#4,a4]@13 ~@16]/4", // A G D A F#m
  D: "[~@10 d5@9 [a3,e4,a4,c#5]@30 ~@23, ~ [a3,d4,f#4,a4,e5]@18 ~@53]/3", // A D
  E: "[~@10 f#4@9 d4@9 [g3,b3,d4,g4,b4]@20, ~ [c#4,e4,a4]@18 [f#4,a4]@13 ~@16]/2", // G A F#m
  F: "[~ e5@9 d5@9 [a3,e4,a4,c#5]@30 ~@23, ~ [a3,d4,f#4,a4]@18 ~@53]/3", // A D
})).s("gm_string_ensemble_2").gain(0.1).pan(0.4)

// chords · pad halo
const pad_halo = note(`<
  ~@18 A@3 ~ A@3 ~ A@3 ~ A@3 ~@9 A@3 ~ A@3 ~ A@3 ~ A@3 ~@17 B@2 C@4 D E F@3 E F@3 G H I ~@45
>`.pickRestart({
  A: "[~@7 c#5@53 ~@12]/3", B: "[~@7 c#5@41]/2", C: "[~ [e2,e3,g3,b3,e4]@48 [d2,d3,a3,d4,f#4]@47]/4",
  D: "~ [e2,e3,g3,b3,e4]@23", E: "~ [g2,g3,b3,d4]@23", F: "[~ [d2,d3,a3,d4,f#4]@48 [e2,e3,g3,b3,e4]@23]/3",
  G: "~ [g1,g2,g3,b3,d4]@23", H: "~ [d2,d3,a3,d4,f#4]@23", I: "~ [a1,a2,a3,c#4,e4]@23",
})).s("gm_pad_halo").gain(0.07).pan(0)

// other · pad metallic
const pad_metallic = note("<~@76 A@5 B@8 C D E@2 ~@44>".pickRestart({
  A: "[~ e5@48 d5@48 b4@23]/5", B: "[~ d5@72 ~@24 d5@72 e5@23, ~@73 e5@27 ~@92]/8", C: "~ b4@23", D: "~ d5@23",
  E: "[~ a4@27 ~@20]/2",
})).s("gm_pad_metallic").gain(0.14)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@16 A@16 ~@8 A@16 ~@16 A@4 B C D E F G H I J K L M N ~ O P ~@36 Q R S@2 T U@4
>`.pickRestart({
  A: "[~ e4@3 ~@3 c#4@3 f#4@3 ~@3 d4@3 ~@6 d4@3 ~@12 g3@3 ~@9 f#3@3 ~@9 a3@3 ~@9 e4@3 e3@3 ~@12 c#4@2, ~@4 a3@7 ~@2 b3@6 d4@6 ~@3 g3@6 g3@6 ~@6 g3@8 ~ a3@9 ~@6 a3@9 ~@3 a3@9 a3@5, ~@22 a3@7 ~@2 b3@11 ~@19 f#3@6 ~@21 e4@8, ~@37 d4@5 ~ e4@6 e4@5 ~@4 d4@9 c#4@6 c#4@6 ~@6 c#4@9 ~@2]/4",
  B: "~@4 d4@3 ~@17", C: "~@13 b3@3 d4@3 b3@3 d4@2", D: "~ a3@3 d4@3 a3@3 d4@3 ~@3 d4@3 ~@3 d4@2",
  E: "~ a3@3 d4@3 ~@3 d4@3 ~@3 d4@3 ~@3 d4@2", F: "~ b3@3 ~@6 d4@3 ~@3 d4@3 ~@3 d4@2",
  G: "~@7 b3@3 ~@3 b3@3 ~@3 b3@3 d4@2", H: "~@4 d4@3 ~@3 d4@3 ~@9 d4@2", I: "~@4 d4@3 ~@3 d4@3 a3@3 ~@6 d4@2",
  J: "~ b3@3 d4@3 b3@3 ~@9 b3@3 ~@2", K: "~ b3@3 ~@20", L: "~@10 d4@3 ~@3 d4@3 ~@3 d4@2",
  M: "~@4 d4@3 ~@3 d4@3 ~@3 d4@3 a3@3 ~@2", N: "~ b3@3 ~@9 b3@3 ~@6 d4@2", O: "~@13 a3@3 d4@3 ~@5",
  P: "~ a3@3 ~@6 d4@3 ~@3 d4@3 ~@5", Q: "~ a3@3 ~@3 a3@3 ~@9 f#4@4 ~, ~ a2@15 b2@8, ~ c#4@9 d4@9 ~@5",
  R: "~@4 b3@17 ~@3, ~@3 g3@16 ~@5", S: "[~@13 a3@4 ~@2 [c#4,e4]@27 ~@2, [d3,d4]@3 ~@5, ~ f#4@15 ~@32]/2",
  T: "~ c#4@9 ~@9 f#4@4 ~, a3@4 ~@6 d4@9 ~@5, ~ a2@15 b2@7 ~", U: "[~@4 b3@69 ~@23, ~@3 g3@70 ~@23]/4",
})).s("gm_electric_guitar_clean").gain(0.35).pan(0.7)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note("<~@76 A B C D E F G H I J K L M N O P ~@37 Q@3 R S@4>".pickRestart({
  A: "~@7 b3@3 d4@3 b3@3 d4@3 b3@3 d4@2", B: "~ b3@3 d4@3 b3@3 d4@3 ~@11", C: "~@13 a3@3 ~@3 a3@3 ~@2",
  D: "~@7 a3@3 ~@3 a3@3 ~@3 a3@3 ~@2", E: "~@4 d4@3 b3@3 ~@3 b3@3 ~@3 b3@3 ~@2", F: "~ b3@3 d4@3 ~@3 d4@3 ~@3 d4@3 ~@5",
  G: "~ a3@3 ~@3 a3@3 ~@3 a3@3 d4@3 a3@3 ~@2", H: "~ a3@3 ~@3 a3@3 ~@6 d4@3 a3@3 ~@2",
  I: "~@10 d4@3 b3@3 d4@3 ~@3 d4@2", J: "~@4 d4@3 b3@3 d4@3 b3@3 d4@3 b3@3 d4@2",
  K: "~ a3@3 d4@3 a3@3 ~@3 a3@3 ~@3 a3@3 ~@2", L: "~ a3@3 ~@3 a3@3 ~@3 a3@3 ~@6 d4@2",
  M: "~@4 d4@3 b3@3 d4@3 ~@3 d4@3 b3@3 ~@2", N: "~ b3@3 d4@3 b3@3 d4@3 b3@3 d4@3 b3@3 d4@2",
  O: "~ a3@3 d4@3 a3@3 d4@3 ~@6 a3@3 d4@2", P: "~@4 d4@3 a3@3 ~@3 a3@3 ~@3 a3@3 d4@2",
  Q: "[~@2 g2@21 a3@8 ~@12 [a2,e3,a3]@27 ~@2]/3", R: "~@3 a3@2 ~@7", S: "[~@2 g2@71 ~@23]/4",
})).s("gm_electric_guitar_clean").gain(0.2).pan(0.7)

// chords · piano
const piano = note(`<
  A B C D A E C F A B C G A H C F A E C D A I C F A H C J A H C K ~@8 A L C F A L C M A H C M A H C N ~@16 A E C M ~@52
  O P@3 Q R@4
>`.pickRestart({
  A: "~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [b3,d4,f#4] ~@2 [b3,d4,f#4] ~@2 [b3,d4,f#4] ~@2 [a3,d4,f#4] ~@2 [a3,d4,f#4] ~", // A Bm D
  B: "~ [a3,d4,f#4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 d4 ~@7", // D G
  C: "~ [a3,e4,f#4] ~@2 [a3,e4,f#4] ~@2 [a3,e4,f#4] ~@2 [a3,d4,f#4] ~@2 [a3,d4,f#4] ~@2 [a3,d4,f#4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~", // F#m7 D A
  D: "~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [c#4,e4] ~@13", // A C#m
  E: "~ [a3,d4,f#4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 b3 ~@7", // D G
  F: "~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 a3 ~@13", // A
  G: "~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4] ~@13", // A
  H: "~ [a3,d4,f#4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@10", // D G
  I: "~ [a3,d4,f#4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 [b3,d4] ~@7", // D G Bm
  J: "~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,e4] ~@13", // A A5
  K: "~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 c#4 ~@13", // A
  L: "~ [a3,d4,f#4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 g3 ~@7", // D G
  M: "~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 e4 ~@13", // A
  N: "~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@13", // A
  O: "~ a3@3 ~@3 a3@3 ~@9 f#4@4 ~, ~ a2@15 b2@8, ~ c#4@9 d4@9 ~@5",
  P: "[~@4 b3@17 ~@16 a3@4 ~@2 [a2,e3,c#4,e4]@28 ~, ~ g2@11 [d3,d4]@9 ~@15, ~@3 g3@16 ~@4 a3@8 ~@41, ~@25 f#4@15 ~@32]/3", // A D
  Q: "~@6 a3@4 ~@9 f#4@4 ~, a3 ~@5, ~ a2@15 b2@7 ~, ~ c#4@9 d4@9 ~@5",
  R: "[~@4 b3@69 ~@23, ~@2 g2@71 ~@23, ~@3 g3@70 ~@23]/4",
})).s("gm_piano").gain(0.14).pan(0.7)

// chords · piano · soft notes
const piano_soft = note(`<
  ~ A ~ B ~ C ~ D ~ A ~ E ~ F ~ D ~ C ~ B ~ G ~ D ~ F ~ H ~ F ~ I ~@9 J ~ D ~ J ~ K ~ F ~ K ~ F ~ L ~@17 C ~ K ~@54 M@2
  ~@5
>`.pickRestart({
  A: "~@16 [g3,b3] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~", B: "~@10 a3 ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@4",
  C: "~@16 [g3,d4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~", // G5 G
  D: "~@10 [c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@4", // C#m A
  E: "~@10 e4 ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@4", // A
  F: "~@16 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~", G: "~@16 g3 ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~",
  H: "~@10 c#4 ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@4", // A
  I: "~@10 [a3,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@4", // A5 A
  J: "~@16 [b3,d4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~", // Bm G
  K: "~@10 [a3,c#4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@4", // A
  L: "~@13 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@4", M: "[~@19 a3@27 ~@2]/2",
})).s("gm_piano").gain(0.07).pan(0.7)

// other · synth drum
const synth_drum = note(`<
  [~@22 c1 ~]
  [~ c1 ~@2 c1 ~@5 c1 ~@2 c1 ~@2 c1 ~@5 c1 ~]!31
  ~@52
  [~ c1 ~@2 c1 ~@5 c1 ~@2 c1 ~@2 c1 ~@5 c1 ~]!8
  ~@45
>`).s("gm_synth_drum").gain(0.49)

// chords · overdriven guitar
const overdriven_guitar = note("<~@64 A B C D A B C D ~@32 A B C D A B C D ~@25>".pickRestart({
  A: "~ c#5@3 c#5@3 c#5@3 b4@3 b4@3 [a4,c#5]@3 a4@3 a4@2", B: "~ a4@3 a4@3 a4@3 ~@14", C: "~@16 d5@3 c#5@3 c#5@2",
  D: "~ c#5@3 c#5@3 c#5@3 c#5@3 c#5@3 c#5@3 c#5@3 c#5@2",
})).s("gm_overdriven_guitar").gain(0.27)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@8 A B C D E B F G E H F G A B C D E H F G A B C D I J K L I J K L A B C D E H F G A B C D E B F G I J K L I J K L M
  N O L M N O L P Q R S ~@20 I J K L I J K L M N O L M N O L I J K L I J K L I J K L I J K L ~@9
>`.pickRestart({
  A: "~ a2@2 ~ a2@2 ~ a2@2 ~ b2@2 ~ b2@2 ~ b2@2 ~ d3 ~@2 d3@2",
  B: "~ d3@2 ~ g2@2 ~ g2@2 ~ g2@2 ~ g2 ~@2 g2@2 ~ g2@2 ~ g2@2",
  C: "~ d3 ~@2 d3@2 ~ d3@2 ~ d3@2 ~ d3@2 ~ d3 ~@2 a2@2 ~ a2 ~",
  D: "~ a2@2 ~ a2@2 ~ a2 ~@2 a2@2 ~ a2 ~@2 a2@2 ~ a2@2 ~ a2 ~",
  E: "~ a2@2 ~ a2@2 ~ a2@2 ~ b2@2 ~ b2@2 ~ b2@2 ~ d3@2 ~ d3@2",
  F: "~ d3@2 ~ d3@2 ~ d3@2 ~ d3@2 ~ d3@2 ~ d3 ~@2 a2@2 ~ a2 ~",
  G: "~ a2@2 ~ a2@2 ~ a2@2 ~ a2@2 ~ a2 ~@2 a2@2 ~ a2@2 ~ a2 ~",
  H: "~ d3@2 ~ g2@2 ~ g2@2 ~ g2 ~@2 g2 ~@2 g2@2 ~ g2@2 ~ g2@2",
  I: "~ [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [b2,f#3,b3]@3 [b2,f#3,b3]@3 [b2,f#3,b3]@3 [d3,a3,d4]@3 [d3,a3,d4]@2", // A5 B5 D5
  J: "~ [d3,a3,d4]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@2", // D5 G5
  K: "~ [d3,a3,d4]@3 [d3,a3,d4]@3 [d3,a3,d4]@3 [d3,a3,d4]@3 [d3,a3,d4]@3 [d3,a3,d4]@3 [a2,e3,a3]@3 [a2,e3,a3]@2", // D5 A5
  L: "~ [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@2", // A5
  M: "~ [d3,a3,d4]@3 [d3,a3,d4]@3 [d3,a3,d4]@3 [d3,a3,d4]@3 [d3,a3,d4]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@2", // D5 G5
  N: "~ [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@2", // G5
  O: "~ [d3,a3,d4]@3 [d3,a3,d4]@3 [d3,a3,d4]@3 [d3,a3,d4]@3 [d3,a3,d4]@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@2", // D5 A5
  P: "~ [a2,c#5]@3 [a2,b4]@3 [a2,c#5]@3 [b2,b4]@3 [b2,c#5]@3 [b2,b4]@3 [d3,d5]@3 [d3,g4]@2", // A Asus2 A B Bsus2 B D G5
  Q: "~ [d3,d5]@3 [g2,g4]@3 [g2,d5]@3 [g2,g4]@3 [g2,d5]@3 [g2,g4]@3 [g2,d5]@3 [g2,g4]@2", // D G G5 G G5 G G5 G
  R: "~ [d3,d5]@3 [d3,a4]@3 [d3,d5]@3 [d3,a4]@3 [d3,d5]@3 [d3,a4]@3 [a2,c#5]@3 [a2,a4]@2", // D D5 D D5 D D5 A
  S: "~ [a2,c#5]@3 [a2,a4]@3 [a2,c#5]@3 [a2,a4]@3 [a2,c#5]@3 [a2,a4]@3 [a2,b4]@3 [a2,a4]@2", // A Asus2 A
})).s("gm_distortion_guitar").gain(0.4).pan(0.3)

// other · reed organ
const reed_organ = note("<~@72 A B C D E@2 F G E@2 G H E I G@2 E@2 G J ~@45>".pickRestart({
  A: "~ b4@3 ~@6 d5@3 b4@3 ~@6 d5@2", B: "~@4 d5@3 ~@12 b4@3 d5@2", C: "~@7 a4@3 ~@3 a4@3 d5@3 ~@3 d5@2",
  D: "~ a4@3 d5@3 ~@3 d5@3 ~@11", E: "~ b4@3 d5@3 b4@3 d5@3 b4@3 d5@3 b4@3 d5@2",
  F: "~ a4@3 d5@3 a4@3 d5@3 ~@3 d5@3 a4@3 d5@2", G: "~ a4@3 d5@3 a4@3 d5@3 a4@3 d5@3 a4@3 d5@2",
  H: "~ a4@3 d5@3 ~@3 d5@3 a4@3 ~@3 a4@3 d5@2", I: "~ b4@3 d5@3 b4@3 d5@3 b4@3 d5@3 b4@3 ~@2",
  J: "~ a4@3 d5@3 a4@3 d5@3 a4@3 d5@3 ~@3 d5@2",
})).s("gm_reed_organ").gain(0.07)

// other · reed organ · soft notes
const reed_organ_soft = note("<~@72 A B C D ~@2 E ~@4 F ~ G ~@5 H ~@45>".pickRestart({
  A: "~@4 d5@3 b4@3 ~@6 d5@3 b4@3 ~@2", B: "~ b4@3 ~@3 b4@3 d5@3 b4@3 d5@3 ~@5", C: "~ a4@3 d5@3 ~@3 d5@3 ~@6 a4@3 ~@2",
  D: "~@7 a4@3 ~@3 a4@3 d5@3 a4@3 d5@2", E: "~@13 a4@3 ~@8", F: "~@7 a4@3 ~@6 d5@3 ~@5", G: "~@11 d5",
  H: "~@19 a4@3 ~@2",
})).s("gm_reed_organ").gain(0.03)

// drums · kick
const kick = s("bd").struct(`<
  ~@32 A B A B A B A B C@16 A B A B A B A B A B A B A B A B C@4 ~@20 A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B ~@9
>`.pickRestart({
  A: "~@4 x ~@2 x ~@5 x ~@2 x ~@5 x ~", B: "~ x ~@5 x ~@2 x ~@5 x ~@5 x ~", C: "~ x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x ~",
})).gain(0.44)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A@24 B C B D B C B D A@16 B C B D B C B D B C B D B C B D A@4 ~@8 A@8 ~@3 E B C B D B C B D B C B D B C B D B C B
  D B C B D B C B D B C B D ~@9
>`.pickRestart({
  A: "~@7 x ~@11 x ~@4", B: "~ x ~@8 x ~@8 x ~@4", C: "~@4 x ~@8 x ~@5 x ~@4", D: "~@4 x ~@5 x ~@2 x ~@5 x ~@4",
  E: "~@19 x ~@4",
})).gain(0.49)

// drums · low tom
const low_tom = s("lt").struct("<~@31 [~@2 x] ~@23 [~@2 x] ~@39 [~@2 x] ~@41>").gain(0.49)

// drums · mid tom
const mid_tom = s("mt").struct("<~@31 [~@13 x!2 ~@9] ~@23 [~@13 x!2 ~@9] ~@39 [~@13 x!2 ~@9] ~@41>").gain(0.49)

// drums · open hat
// … 36 more lines

More by U2