Strudelify
KeyC majorTempo312 bpm
0:00/0:00
// Beer — Reel Big Fish
// 312 bpm, 12/4, key C 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: duplicate parts dropped: ch 2 "Electric Guitar" electric guitar muted (copy of ch 1 "Electric Guitar" electric guitar clean)
// note: Full arrangement: all 91 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): Distortion.
setcpm(312/12)

// 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 · "Electric Guitar"
const electric_guitar_clean = note(`<
  A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B ~@8 A B A B A B A C D E F G H@2 I J K L M N ~@15 O P Q P Q
  P Q R S@4
>`.pickRestart({
  A: "[c4,e4,a4]@2 [c4,e4,a4] ~@2 [c4,e4,a4] ~@2 [c4,e4,a4] ~@2 [c4,e4,a4] [a3,c4,f4]@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4]", // Am F
  B: "[g3,c4,e4]@2 [g3,c4,e4] ~@2 [g3,c4,e4] ~@2 [g3,c4,e4] ~@2 [g3,c4,e4] [b3,d4,g4]@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4]", // C G
  C: "[g3,c4,e4]@2 ~ [g3,c4,e4] ~@2 [g3,c4,e4] ~@2 [g3,c4,e4] ~@2 [g3,c4,e4] [b3,d4,g4]@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2", // C G
  D: "[b3,d4,g4] ~@4 [a3,c4,e4]@2 ~@4 [a3,c4,e4] ~@5 [a3,c4,f4]@2 ~@5", // G Am F
  E: "[a3,c4,f4] ~@5 [g3,c4,e4]@2 ~@4 [g3,c4,e4] ~@11", F: "~@7 [a3,c4,e4]@2 ~@5 [a3,c4,e4] ~@5 [a3,c4,f4]@2 ~@2",
  G: "~@2 [a3,c4,f4] ~@6 [g3,c4,e4]@2 ~@4 [g3,c4,e4] ~@8", // F C
  H: "[~@10 [a3,c4,e4]@2 ~@4 [a3,c4,e4] ~@6 [a3,c4,f4]@2 ~@4 [a3,c4,f4] ~@5 [g3,c4,e4]@2 ~@4 [g3,c4,e4] ~@6]/2", // Am F C
  I: "~@12 [a3,c4,e4]@2 ~@5 [a3,c4,e4] ~@4", J: "~ [a3,c4,f4]@2 ~@4 [a3,c4,f4] ~@6 [g3,c4,e4]@2 ~@4 [g3,c4,e4] ~@3",
  K: "~@2 [b3,d4,g4]@2 ~ [b3,d4,g4] ~@3 [b3,d4,g4]@2 [b3,d4,g4] ~@3 [a3,c4,e4]@2 ~@4 [a3,c4,e4] ~@2", // G Am
  L: "~@4 [a3,c4,f4]@2 ~@4 [a3,c4,f4] ~@5 [g3,c4,e4]@2 ~@5 [g3,c4,e4]", // F C
  M: "~@5 [b3,d4,g4]@2 [b3,d4,g4] ~@3 [b3,d4,g4]@2 [b3,d4,g4] ~@4 [a3,c4,e4]@2 ~@4", // G Am
  N: "[a3,c4,e4] ~@5 [a3,c4,f4]@2 ~@5 [a3,c4,f4] ~@10", // Am F
  O: "~@4 [c4,e4,a4]@2 [c4,e4,a4] ~@2 [c4,e4,a4] ~@2 [c4,e4,a4] ~@2 [c4,e4,a4] [a3,c4,f4]@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2", // Am F
  P: "[a3,c4,f4] ~@2 [a3,c4,f4] [g3,c4,e4]@2 [g3,c4,e4] ~@2 [g3,c4,e4] ~@2 [g3,c4,e4] ~@2 [g3,c4,e4] [b3,d4,g4]@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2", // F C G
  Q: "[b3,d4,g4] ~@2 [b3,d4,g4] [c4,e4,a4]@2 [c4,e4,a4] ~@2 [c4,e4,a4] ~@2 [c4,e4,a4] ~@2 [c4,e4,a4] [a3,c4,f4]@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2", // G Am F
  R: "[a3,c4,f4] ~@2 [a3,c4,f4] [g3,c4,e4]@2 [g3,c4,e4] ~@2 [g3,c4,e4] ~@2 [g3,c4,e4] ~@2 [g3,c4,e4] ~ [b3,d4,g4]@2 [b3,d4,g4] ~@3 [b3,d4,g4]", // F C G
  S: "[~ [b3,d4,g4]@4 [a3,c4,e4]@26 ~]/4", // G Am
})).s("gm_electric_guitar_clean").gain(0.41)

// chords · overdriven guitar · "Lead Guitar"
const overdriven_guitar = note(`<
  ~@4 A B C@2 ~@7 D E F E F E F E F A B C@2 ~@7 D E F E F E F E F G@2 H I J K L M@2 N O P@2 ~@6 Q R@8 S@8 T@2 U@2 V W
  X@2 ~@3
>`.pickRestart({
  A: "a4@3 a4@3 a4@2 e4@3 a4@9 a4 c5@2 d5", B: "e5@3 e5@3 d5@2 c5@3 d5@13",
  C: "[a4@2 c4 e4@2 c4 e4@2 d4 c4@2 d4@7 a3@2 c4 e4@2 d#4@7 e4@2 d4@3 d4@3 c4 a3@9]/2", D: "[c3,g3,c4] [g2,d3,g3]",
  E: "[f2,a2,c3,f3] [c3,e3,g3,c4]", F: "[g2,b2,d3,g3]",
  G: "[a4@3 a4@3 a4@2 e4 g4@3 d#4@2 d4@3 c4@3 a3@3 a3@6 ~@7 a3@5 ~@7]/2", H: "a2@5 a3@7 a2@5 a3@7",
  I: "f4@6 d4@2 c4@3 a3@10 ~@3", J: "e3@5 a3@7 f3@5 a3@7", K: "f5@6 e5@2 c5 a4@13 ~@2",
  L: "a5 e5 a5 e5 a5 e5 [e5,a5] ~@5 c6 g5 c6 g5 c6 g5 [g5,c6] ~@5", M: "[d6 ~ g5 d6 g5 d6 g5 [g5,d6] ~@5 g4@13 ~@22]/2",
  N: "~@5 e4@3", O: "~ d4@2 ~ a3@9 ~@11, ~@3 c4@2 ~@19",
  P: "[~@18 f3@2 ~ a3@2 ~ c4@2 d4@2 c4@9 ~@11, ~@20 g3@2 ~ g3@2 ~@23]/2", Q: "~@2 [c3,g3,c4]",
  R: "[~@4 g5@3 [f2,a2,c3,f3]@3 [c3,e3,g3,c4]@3 [g2,b2,d3,g3]@6 [f2,a2,c3,f3]@3 [c3,e3,g3,c4]@3 [g2,b2,d3,g3]@6 [f2,a2,c3,f3]@3 [c3,e3,g3,c4]@3 [g2,b2,d3,g3]@6 [f2,a2,c3,f3]@3 [c3,e3,g3,c4]@2, ~ [g2,d3,g3]@6 ~@41]/8", // F C G F C G F C …
  S: "[~@4 [g2,b2,d3,g3]@24 [a2,e3,a3]@12 [f2,c3,f3]@12 [c3,g3,c4]@12 [g2,d3,g3]@12 [a2,e3,a3]@12 [f2,c3,f3]@12 [c3,g3,c4]@12 [g2,d3,g3]@12 [a2,e3,a3]@12 [f2,c3,f3]@12 [c3,g3,c4]@12 [g2,d3,g3]@12 a4@3 a4@3 a4@2 e4@3 a4@9]/8", // G A5 F5 C5 G5 A5 F5 C5 …
  T: "[a4 c5@2 d5 e5@3 e5@3 d5@2 c5@3 d5@13 a4@2 c4 e4@2 c4 e4@2 d4 c4@2 d4@7 a3@2]/2",
  U: "[c4 e4@2 d#4@7 e4@2 d4@3 d4@3 c4 a3@9 a4 ~ a3 a4 ~ a3 [a3,a4] ~ [a3,a4]@4 f4 ~ f3 f4 ~ f3 [f3,f4] ~]/2", // A F
  V: "[f3,f4]@4 c5 ~ c4 c5@2 c4 [c4,c5]@2 [c4,c5]@4 g4 ~ g3 g4 ~ g3 [g3,g4] ~", // F C G
  W: "[g3,g4]@4 a4 ~ a3 a4 ~ a3 [a3,a4] ~ [a3,a4]@4 f4 ~ f3 f4 ~ f3 [f3,f4] ~", // G A F
  X: "[[f3,f4]@4 c5@2 ~ c5@2 c4 [c4,c5]@2 c5@5 [g3,d4,g4]@22 ~@9, ~@3 c4 ~@2 c4 ~@17]/2", // F C G5
})).s("gm_overdriven_guitar").gain(0.41)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@2 A B C D C D C D C D C D C E F G F G F G F G C D C D C D C D C D C E F G F G F G F G C D C D C D C H I J@4 K@2 L@2
  M@2 N@8 O@3 P Q P Q P Q P Q P Q P Q R S@4
>`.pickRestart({
  A: "a2 ~@2 a2 f2 ~@2 d3", B: "c3@3 ~@19 e2 [a1,c2], ~@3 a2", C: "a2 c3 e3 a2 f2 a2 c3 f2",
  D: "c3 d3 e3 g3 g2 a2 b2 d3", E: "c3 g2", F: "f2 c3", G: "g2!2", H: "c3@3 ~ d3@3 e3@3 g3@3 g2@3 a2@3 b2@3 d3@2",
  I: "~@2 a2@3 ~@2 c3 e3@3 c3@3 ~@2 f2@2 ~ f2 c3@3 ~",
  J: "[f2@3 c3@3 ~@2 d3 e3@3 g3@3 ~@7 g2@6 a2@3 ~@2 c3 e3@3 ~ c3@3 ~@2 f2@2 ~ f2 c3@3 f2@3 c3@3 ~@3 c3 c3@3 d3@3 g2@13 a2@3 ~@2 a2 c3@3 a2@3 ~@2 f2@2 ~]/4",
  K: "[~ f2 c3@3 f2@3 c3@4 ~ c3 c3@3 d3@3 ~@3 d3@2 c3 ~ a2@3 g2@3 a2@3 ~@3 c3 e3@3 c3@3 ~@2]/2",
  L: "[f2@2 ~ f2 c3@3 f2@3 ~ c3@4 ~ c3 c3@3 c3@3 g2@13 a2@3 ~@2 c3 e3@3 c3@3]/2",
  M: "[~@3 f2@2 ~ f2 c3@3 f2@3 c3@4 ~ c3 ~ c3@3 c3@3 g2@12 a2@3 ~@3 c3 e3@3]/2",
  N: "[c3@3 ~@2 f2@2 ~ f2 c3@3 ~ f2@3 c3@12 g2@24 f2@12 c3@12 g2@12 g2@12 f2@12 c3@12 g2@12 g2@12 f2@12 c3@12 g2@12 g2@8]/8",
  O: "[~@4 f2@12 c3@12 g2@12 g2@12 a2@3 c3@3 e3@3 a2@3 f2@3 a2@3 c3@2]/3",
  P: "~ f2@3 c3@3 d3@3 e3@3 g3@3 g2@3 a2@3 b2@2", Q: "~ d3@3 a2@3 c3@3 e3@3 a2@3 f2@3 a2@3 c3@2",
  R: "~ f2@3 c3@3 d3@3 e3@3 g3@3 ~ g2@3 a2@4", S: "[b2@5 d3@10 a2@78 ~@3]/4",
})).s("gm_electric_bass_finger").gain(0.31)

// chords · trombone · "Brass"
const trombone = note("<~@16 A B A C A B A C ~@12 A B A C A B A C ~@21 D E F G@2 E F H@2 ~@17>".pickRestart({
  A: "~@5 [a3,c4] ~@2 [a3,c4]@4 ~@5 [g3,c4] ~@2 [g3,c4]@4", B: "~@5 [g3,d4] ~@2 [g3,d4]@4 ~@5 [g3,d4] ~@2 [g3,d4]@4",
  C: "~@5 [g3,d4] ~@2 [g3,d4]@4 [g3,d4]@12", D: "~@9 [a3,c4] ~@2 [a3,c4]@4 ~@5 [g3,c4] ~@2",
  E: "[g3,c4]@4 ~@5 [g3,d4] ~@2 [g3,d4]@4 ~@5 [g3,d4] ~@2", F: "[g3,d4]@4 ~@5 [a3,c4] ~@2 [a3,c4]@4 ~@5 [g3,c4] ~@2",
  G: "[[g3,c4]@4 ~@5 [g3,d4] ~@2 [g3,d4]@4 [g3,d4]@12 ~@5 [a3,c4] ~@2 [a3,c4]@4 ~@5 [g3,c4] ~@2]/2", // C5 G5 Am C5
  H: "[[g3,c4]@4 ~@5 [g3,d4] ~@2 [g3,d4]@4 [g3,d4]@12 ~@20]/2", // C5 G5
})).s("gm_trombone").gain(0.5)

// chords · trumpet · "Brass"
const trumpet = note("<~@16 A B A C A B A C ~@12 A B A C A B A C ~@21 D E F G@2 E F H@2 ~@17>".pickRestart({
  A: "~@5 [c4,f4] ~@2 [c4,f4]@4 ~@5 [c4,e4] ~@2 [c4,e4]@4", B: "~@5 [d4,g4] ~@2 [d4,g4]@4 ~@5 [d4,g4] ~@2 [d4,g4]@4",
  C: "~@5 [d4,g4] ~@2 [d4,g4]@4 [d4,g4]@12", D: "~@9 [c4,f4] ~@2 [c4,f4]@4 ~@5 [c4,e4] ~@2",
  E: "[c4,e4]@4 ~@5 [d4,g4] ~@2 [d4,g4]@4 ~@5 [d4,g4] ~@2", F: "[d4,g4]@4 ~@5 [c4,f4] ~@2 [c4,f4]@4 ~@5 [c4,e4] ~@2",
  G: "[[c4,e4]@4 ~@5 [d4,g4] ~@2 [d4,g4]@4 [d4,g4]@12 ~@5 [c4,f4] ~@2 [c4,f4]@4 ~@5 [c4,e4] ~@2]/2", // C G5 F5 C
  H: "[[c4,e4]@4 ~@5 [d4,g4] ~@2 [d4,g4]@4 [d4,g4]@12 ~@20]/2", // C G5
})).s("gm_trumpet").gain(0.5)

// drums · rim
const rim = s("rim").struct("<~@2 [~ x ~ x ~ x ~ x] [~ x ~ x ~@4] ~@87>").gain(0.41)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@19 A ~@19 A ~@29 B ~@4 C ~@2 B ~@13>".pickRestart({
  A: "~@21 x!3", B: "~ x!3 ~@20", C: "~@11 x",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<~@28 A@7 ~@17 B C D E F G H I J K L M ~@27>".pickRestart({
  A: "x!8", B: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3", C: "x!5 ~@3", D: "~@7 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x",
  E: "~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@8", F: "~@7 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x",
  G: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@6", H: "~@12 x ~@3 x ~@2 x ~@2 x ~",
  I: "~ x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@3", J: "~@4 x!4", K: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x",
  L: "~@14 x ~@3 x ~@2 x ~@2", M: "x ~@2 x ~@2 x ~@2 x ~@3 x ~@10",
})).gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 A ~@19 A ~@13 B ~ C D ~@12 D ~@7 D ~@13>".pickRestart({
  A: "~@5 x", B: "~@15 x ~ x!2 ~@3 x!2", C: "~@18 x ~ x!2 ~ x", D: "x",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A@3 B ~@8 C ~ C D C ~ C ~ A@3 B ~@8 C ~ C D C ~ C ~ A@7 E ~@5 F G H I ~ J K L M L M N M L M L O P O Q O Q O R@6 S
  ~@4
>`.pickRestart({
  A: "x!8", B: "x!6 ~@2", C: "~ x!3 ~ x!3", D: "~ x!3 ~ x ~@2", E: "x ~@3 x ~@2 x ~@2 x ~@13", F: "~@7 x", G: "x",
  H: "~@23 x", I: "~@2 x ~@3 x ~@2 x ~@14", J: "~ x ~@10", K: "~@16 x ~@2 x ~@2 x ~", L: "~ x ~@22",
  M: "~@7 x ~@2 x ~@2 x ~@5 x ~@2 x ~", N: "~ x ~@5 x ~@2 x ~@2 x ~@5 x ~@4",
  O: "~@4 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", P: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~",
  Q: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@4", R: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  S: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@10",
})).gain(0.41)

// drums · high tom
const high_tom = s("ht").struct("<~@53 [~@19 x ~@4] ~@37>").gain(0.41)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~ A ~@3 A ~ A ~ A ~ A B C D C@3 D C B A ~@3 A ~ A ~ A ~ A B C D C@3 E C B A ~ A ~ A ~@5 F ~ F ~ G ~ H ~@2 I J K
  L M K@2 L M N ~@2 J ~ F ~ F ~@3 F ~@3 O ~@3
>`.pickRestart({
  A: "x", B: "x!4 ~@4", C: "x!2", D: "x!8", E: "x!7 ~", F: "~ x ~@4", G: "~ x ~@2", H: "~@3 x ~@4",
  I: "~@16 x ~@2 x ~@2 x ~", J: "~ x ~@22", K: "~ x ~@2 x ~", L: "~@4 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  M: "~ x ~@2 x ~@11 x ~@7", N: "~@4 x ~@2 x ~@2 x ~@2 x ~@10", O: "~@5 x ~@2",
})).gain(0.41)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@15 A ~@12 B ~ B ~ B ~ B A ~@55>".pickRestart({
  A: "~@4 x!4", B: "~ x ~@6",
})).gain(0.26)

// drums · ride
const ride = s("rd").struct("<~@8 [x!8]!7 ~@26 [~@7 x] ~@49>").gain(0.41)

stack(
  electric_guitar_clean, overdriven_guitar, bass, trombone, trumpet, rim, kick, snare, low_tom, hihat, mid_tom,
  open_hat, high_tom, crash, crash_soft, ride
)

More by Reel Big Fish