Strudelify

Broadway

Goo Goo Dolls

KeyC majorTempo136 bpm
0:00/0:00
// Broadway — Goo Goo Dolls
// 136 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 129 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(136/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
const acoustic_guitar_steel = note(`<
  A@6 B C D E F G F H I D E J A@2 K@4 L@2 A@2 M C A@2 K@4 L@2 N@4 M O P Q R S@2 B T M@2 U A@10 M C A@6 V W N@2 X Y Z@2
  AA AB AC AD P Q R S@2 B T M@2 U A@4 AE AF AG AH N@2 X Y Z@2 AA AB AI AJ AK AL AM AN@7 AO@3 ~ N@2 ~
>`.pickRestart({
  A: "[[c4,e4,g4,c5,e5]@2 [c4,e4,g4,c5,e5]@2 [c4,e4,g4,c5,e5]!3 [c4,e4,g4,c5,e5]@3 [c4,e4,g4,c5,e5]@2 [c4,e4,g4,c5,e5]!4]/2", // C
  B: "f4@2 f4!6", C: "f4!2 f4@2 f4!4", D: "a3 g4 e5 c5 g3 g4 e5 c5", E: "f3 g4 e5 c5 g4 e5 c5 g4",
  F: "c4 g4 e5 c5 g3 g4 e5 c5", G: "f3 g4 e5 c4!2 g4 e5 c5", H: "g3 g4 e5 c5 g4 e5 c5 g4",
  I: "e5 c5 g4 e5 c5 g4 [c5,e5] g4", J: "d4 a4 e5 c5 f4 g4 e5 c5",
  K: "[[c4,e4,g4,c5,e5]@2 [c4,e4,g4,c5,e5]@2 [c4,e4,g4,c5,e5]!3 ~@3 [c4,e4,g4,c5,e5]@2 [c4,e4,g4,c5,e5]!4, f4 f4, ~@7 [c4,e4,g4,c5,e5]@3 ~@6]/2", // C
  L: "[[c4,e4,f4,g4,c5,e5]@2 [c4,e4,f4,g4,c5,e5]@2 [c4,e4,f4,g4,c5,e5]!3 f4 f4!4 [c4,e4,f4,g4,c5,e5]!3 [c4,e4,g4,c5,e5], ~@7 [c4,e4,g4,c5,e5]@3 [c4,e4,g4,c5,e5]@2 ~@4]/2", // C
  M: "f4@2 f4@2 f4!4", N: "f4", O: "f4!7 ~",
  P: "[c4,e4,g4,c5,e5]@2 [c4,e4,g4,c5,e5]!2 [g3,d4,g4,c5,e5]@2 [g3,d4,g4,c5,e5] [f3,c4,f4,a4,c5,e5]", // C Fmaj7
  Q: "[f3,c4,f4,a4,c5,e5]!2 [f3,c4,f4,a4,c5,e5]@2 [f3,c4,f4,a4,c5,e5]!4", // Fmaj7
  R: "[a3,e4,g4,c5,e5]@2 [a3,e4,g4,c5,e5]@2 [g3,d4,g4,c5,e5]!4", S: "f4@2 f4!2 f4@2 f4!2", T: "f4!8", U: "f4!2",
  V: "f4@5 f4@3 ~@2 f4@3 f4@2 f4@3 f4@3 f4@3", W: "f4@2 f4@3 ~ f4@6 f4@3 f4@3 f4@3 f4@3", X: "[f3,c4,d4,g4,c5,e5]",
  Y: "~ [c4,d4,c5]@23, [f3,g4,e5]", Z: "[a3,e4,g4,c5,e5]", AA: "~ [f3,c5]@23, [c4,f4,g4,e5]", AB: "[f3,c4,f4,g4,c5,e5]",
  AC: "f4@6 f4@6 f4@3 f4@2 f4@3 ~ f4@3", AD: "f4 f4@3 f4!4", AE: "f4@2 f4@2 f4 f4@2 f4", AF: "f4 f4@2 f4!5",
  AG: "f4@6 f4@5 f4@3 ~ f4@6 f4@3", AH: "f4@2 f4@6 ~ f4@3 f4@3 ~ f4@2 f4@3 f4@3", AI: "f4@6 f4@6 f4@3 ~ f4@5 f4@3",
  AJ: "f4@3 f4@6 f4@3 f4@3 f4@3 f4@3 ~ f4@2", AK: "f4@6 f4@6 f4@3 f4@6 ~ f4@2",
  AL: "f4@3 f4@5 f4@3 f4@3 ~ f4@3 f4@3 f4@3", AM: "f4@6 f4!2",
  AN: "[f4@18 ~@5 [c4,e4,g4,c5,e5]@6 [c4,e4,g4,c5,e5]@3 [c4,e4,g4,c5,e5]@3 [g3,d4,g4,c5,e5]@6 [g3,d4,g4,c5,e5]@3 [f3,c4,f4,a4,c5,e5]@3 [f3,c4,f4,a4,c5,e5]@3 [f3,c4,f4,a4,c5,e5]@3 [f3,c4,f4,a4,c5,e5]@6 [f3,c4,f4,a4,c5,e5]@3 [f3,c4,f4,a4,c5,e5]@3 [f3,c4,f4,a4,c5,e5]@3 [f3,c4,f4,a4,c5,e5]@3 [a3,e4,g4,c5,e5]@6 [a3,e4,g4,c5,e5]@6 [g3,d4,g4,c5,e5]@3 [g3,d4,g4,c5,e5]@3 [g3,d4,g4,c5,e5]@3 [g3,d4,g4,c5,e5]@3 f4@6 f4@3 f4@3 f4@6 f4@3 f4@3 f4@6 f4@3 f4@3 f4@6 f4@3 f4@3 f4@6 f4@3 f4@3 f4@3 f4@3 f4@3 f4@3 f4]/7", // C Fmaj7 Am7 C
  AO: "[~@2 f4@3 f4@3 f4@3 f4@3 f4@3 f4@3 f4@3 f4@6 f4@6 f4@3 f4@3 f4@3 f4@3 f4@6 f4@6 f4@3 f4@3 f4@3 f4@3 ~]/3",
})).s("gm_acoustic_guitar_steel").gain(0.4)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@3 A B C D E F G ~@8 B H I J K@2 L M N O ~ P Q R S T U V W X Y@2 ~@2 Z AA ~@3 AB AC AD AE ~@3 AF AG AH AI I@2 ~ AJ I
  AK AL AM AN AO AP AQ AR ~ AS AT AU AV ~@6 AW AX ~@2 AY AZ BA BB BC AK ~ L BD BE BF BG BH BI BJ BK AU AV ~ BL BM BN BO
  BP BQ BR BS BT BU BV I@2 BW BX BY BZ CA@2 ~ CB CC@2 ~
>`.pickRestart({
  A: "~@5 b4 c5 g5", B: "g5", C: "g5 [c5,g5] ~ c5 d5 e5 d5 c5", D: "a4@2 c5 a4 d5 c5 a4 g4", E: "g4", F: "a4 g4",
  G: "f4", H: "g5 e5 ~@2 e5 f5 g5 c6", I: "c5", J: "[d5,a5] [c5,g5] ~ [f5,g5] ~ [e5,g5]!2 c6", K: "e5", L: "~@7 c5",
  M: "c6 g5!2 d5!2 c5!3", N: "[c5,g5,c6]", O: "[c5,g5,c6] ~@7", P: "~ [g4,c5] a4 f4 [c5,e5] a4 ~ g4",
  Q: "[g4,c5,g5,c6]", R: "[g4,c5,g5,c6] ~@3 d5 c5 a4 g4", S: "[c5,e5]", T: "~@5 [c5,e5] d5 c5",
  U: "[d5,f5] [e5,g5]@3 [e5,g5]@3 [f5,a5]", V: "~ [e5,g5] ~ [d5,f5] ~ c5 a4 g4", W: "~ e5 c5 ~ d5 c5!2 g4",
  X: "g4!2 g4@2 g4!4", Y: "a4", Z: "~@2 [c5,e5] ~ [c5,e5] [c5,d5] ~ [c5,d5]",
  AA: "~ [c5,d5] ~ [c5,f5] [c5,e5] [c5,f5] [c5,e5] ~", AB: "~@5 [g5,c6] [a5,d6] [g5,c6]", AC: "[g5,c6] ~",
  AD: "~ g5!2 ~ a5 g5 ~ a5", AE: "~ g5 a5 ~ a5 g5 f5 e5", AF: "~ c5 g5 c5 g5 c5!2 [d5,g5]",
  AG: "~ [c5,d5] ~ [d5,g5]!2 [e5,g5] ~@2", AH: "~ c5 g5 c5!2 g5 c5 f5", AI: "~ [c5,e5] ~ [c5,d5]!2 [c5,e5] d5 c5",
  AJ: "~@4 [d5,g5]!2 ~ g4", AK: "c5 ~", AL: "g3 a3 c4 ~ e4 g4 ~ g4", AM: "g4 a4 c5 ~@2 [e5,g5] [d5,g5] [c5,g5]",
  AN: "[c5,g5]", AO: "[c5,g5]@2 ~@3 [g4,c5] a4 g4", AP: "[c5,g5]!2", AQ: "[c5,g5] ~ [d5,f5]!3 [c5,e5] ~ [c5,e5]",
  AR: "c6", AS: "e5@2 f5@3 ~ g5@3 c6@3 e5@3 f5@6 [g5,c6]@3",
  AT: "[g5,c6]@6 [g5,d6]@3 ~@4 g5@2 [g5,c6]@6 [g5,d6]@3, ~@4 d6 ~@3", AU: "[a5,e6]", AV: "[a5,e6]@3 ~",
  AW: "d5@3 c5@2 e5@3 ~@10 d5@3 g5@3", AX: "g5@2 d5@3 a5@3 d5@3 ~ [d5,a5]@2 ~ [a5,c6]@3 ~@6, ~@11 c6@3 d5@3 ~@7",
  AY: "~@6 [e5,a5]@3 [e5,g5]@3 ~@2 e5@3 ~ d5@2 c5@3 ~", AZ: "~ f5 ~ e5 e5@3 e5, ~@2 c5@3 ~@19",
  BA: "~@6 [e5,a5]@2 ~ g5@3 ~@4 d5@3 ~@5, ~@8 e5@3 ~@4 g5@3 ~@6", BB: "~@2 f5 e5 ~ c5 a4@2, ~@14 e5@3 ~@7",
  BC: "~@3 c5@3 ~@4 c5@2 [c5,e5]@3 g4@3 a4@2 c5@3 ~, ~@2 f5@3 ~@4 f5@3 ~@12", // C
  BD: "g5@2 c5@3 ~ e5@3 c5@3 d5@3 e5@3 c5@3 f5@3", BE: "c5@3 e5@3 c5@3 d5@3 d5@2 e5@3 ~ d5@3 c5@3",
  BF: "g5@2 c5@3 e5@3 ~ c5@3 d5@2 e5@3 c5@3 ~@2 f5@2", BG: "c5@3 e5@2 c5@3 ~ d5@3 d5@3 e5@3 ~@3 f5@3",
  BH: "f5 e5 [c5,f5] ~ d5 c5 a4 g4", BI: "g4 a4 ~ [c5,f5]!2 [d5,f5] ~@2",
  BJ: "[f5,a5]@3 ~ g5@3 ~ [d5,f5]@3 ~@4 [e5,g5]@3 ~@3 [f5,a5]@3, ~ e5 ~@6", // F Dm Em F
  BK: "~@3 [g5,b5]@3 ~@3 [g5,c6]@3 [a5,d6]@2 ~ g5@3 ~@3 [g5,d6]@3, ~@14 d6@3 ~@7", BL: "g5@8 g5@3 ~ c5@5 g5@6 ~",
  BM: "g5@2 c5@2 g5 c5@2 g5", BN: "g5 c5@2 b4!2 c5 g5@2", BO: "g5@2 g5@2 g5 c5 g5 c5",
  BP: "g5@3 c5@3 g5@2 b4@3 ~@2 b4@2 c5@3 c5@6", BQ: "g5@3 ~ c5@2 c5@6 g5@3 c5@6 b5@3", BR: "b5 c6 b5 a5!2 g5 e5@2",
  BS: "[a5,c6]@5 e5@3 ~@4 [a5,c6]@3 [g5,c6]@3 e5@3 [g5,c6]@3", BT: "[g5,c6]@6 e5@3 ~@3 e5@2 d5@3 d5@3 ~ c5@3",
  BU: "g3 a3 c4 ~ e4 g4 a4 c5", BV: "c5@2 d5@3 ~ [d5,f5]@3 ~@3 [d5,f5]@2 ~ f5@3 a4@3 g4@3, ~@14 c5@3 ~@7",
  BW: "~@5 [e5,a5]@3 [e5,g5]@3 ~@3 e5@3 ~ d5@2 c5@3 ~", BX: "~@2 [c5,f5]@3 ~@3 e5@3 e5@9 e5@3 ~",
  BY: "~@5 [e5,a5]@3 [e5,g5]@3 ~@4 d5@3 ~@6, ~@14 g5@3 ~@7", BZ: "~@5 f5@3 e5@3 ~@3 [c5,e5]@3 a4@6 ~",
  CA: "[~@2 [c5,f5]@3 ~@4 c5@2 [c5,e5]@3 g4@3 a4@3 c5@3 c5@12 ~@13, ~@8 f5@3 ~@37]/2", // F5 C
  CB: "[c5,f5]@6 [c5,e5]@3 ~@3 d5@2 c5@3 ~ a4@3 g4@3", CC: "[g4,c5]",
})).s("gm_distortion_guitar").gain(0.4)

// chords · electric guitar jazz · Dm7 Fmaj7 C
const electric_guitar_jazz = note(`<
  ~@51
  [~ b4 c5 e5 b4 c5 e5 b4]
  [c5 e5 b4 c5 e5@4]
  ~@72
  [[d4,a4,c5,f5,a5] ~ [f4,c5,e5,a5,c6] ~]
  [[g5,c6,e6]]!2
  ~
>`).s("gm_electric_guitar_jazz").gain(0.19)

// drums · kick
const kick = s("bd").struct(`<
  A B C D E F G H I ~@9 J K L M N O P Q ~@4 R S T U V W X Y ~@4 Z AA AB AC ~ AD ~ AE AF AG AH AI ~ AJ ~@2 AK ~ AL AH AM
  AN ~@7 AO ~@9 AP AQ T AR AS AT AU AV AW AX AY AZ AH BA BB T ~ BC ~ AO BD ~@8 BE BF BG BH BI ~@14
>`.pickRestart({
  A: "~@2 x ~@3 x ~@5 x ~@2 x ~@2 x ~@2 x ~ x", B: "~@4 x ~@7 x ~@2 x ~@2 x ~@2 x ~@2",
  C: "~@4 x ~@6 x ~@2 x ~@2 x ~@2 x ~@3", D: "~@4 x ~@7 x ~@2 x ~@2 x ~@3 x ~", E: "~@4 x ~@6 x ~@2 x ~@3 x ~@2 x ~@2",
  F: "~@4 x ~@5 x ~@2 x ~@2 x ~@2 x ~@3 x", G: "~@6 x ~@2 x ~@2 x ~@6 x ~@4", H: "~ x ~@6 x ~@2 x ~@2 x ~@6 x ~@2",
  I: "x!2 ~@6", J: "~@4 x!4", K: "~@4 x ~@6 x ~@2 x ~@2 x ~@2 x ~@2 x", L: "~@5 x ~@6 x ~@2 x ~ x ~@2 x ~@2 x",
  M: "~@6 x ~@5 x ~@6 x ~@2 x ~", N: "~@4 x ~@2 x ~@8 x ~@2 x ~@4", O: "~@2 x ~@4 x ~@5 x ~@2 x ~@3 x ~ x ~",
  P: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@4", Q: "~ x ~@2 x ~@19", R: "~@19 x ~@2 x ~",
  S: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~ x ~@2", T: "x!5 ~@3", U: "x ~@2 x ~@2 x ~ x ~@3 x ~@2 x ~@2 x ~ x ~@3",
  V: "x ~@2 x ~ x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2", W: "~ x!3 ~ x!3", X: "~@4 x ~@2 x ~ x ~@3 x ~ x ~@3 x ~@4",
  Y: "~@7 x ~ x ~@3 x ~ x ~@2 x ~@5", Z: "~@11 x ~@5 x ~@5 x", AA: "~@4 x ~@5 x ~@4 x ~@8", AB: "~@10 x ~@8 x ~@4",
  AC: "~@9 x ~@4 x ~@2 x ~ x ~@4", AD: "~@23 x", AE: "~@13 x ~@5 x ~@4", AF: "~ x ~@4 x ~@5 x ~@2 x ~@2 x ~@2 x ~@2",
  AG: "x ~@2 x ~@2 x ~@2 x ~@3 x ~ x ~@2 x ~@2 x ~@2", AH: "x!8", AI: "x ~@2 x ~@2 x ~@2 x ~@3 x ~ x ~@8",
  AJ: "~ x ~@4", AK: "~@7 x ~@16", AL: "~@2 x!6", AM: "x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~ x ~@2 x ~@2",
  AN: "x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@7", AO: "~@2 x", AP: "~@16 x ~@2 x ~@4",
  AQ: "~ x ~@2 x ~@2 x ~@2 x ~ x ~@5 x ~@5", AR: "~@4 x ~@4 x ~@2 x ~@5 x ~@2 x ~@2",
  AS: "~@3 x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~", AT: "~ x ~@2 x ~@2 x ~@2 x ~ x ~@3 x ~@2 x ~@2 x ~",
  AU: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", AV: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x",
  AW: "~@2 x ~@2 x ~ x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x", AX: "~@2 x ~@2 x ~@4 x ~@2 x ~@4 x ~@2 x ~@2", AY: "x ~ x!6",
  AZ: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~ x ~@2", BA: "x ~ x ~ x!4", BB: "~ x ~ x!5",
  BC: "x ~@4 x ~@5 x ~@2 x ~ x ~@3 x ~@3", BD: "~@20 x ~@2 x", BE: "~@6 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@2 x",
  BF: "~@2 x ~@2 x ~@5 x ~ x ~@6 x ~@2 x", BG: "~@5 x ~@4 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  BH: "~@4 x ~@5 x ~@5 x ~@2 x ~@2 x ~", BI: "~ x ~@2 x ~@2 x ~@16",
})).gain(0.47)

// drums · rim
const rim = s("rim").struct("<~@37 [x ~@12 x ~ x ~@5 x ~@2] ~@91>").gain(0.37)

// drums · snare
const snare = s("sd").struct("<~@44 [~ x ~@2 x ~@8 x ~@10] ~@67 [~ x ~@4] ~@16>").gain(0.53)

// drums · clap
const clap = s("cp").struct("<~@69 [~ x] ~@59>").gain(0.47)

// drums · low tom
const low_tom = s("lt").struct("<~@22 A B ~@33 C D ~@8 D ~@3 E ~@10 F ~@26 G ~ H ~@17>".pickRestart({
  A: "~ x ~@11 x ~@10", B: "~@19 x ~@4", C: "~@11 x", D: "x", E: "~@5 x ~@6", F: "~@5 x ~@2", G: "~ x ~", H: "~@23 x",
})).gain(0.47)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B C ~ D@5 E F ~@6 G H I D@2 J K L M N L O P Q R S T U ~@2 V W X Y Z ~ AA AB AC ~ AD AE AF AG AH AI AE@2 AJ AK AL
  AM AN AO AP AQ O AR AS AT Q AU AV AW AX AY AZ BA BB BC BD BE BF@2 BG BH AO AE@2 BI BJ BK BL BM BI BN BO BP BQ BR BS BT
  BU BV BW ~@2 BX ~ BY ~ BZ CA CB CC CD CE CF CG CH CI ~@3
>`.pickRestart({
  A: "~@9 x ~@6 x ~@5 x ~", B: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@4", C: "~@7 x ~@4", D: "~ x ~ x",
  E: "~@2 x ~@3 x!2", F: "x!2 ~@6", G: "~@19 x ~@4", H: "~@7 x ~@11 x ~@4", I: "~@5 x ~@10 x ~@7", J: "~@3 x ~@7 x",
  K: "x ~@4 x ~@2 x ~@3", L: "x!2", M: "x ~@3 x ~@2 x", N: "~@8 x ~@2 x ~@12", O: "x", P: "~@13 x ~ x ~@2 x ~@5",
  Q: "~@23 x", R: "~@2 x ~@3 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2", S: "~ x ~ x ~ x ~@10 x ~@7", T: "x ~ x ~@2 x!2 ~",
  U: "~ x ~@4 x ~@10 x ~@6", V: "~@6 x ~@6 x ~@2 x ~@2 x ~@2 x ~", W: "~@4 x ~@2 x ~ x ~@5 x ~@2 x ~ x ~@3",
  X: "~@2 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@3", Y: "~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~@5 x", Z: "~@5 x ~@2 x ~@2 x ~@12",
  AA: "~ x!2 ~ x!3 ~", AB: "~ x ~ x ~@2 x ~@5 x ~@2 x ~@8", AC: "x ~ x ~ x!3 ~", AD: "~@3 x ~@2 x!2", AE: "~ x!3 ~ x!3",
  AF: "~@4 x ~@2 x ~@5 x ~@2 x ~@2 x ~@4", AG: "~@6 x!2", AH: "x ~ x!2 ~ x!3", AI: "~@3 x ~@2 x ~ x ~@5 x ~@3 x ~@5",
  AJ: "~@3 x ~@3 x ~@2 x ~@4 x ~@2 x ~@5", AK: "~ x ~ x ~@2 x ~@4 x ~@9 x ~@2", AL: "~@3 x!2 ~@2 x ~@4", AM: "~ x",
  AN: "x!2 ~ x ~@2 x ~", AO: "~@2 x!2 ~ x!3", AP: "~ x!3 ~@2 x!2", AQ: "~ x ~ x!2 ~ x!2", AR: "~@3 x ~@2 x!2 ~@4",
  AS: "~@9 x ~ x", AT: "~ x ~@6 x ~@15", AU: "~ x ~ x ~@4", AV: "~@4 x ~@7 x ~@2 x ~@5 x ~@2", AW: "~ x ~@2",
  AX: "~@4 x ~@2 x ~@3 x ~@5 x ~ x ~@3 x", AY: "~@2 x ~ x ~@2 x", AZ: "x ~@2 x ~@2 x ~@8 x ~@3 x ~@4",
  BA: "~ x ~@2 x ~@4 x ~@2 x ~@2 x ~@2 x ~@5", BB: "~@3 x ~@2 x ~@2 x ~@2 x ~@4 x ~@2 x ~@2 x",
  BC: "~@4 x ~@4 x ~@2 x ~@5 x ~@2 x ~@2", BD: "~@3 x ~@2 x ~@3 x ~ x ~@5 x ~@2 x ~@2",
  BE: "x ~@6 x ~ x ~@2 x ~@6 x ~@2 x ~", BF: "~ x ~@5 x ~@2 x ~@2 x ~@5 x ~@2 x ~", BG: "~@5 x ~@4 x ~@3 x ~@5 x ~@2 x",
  BH: "~@2 x ~@7 x ~@2 x ~@4 x ~@2 x ~@2", BI: "~@5 x!3", BJ: "~ x ~@2 x!4", BK: "x!3 ~ x!4",
  BL: "~@3 x ~@5 x ~@5 x ~ x ~@3 x ~@2", BM: "x ~@4 x ~@5 x ~ x ~@2 x ~@3 x ~@3", BN: "x ~@10 x ~@2 x ~@6 x ~@2",
  BO: "~ x ~ x ~ x ~@2", BP: "~ x ~@8 x ~", BQ: "x ~@4 x ~@3 x ~@2 x ~@6 x ~@2 x ~", BR: "~@3 x ~@4 x ~@10 x ~@3 x",
  BS: "~@2 x ~@4 x ~@5 x ~@2 x ~@5 x ~", BT: "~ x ~@2 x ~ x ~ x ~@7 x ~@2 x ~@2 x ~",
  BU: "~ x ~ x ~ x ~ x ~@2 x ~@4 x ~@2 x ~ x ~@3", BV: "~@4 x ~@6 x ~@12", BW: "~@12 x ~@3 x ~@2 x ~@4",
  BX: "~@10 x ~@2 x ~@2 x ~@7", BY: "~@6 x ~@2 x ~@6 x ~@5 x ~", BZ: "~@2 x ~ x ~@4 x ~@8 x ~@5",
  CA: "~@3 x ~@2 x ~@5 x ~@2 x ~@3 x ~@4", CB: "x ~ x!2 ~@3 x", CC: "x ~@15 x ~@2 x ~@3 x", CD: "~@10 x ~@2 x ~@10",
  CE: "x!2 ~ x!3 ~ x", CF: "x ~@2 x ~@5 x ~@2 x ~@2 x ~@4 x ~@3", CG: "x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x ~ x",
  CH: "~@3 x ~@4 x ~@4 x ~@5 x ~@4", CI: "~ x ~@5 x ~@4 x ~@4 x ~@6",
})).gain(0.37)

// drums · mid tom
const mid_tom = s("mt").struct("<~@35 A B ~@17 C ~@24 D ~@31 E ~ F ~@15>".pickRestart({
  A: "~ x", B: "x", C: "~ x ~@4", D: "~@23 x", E: "~@7 x ~@9 x ~@4 x ~", F: "~@2 x ~@2 x ~@6",
})).gain(0.47)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@9 A B C D@5 E F ~@6 G H I D J K L M N O M P Q R ~ S T ~@3 U V W X Y ~ Z AA AB AC AD AE AF AG AH AE@3 AI AJ AK AL T
  AE AM@2 AN AO ~ AP AQ AR AS AT ~ AU AV F AW ~ AX AY@3 AZ BA AE@3 BB BC@2 ~@2 BD BE BF BG BH BI ~@3 BJ BK BL BM ~@2 BN
  BO BP Z BQ BR BS BT BU@2 BV BW BX ~@2
>`.pickRestart({
  A: "~@11 x", B: "~@10 x ~@5 x ~@6 x", C: "~@2 x!6", D: "x!2 ~ x!3 ~ x", E: "x!2 ~ x!3 ~@2", F: "~ x ~@2",
  G: "~@8 x ~ x ~@2 x ~@8 x ~", H: "~ x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x ~", I: "~ x ~@5 x ~@2 x ~@2 x ~@5 x ~ x ~@2",
  J: "x ~@2 x ~@5 x ~@2 x ~ x ~@6 x ~@2", K: "x ~@2 x ~@5 x ~@3 x ~ x ~@3 x ~@4", L: "~@3 x ~@2 x ~@6 x ~@5 x ~ x ~@2",
  M: "~ x!3 ~ x!3", N: "~@3 x ~@2 x ~@10 x ~@5 x", O: "~@3 x ~ x ~@8 x ~@3 x ~ x ~@3",
  P: "~@3 x ~@3 x ~ x ~@3 x ~ x ~@3 x ~@4", Q: "x ~@6 x ~ x ~@11 x ~@2", R: "x ~@2 x ~@2 x ~@2 x ~@7 x ~@6",
  S: "~@7 x ~@14 x ~", T: "~ x", U: "x!2 ~@6", V: "~ x ~@10 x ~@10 x", W: "~@11 x ~@11 x", X: "~@7 x ~@4",
  Y: "~@2 x ~@10 x ~@5 x ~@4", Z: "~@3 x ~@3 x", AA: "~@3 x ~@2 x!2", AB: "~@3 x ~@5 x ~@12 x ~",
  AC: "~@11 x ~@2 x ~@9", AD: "~ x ~@3 x ~@2", AE: "x!2", AF: "x ~@4 x ~@6", AG: "~@13 x ~@2 x ~@7",
  AH: "~ x ~@2 x ~@3", AI: "x ~@3 x ~@2 x", AJ: "~@9 x ~@5 x ~ x ~@6", AK: "x ~@2 x ~@13 x ~@2 x ~@3",
  AL: "~@6 x ~ x ~@6 x ~@2 x ~@2 x ~@2", AM: "x ~@4 x ~@2", AN: "~@3 x ~@2 x ~@16 x", AO: "~@3 x ~@5 x ~@9 x ~@2 x ~",
  AP: "~@4 x ~ x ~@9 x ~@2 x ~@2 x ~", AQ: "~ x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@3",
  AR: "~ x ~@4 x ~@10 x ~ x ~@3 x", AS: "~@3 x", AT: "x ~@3 x ~@11 x ~@2 x ~@2 x ~", AU: "~@2 x!2", AV: "~@13 x ~@10",
  AW: "x", AX: "~@5 x ~@2", AY: "~ x ~@2 x ~", AZ: "~@7 x ~@9 x ~@6", BA: "~@5 x ~@18", BB: "x!3 ~", BC: "~@3 x ~@4",
  BD: "~@3 x ~ x ~@2 x ~ x ~@13", BE: "~ x!2 ~@5", BF: "~ x ~ x ~ x ~@2", BG: "~@4 x ~@2 x ~@2 x ~ x ~@11",
  BH: "~ x ~@6", BI: "x ~@2 x ~@4 x ~@3", BJ: "~@20 x ~@2 x", BK: "~ x ~@10", BL: "~@6 x ~@2 x ~@2 x ~@5 x ~ x ~@2 x",
  BM: "~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~ x ~@4", BN: "~@13 x ~@5 x ~@4", BO: "~@2 x ~@2 x ~@2 x ~@4 x ~ x ~@8",
  BP: "~@11 x ~@9 x ~@2", BQ: "~@3 x ~@12 x ~@7", BR: "~@2 x ~@2 x ~@6", BS: "~@3 x ~@3 x ~@10 x ~@5",
  BT: "~@6 x ~@12 x ~@4", BU: "~ x ~ x", BV: "~@6 x ~@4 x ~@5 x ~@4 x ~", BW: "~@2 x ~@2 x ~@4 x ~", BX: "~@6 x!2",
})).gain(0.47)

// drums · crash
const crash = s("cr").struct("<~@33 A ~@20 B ~@10 C ~@49 D ~@9 C E ~@2>".pickRestart({
  A: "~@3 x ~@4", B: "~@17 x ~@2 x ~@3", C: "~@23 x", D: "~@3 x", E: "~@5 x ~@18",
})).gain(0.53)

// drums · high tom
const high_tom = s("ht").struct("<~@65 [~@23 x] ~@61 [~ x ~@22] ~>").gain(0.47)

// drums · ride
const ride = s("rd").struct("<~@35 x ~@29 [~@23 x] ~@60 [~@11 x ~@12] ~@2>").gain(0.47)

// drums · cowbell
// … 6 more lines

More by Goo Goo Dolls