Strudelify
Angel of Harlem cover art

1990 · Rattle And Hum

Angel of Harlem

U2

KeyC majorTempo106 bpm
0:00/0:00
// Angel of Harlem — U2
// 106 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 93 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): STEEL GTR.
setcpm(106/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 · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B C D A B C D A B C D A B C D A B E F G H I J A B C D A B C D A B C D A B E F G H I J A B C D K L M@2 N O P Q A B C
  D A B C D A B C D R F G H I J A B C D S@8 T@7
>`.pickRestart({
  A: "[c3,e3,g3,c4,e4]@4 [c3,e3,g3,c4,e4]@2 [c4,e4] [g3,c4,e4] [c3,f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [a2,d3,g3,c4,e4]@2, ~@5 c3@2 ~", // C F Am7
  B: "[c3,e3,g3,c4,e4]@4 [c3,e3,g3,c4,e4]@2 [d3,g3,c4,e4]!2 [c3,c4,f4]@2 [c3,c4,f4]@2 [c3,f3,c4,f4]@2 [a2,d3,g3,c4,e4]@2, ~@4 a3@3 ~, ~@2 f3 ~", // C F5 Am7
  C: "[c3,g3,c4,e4]@4 [c3,g3,c4,e4]@2 [d3,c4,e4] [d3,g3,c4,e4] [c3,a3,c4,f4]@2 [c3,a3,c4,f4]@2 [c3,f3,a3,c4,f4]@2 [a2,d3,g3,c4,e4]@2, e3@3 ~ f3@2 ~@2", // C F Am7
  D: "[c3,e3,g3,c4,e4]@4 [c3,e3,g3,c4,e4]@2 [d3,g3,c4,e4] [c3,g3,c4,e4] [c3,f3,a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2 [a2,d3,g3,c4]@2, ~@5 [c3,f3]@2 ~", // C F Am7 F5
  E: "[c3,f4]@4 [c3,f4]@3 [d3,g3,c4,f4] [c3,f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [d3,g3,c4,f4]@2, [f3,a3,c4]@7 ~@3 c3@4 ~@2", // F5 Dm7 F Dm7 F
  F: "[d3,g3,d4,g4]@4 [d3,g3,d4,g4]@3 [d3,d4,g4] [g3,b3,d4,g4]@2 [g3,d4,g4]@2 [g3,d4,g4]@2 [d3,g3,d4,g4]@2, b3@3 ~ d3@3 ~, ~@5 b3@2 ~", // G5 G G5
  G: "[d3,g3,b3,d4,g4]@4 [d3,g3,b3,d4,g4]@3 [d4,g4] [d3,b3,d4,g4]@2 [d3,b3,d4,g4]@2 [d3,g3,d4,g4]@2 [d3,g3] ~, ~@2 g3 ~", // G G5 G G5
  H: "[f3,c4,f4]@4 [f3,c4,f4]@3 [c4,f4] [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4,f4]@2 [d3,g3,c4,f4]@2, [c3,a3]@2 f4 ~, ~@5 c3@2 ~", // F5 F Dm7 F
  I: "[f3,a3,c4,f4]@3 f4 [f3,a3,c4,f4]@3 [a3,f4] [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [d3,g3,c4,f4] ~, c3@4 c3@3 ~", // F Dm F Dm7
  J: "[d3,g3,b3,d4,g4]@3 [d4,g4] g4@2 g4 [b3,d4,g4] [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [b3,d4,g4] ~, ~ d3@3, ~ [g3,b3,d4] ~@2", // G G5 G
  K: "~@4 e4 ~ e4 c4, a3@15 ~, ~ e4@3 ~@4, ~@4 c4@5 ~ c4@4 ~@2, ~@3 a4@4 ~",
  L: "~@8 d4@2 b3@2 d4@2 b3 ~, g3, ~ d4@3 ~@4, ~@4 b3@5 ~@7, ~@3 g4@4 ~",
  M: "[~@10 c4@2 a3@2 a#3 b3 ~@4 a4@2 c4 [c#4,d4,d#4,e4] [f4,c5]@2 ~@2 c5@2 f4 ~, f3@3 ~@5, ~@2 c4@7 ~@6 c4@3 c4@4 ~@10, ~@4 a3@7 ~@21, ~@3 f4@4 ~ a4@2 ~@3 f4@2 ~]/2", // F5
  N: "~ e4 ~@4 e4 c4, a3@2 a3@5 ~, ~@3 e4@3 ~@2, ~@4 c4@3 ~, ~@10 a4@5 ~",
  O: "~@4 d4 ~ d4 b3, g3@15 ~, ~ d4@3 ~@4, ~@2 b3@3 b3@2 ~, ~@3 g4@4 ~",
  P: "~@2 a3 ~@2 [a3,c4]!3, f3@5 ~@3, ~ c4@4 ~ f4@2", // Am
  Q: "[a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2 [f3,a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4] ~, ~@10 f3@5 ~", // F
  R: "f4@4 [c3,f4]@3 [d3,g3,c4,f4] [c3,f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [d3,g3,c4,f4]@2, [f3,a3,c4]@7 ~@3 c3@4 ~@2", // F5 Dm7 F Dm7 F
  S: "[[c4,e4,g4]@4 [c4,e4,g4]@2 ~ [c4,f4,a4] [c4,f4,a4]@2 [c4,f4,a#4]@2 [f4,a4] ~ [c4,e4]@2 [c4,e4,g4]@4 [c4,e4,g4] ~@2 [c4,f4,a4] [f4,a4]@2 [f4,a#4]@2 [c4,f4,a4] ~ [e4,g4]@2 [e4,g4]@4 [c4,e4,g4]@2 ~ [c4,f4,a4] [c4,f4,a4]@2 [c4,f4,a#4]@2 [c4,f4,a4]@2 [c4,e4,g4]@2 [c4,e4,g4]@4 [g3,c4,g4]@3 [f4,a4] [c4,f4,a4]@2 [c4,f4,a#4]@2 [c4,f4,a4]@2 [c4,e4,g4]@2 [c4,e4,g4]@4 [c4,e4,g4]@2 ~ [c4,f4,a4] [c4,f4,a4]@2 [c4,f4,a#4]@2 [f4,a4] ~ [c4,e4]@2 [c4,e4,g4]@4 [c4,e4,g4] ~@2 [c4,f4,a4] [f4,a4]@2 [f4,a#4]@2 [c4,f4,a4] ~ [e4,g4]@2 [e4,g4]@4 [c4,e4,g4]@2 ~ [c4,f4,a4] [c4,f4,a4]@2 [c4,f4,a#4]@2 [c4,f4,a4]@2 [c4,e4,g4]@2 [c4,e4,g4]@4 [g3,c4,g4]@3 [f4,a4] [c4,f4,a4]@2 [c4,f4,a#4]@2 [c4,f4,a4]@2 [g3,c4,e4,g4]@2, ~@14 g3@8 ~@2 c4@4 ~@2 g3@9 ~@7 g3@6 ~@10 g3@6 ~@10 g3@8 ~@8 g3@9 ~@7 g3@6 ~@12, ~@30 c4@6 ~@16 e4 ~@35 c4@4 ~@2 c4@6 ~@16 e4 ~@11]/8", // C F Fsus4 F C F A#5 F …
  T: "[[c4,e4,g4]@4 [c4,e4,g4]@2 ~ [c4,f4,a4] [c4,f4,a4]@2 [c4,f4,a#4]@2 [f4,a4] ~ [c4,e4]@2 [c4,e4,g4]@4 [c4,e4,g4] ~@2 [c4,f4,a4] [f4,a4]@2 [f4,a#4]@2 [c4,f4,a4] ~ [e4,g4]@2 [e4,g4]@4 [c4,e4,g4]@2 ~ [c4,f4,a4] [c4,f4,a4]@2 [c4,f4,a#4]@2 [c4,f4,a4]@2 [c4,e4,g4]@2 [c4,e4,g4]@4 [g3,c4,g4]@3 [f4,a4] [c4,f4,a4]@2 [c4,f4,a#4]@2 [c4,f4,a4]@2 [c4,e4,g4]@2 [e4,g4]@4 [c4,e4,g4]@2 ~ [c4,f4,a4] [c4,f4,a4]@2 [c4,f4,a#4]@2 [c4,f4,a4]@2 [c4,e4,g4]@2 [c4,e4,g4]@4 [g3,c4,g4]@3 [f4,a4] [c4,f4,a4]@2 [c4,f4,a#4]@2 [c4,f4,a4]@2 [c4,e4,g4]@2 [c4,e4,g4]@16, ~@14 g3@8 ~@2 c4@4 ~@2 g3@9 ~@7 g3@6 ~@10 g3@6 ~@10 g3@6 ~@10 g3@18, ~@30 c4@6 ~@16 e4 ~@31 e4 ~@27]/7", // C F Fsus4 F C F A#5 F …
})).s("gm_acoustic_guitar_steel").gain(0.28).pan(0.6)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@4 A B C B A B A B A D E B A F G H@2 G I H J B A B A B A B A D E B A F G H@2 G I H J B A K L M N O P Q R S T B T D T
  D T D A D T F G H@2 G I H J B J B J B J B J B J B J B J B J B U
>`.pickRestart({
  A: "c2@2 ~ e1 f1 g1 ~ a1", B: "c2@2 ~ e1 f1 g1 a1 b1", C: "c2@4 ~@2 e1@2 f1@2 g1 ~@3 a1@2",
  D: "c2@5 ~ e1@2 f1@2 g1@2 a1@2 b1@2", E: "c2@5 ~ e1@2 f1@2 g1 ~@3 a1@2", F: "c2@2 ~ e1 f1 g1 a1 c2",
  G: "f2@2 ~ a1 c2 d2 f2 ~", H: "g2@2 ~ g1 d2 e2 g2 ~", I: "f2@5 ~ a1@2 c2@2 d2@2 f2@2 ~@2",
  J: "c2@4 ~@2 e1@2 f1@2 g1@3 ~ a1@2", K: "c2@4 ~@2 e1@2 f1@2 g1@2 e1@3 ~", L: "a1@6 ~ a1", M: "g1@10 ~@2 g1 ~ g1@2",
  N: "f1@15 ~", O: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1@2 g1@2", P: "a1@6 e2 ~ g2@2 a2@2 g2@3 ~",
  Q: "g1@6 d2 ~ f2@2 g2@2 f2@2 ~@2", R: "f1", S: "f2 ~ e2 ~ d2 ~ c2 ~ b1 ~ a1 ~ g1@2 d2@2",
  T: "c2@5 ~ e1@2 f1@2 g1@2 ~@2 a1@2", U: "c2",
})).s("gm_electric_bass_finger").gain(0.49)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel_2 = note(`<
  A B ~ C A B ~ C A B ~ C A B ~ C A B D E ~ D F ~ A B ~ C A B ~ C A B ~ C A B D E ~ D F ~ A B ~ C G H I J K L M N A B ~
  C A B ~ C A B ~ C D E ~ D F ~ A B ~ C O@2 P Q O@2 P Q O@2 P Q R Q ~
>`.pickRestart({
  A: "~@6 g3 ~@9", B: "~@5 a3!2 ~", C: "~@7 e4", D: "~@4 a3@3 a3 ~@6 a2@2", E: "~@4 b3@3 b3 ~@4 b3@4",
  F: "~@7 c4 ~@6 a2@2", G: "e4@3 e4@3 ~ a3, c4@2 ~ c4@2 ~ [a3,c4] ~, ~@13 a4@2 ~",
  H: "~@3 [b3,d4] b3 ~ [b3,g4] ~, d4@3 ~@5, b3@2 ~@3 g3@3, ~ g4@11 ~@4", I: "c4@3 [a3,c4]@2 a3 c4 a3, a3 ~@7",
  J: "~ c4@2 ~@2 c4 a3@4 a3@2 a3@4, ~@3 f4@3 f4 ~",
  K: "[c4,e4]@2 ~@2 c4@2 a4@2 ~@2 c4@2 [c4,a4]@3 ~, ~@3 a3@4 ~, ~@3 c4@2 ~@3, ~@2 e4 ~", // C F
  L: "d4@6 d4@6 [b3,g4]@3 ~, b3 ~@2 b3 ~@4", M: "[a3,c4]@3 a3 [a3,c4,f4] ~@3", N: "~@3 a3 ~@7 c4 ~@3 e3",
  O: "[~@6 g3 b3 ~@6 [a2,d3]@2 ~@6 c4 [e3,g#3] ~@6 [a2,d3]@2, ~@5 e3@2 ~@5 c4@8 ~@12]/2", // D5 E D5
  P: "c3@4 ~@2 [g3,c4] g3 ~@6 [a2,d3]@2", Q: "~@6 [g3,c4] c4@3 ~@4 [a2,d3]@2", R: "~@6 [g3,c4] g3 ~@6 [a2,d3]@2",
})).s("gm_acoustic_guitar_steel").gain(0.28).pan(0.4)

// other · ocarina
const ocarina = note("<~@48 A B C@2 A B C@2 ~@37>".pickRestart({
  A: "a3@11 ~ e4@4", B: "d4@6 c4 b3", C: "[c4 b3 a3@21 ~@9]/2",
})).s("gm_ocarina").gain(0.28).pan(0.6)

// other · brass section · "BRASS 1"
const brass_section = note(`<
  ~@4 A B C D ~@9 E@2 F@2 G@3 H@6 I@2 ~ J@3 K L@2 F@2 G@3 M@4 N O P@2 N O Q@2 R S@3 T@2 ~@2 U ~ V W@2 X@2 Y@3 Z@2 C AA
  AB@2 AC@2 AB@2 AC@2 AB@2 AC@2 AD@3
>`.pickRestart({
  A: "~ c5@3", B: "~@4 c5@2 ~@2 e5@2 g5@2 a5 ~@3", C: "~ c6@3", D: "~@2 c6 ~@13", E: "[~@8 a4@2 a#4@2 a4 ~ c5@18]/2",
  F: "[d5@7 e5 g5@11 ~ g5@12, ~@8 f5 ~@23]/2", G: "[c5@4 d5@2 ~@2 f5 ~ g5@23 ~@3 g5@2 ~@10]/3",
  H: "[~@4 c5@20 e5@2 g5 ~ a5 ~ c5@20 ~@2 c5@2 ~@2 e5@2 g5 ~ d5 ~ c5@26 ~@8]/6", I: "~@2 c5 ~@2 c5 ~@2",
  J: "[~@4 c5@3 ~ e5 ~ g5 ~ a5 ~ c5@26 ~@8]/3", K: "~@4 c5 ~@5 c5@2 ~@4", L: "[~@4 c5@2 ~@2 a4@2 a#4@2 a4 ~ c5@18]/2",
  M: "[~@4 c5@20 e5@2 g5 ~ a5 ~ c5@20 ~@2 c5@2 ~@2 f4@2 g4 ~ a4 ~ c5@2]/4", N: "e5", O: "d5",
  P: "[e5@19 ~@3 d5 ~ e5@2 d5@2 c5@2 d5 ~]/2", Q: "[g5@31 ~]/2", R: "~@4 [c6,d6] ~@3 a5@2 g5@2 e5 ~ d5 ~",
  S: "[c5@3 ~ c5@2 ~ c5 e5@2 g5@2 a5 ~ c6@20 ~@2 c6@2 ~@2 e5@2 g5@2 a5 ~ c5@2]/3", T: "[~ c5@7]/2", U: "~@12 c5 ~@3",
  V: "~@6 c5 ~", W: "[~@8 e4@2 g4 ~ a4 ~ g4@17 ~]/2", X: "[g4@9 ~ g5 ~@2 g5 ~@2]/2",
  Y: "[~@4 g5@2 ~@4 g5 ~ g5@22 ~@2 g5@2 ~@10]/3",
  Z: "[~@4 c6@2 ~@2 a5@2 g5@2 e5 ~ c5@5 ~ c5@2 ~ c5 e5@2 g5 ~ a5 ~ c5@2]/2", AA: "~@2 c6 ~ g5 a5 ~@2",
  AB: "[~@4 c6@2 ~@2 a5@2 a#5@2 a5 ~ g5@4 ~@2 c6@2 ~@2 a5@2 a#5@2 a5@2 ~@2]/2",
  AC: "[~@4 c6@14 ~@2 c6@2 ~@2 a5@2 a#5@2 a5 ~ c5@2]/2", AD: "[~@4 c6@14 ~@2 c6@2 ~@2 a5@2 a#5@2 a5 ~ c5@18]/3",
})).s("gm_brass_section").gain(0.48)

// other · brass section · "BRASS 1"
const brass_section_2 = note(`<
  ~@4 A B C D ~@9 E@2 F@2 G@2 H I@6 J@2 ~ K@3 J L@2 F@2 G@2 H M@4 N O P@2 Q O R@2 S T@3 U@2 ~@2 V ~ W X@2 Y Z AA@3 AB@2
  AC@2 AD AE AF@2 AD AE AF@2 AD AE AF@2 AG@3
>`.pickRestart({
  A: "~ [c3,c4]@3", B: "~@2 [c3,c4] ~@3 [c3,c4] ~", C: "~ [c3,c4]@3, ~@4 a#3 ~@11", D: "~@2 [c3,c4] ~@13",
  E: "[~@8 f3@2 g3 ~ a3 ~ f4@18]/2", F: "[g4@15 ~]/2", G: "[c4@4 d4@3 ~ f4 ~ g4@22]/2", H: "~@2 b3 ~@5",
  I: "[~@4 c4@19 ~ e4@2 g4 ~ a4 ~ c4@19 ~@3 c4 ~@3 e4@2 g4@2 d4 ~ c4@26 ~@8]/6", J: "~@2 c4 ~@2 c4 ~@2",
  K: "[~@4 c4@2 ~@2 e4@2 g4 ~ a4 ~ c4@26 ~@8]/3", L: "[~@4 c4@2 ~@2 f3@2 g3 ~ a3 ~ f4@18]/2",
  M: "[~@4 c4@19 ~ e4@2 g4 ~ a4 ~ c4@19 ~@3 c4 ~@3 f4@2 g4@2 a4 ~ c5@2]/4", N: "a4", O: "g4",
  P: "[a4@20 ~@2 b4 ~ c5@2 b4@2 a4@2 b4 ~]/2", Q: "a4@15 ~", R: "[a4@31 ~]/2", S: "~@4 c5@2 ~@2 a4@2 g4@2 e4 ~ d4 ~",
  T: "[c4@3 ~ c4@2 ~ c4 e4@2 g4@2 a4 ~ c5@20 ~@2 c5 ~@3 e4@2 g4@2 a4 ~ c4 ~]/3", U: "[~ c4@7]/2", V: "~@12 c4 ~@3",
  W: "~@6 c4 ~", X: "[~@8 e4@2 g4 ~ a4 ~ a3@18]/2", Y: "b3", Z: "~@2 g4 ~@2 g4 ~@2",
  AA: "[~@4 a4@2 ~@4 a4 ~ a4@21 ~@3 b4@3 ~@9]/3",
  AB: "[~@4 c5@2 ~@2 a4@2 g4 ~ e4 ~ c4@4 ~@2 c4@2 ~ c4 e4@2 g4 ~ a4 ~ c4@2]/2",
  AC: "[~@4 c4@14 ~@2 c4@2 ~@2 c4 ~ c4@2 ~@4]/2", AD: "~@4 c4 ~@3 a4@2 a#4@2 a4 ~ g4@2", AE: "~@2 c4 ~ a4 a#4 a4 ~",
  AF: "[~@4 c4@14 ~@2 c4 ~@3 a4@2 a#4@2 a4 ~ c4@2]/2", AG: "[~@4 c4@14 ~@2 c4 ~@3 a4@2 a#4@2 a4 ~ c4@17 ~]/3",
})).s("gm_brass_section").gain(0.44)

// other · tenor sax
const tenor_sax = note(`<
  ~@4 A B A C ~@9 D@2 E@2 F@3 G@6 H I ~ J@3 H K@2 E@2 F@3 L@4 M N O@2 M N P@2 Q R@3 S@2 ~@2 T ~ U V@2 W X Y@3 Z@2 AA@2
  AB@2 AC@2 AB@2 AC@2 AB@2 AC@2 AD@3
>`.pickRestart({
  A: "~ c4@3", B: "~@4 c4@3 ~@5 c4@2 ~@2", C: "~@2 c4 ~@13", D: "[~@4 a4 a#4 a4 g4@9]/2", E: "[b4@15 ~]/2",
  F: "[c4@4 d4@3 ~ f4 ~ g4@23 ~@3 g4@2 ~@10]/3",
  G: "[~@4 c4@20 e4@2 g4 ~ a4 ~ c4@20 ~@2 c4@2 ~@2 e4@2 g4 ~ d4 ~ c4@26 ~@8]/6", H: "~@2 c4 ~@2 c4 ~@2",
  I: "~@4 c4 ~@5 c4@2 ~@4", J: "[~@4 c4@3 ~ e4@2 g4 ~ a4 ~ c4@26 ~@8]/3", K: "[~@2 c4 ~ a4 a#4 a4 g4@9]/2",
  L: "[~@4 c4@20 e4@2 g4 ~ a4 ~ c4@20 ~@2 c4@2 ~@2 f4@2 g4 ~ a4 ~ c5@2]/4", M: "c5", N: "b4",
  O: "[c5@20 ~@2 d5 ~ e5@2 d5@2 c5@2 d5@2]/2", P: "[c5@31 ~]/2", Q: "~@4 c5@2 ~@2 a4@2 g4@2 e4 ~ d4 ~",
  R: "[c4@3 ~ c4 ~@2 c4 e4@2 g4@2 a4 ~ c5@19 ~@3 c5@2 ~@2 e4@2 g4@2 a4 ~ c4@2]/3", S: "[~ c4@7]/2", T: "~@12 c4 ~@3",
  U: "~@6 c5 ~", V: "[~@8 e4@2 g4 ~ a4 ~ c4@18]/2", W: "d4", X: "~@2 g4 ~@2 g4 ~@2",
  Y: "[~@4 c5@2 ~@4 c5 ~ c5@21 ~@3 d5@2 ~@10]/3",
  Z: "[~@4 c5@2 ~@2 a4@2 g4 ~ e4 ~ c4@5 ~ c4@2 ~ c4 e4@2 g4 ~ a4 ~ c4@2]/2", AA: "[~@4 c5@15 ~ c5@2 ~@2 e4@2 f4 ~@5]/2",
  AB: "[~@4 c5@2 ~@2 a4@2 a#4@2 a4 ~ g4@4 ~@2 c5@2 ~@2 a4@2 a#4@2 a4@2 ~@2]/2",
  AC: "[~@4 c5@14 ~@2 c5@2 ~@2 a4@2 a#4@2 a4 ~ c4@2]/2", AD: "[~@4 c5@14 ~@2 c5@2 ~@2 a4@2 a#4@2 a4 ~ c4@18]/3",
})).s("gm_tenor_sax").gain(0.44).pan(0.3)

// other · rock organ · "ORGAN 3"
const rock_organ = note("<A@4 ~@89>".pickRestart({
  A: "[c5,c6]/4", // C
})).s("gm_rock_organ").gain(0.14).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@4 A@3 B A@9 B A@9 B A@9 B A@9 B A@7 C A@3 B A@17 B A@13 B@2>".pickRestart({
  A: "x ~@3 x!2 ~@2", B: "x", C: "x ~@4 x ~@2",
})).gain(0.49)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B@3 C B@3 D B D B@3 C B@5 D B@3 C B@5 D B@3 C B@5 D B@3 C B E B F B E G H B@3 C B@7 D B@5 D B@3 C B@5 D B@5 D B
  C ~
>`.pickRestart({
  A: "~@8 x ~ x!6", B: "~@4 x ~@2 x ~@4 x ~@3", C: "~@4 x ~@3 x ~ x!6", D: "~@4 x ~@2 x ~@4 x ~ x!2",
  E: "~@4 x ~@2 x ~ x ~@2 x ~@3", F: "~@4 x ~@2 x ~ x ~@2 x ~@2 x", G: "x", H: "~@8 x!2 ~@2 x ~@3",
})).gain(0.49)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A B C ~ A B C B A B A B C ~ A B C B C B A B C ~ A B C B C B A B C ~ A B C B C B A B C ~ A B C B A B ~@2 A B C ~ A
  B C B C B A B A B C B C B A B C ~ A B C B C B A B C B C B C ~@2
>`.pickRestart({
  A: "~ x!2 ~ x!3 ~", B: "x!5 ~ x ~", C: "x!3 ~ x!3 ~",
})).gain(0.49)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@4 A B A ~ A B A B A B A B A ~ A B A B A B A B A ~ A B A B A B A B A ~ A B A B A B A B A ~ A B A B A B ~@2 A B A ~ A
  B A B A B A B A B A B A B A B A ~ A B A B A B A B A B A B A ~@2
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@5 x ~@2",
})).gain(0.33)

// drums · low tom
const low_tom = s("lt").struct("<~@54 [~ x!7] [x!4 ~@4] ~@37>").gain(0.38)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A@3 ~ A@5 ~ A@3 ~ A@5 ~ A@3 ~ A@5 ~ A@3 ~ A@9 ~ A@6 ~@2 A@3 ~ A@7 ~ A@5 ~ A@3 ~ A@5 ~ A@7 ~@2
>`.pickRestart({
  A: "~@7 x",
})).gain(0.49)

// drums · mid tom
const mid_tom = s("mt").struct("<~@54 [~ x!7] [x!4 ~@4] ~@37>").gain(0.38)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@2 A@2 ~@3 A ~ A ~@2 A@2 ~@5 A ~@2 A@2 ~@5 A ~@2 A@2 ~@5 A ~@2 A@2 ~@3 A ~ A ~ A ~@2 A@2 ~@5 A ~ A ~@5 A ~@2
  A@2 ~@5 A ~@6 A@2
>`.pickRestart({
  A: "x",
})).gain(0.38)

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

stack(
  acoustic_guitar_steel, bass, acoustic_guitar_steel_2, ocarina, brass_section, brass_section_2, tenor_sax, rock_organ,
  kick, snare, hihat, hihat_soft, low_tom, open_hat, mid_tom, crash, tambourine
)

More by U2