Strudelify

Firehouse

Kiss

KeyD majorTempo126 bpm
0:00/0:00
// Firehouse — Kiss
// 126 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 61, 4/4 at bar 62, 2/4 at bar 84, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 109 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Gtr 2.
setcpm(126/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 pick · "Bass"
const bass = note(`<
  ~@4 A B ~@3 C@2 D@2 C@2 D@2 E F D@2 E F D@2 G@3 H I@2 D@2 I@2 J@2 I@2 J@2 I@2 K@2 G@3 H I@2 J@2 L I D@2 M N O P Q R S
  T U R S T U R S T U R S V@2 W X Y@2 ~@2 Z@2 ~ AA@8 AB@4 AC@2 AD AE AF@5 ~
>`.pickRestart({
  A: "~@3 a2", B: "a1@5 ~@19", C: "a1@2 ~ g1 ~ e1 g1 e1", D: "[d2@2 c2@2 a1 g1 e1 a1@9]/2", E: "a1!2 g1 ~@2 e1 g1 ~",
  F: "a1!2 g1 ~@2 e1 g1@2", G: "[c2@6 f1 g1@7 g1 a#1@8 b1]/3", H: "~ b1 ~ e1 ~@4", I: "a1!2 ~ g1 ~ e1 g1 e1",
  J: "[d2@2 c2@2 a1 g1 e1 a1@2 f1 f#1@2 g1@2 g#1@2]/2", K: "[d2@6 c2@6 a1@3 g1@3 e1@3 a1@26 ~]/2",
  L: "a1 a1@2 g1 ~ e1 g1 e1", M: "b1@2 ~ b1 b1@2 ~@2", N: "e1@2 ~ e1 e1@2 ~@2", O: "f1@2 ~ f1 f1@2 ~@2",
  P: "g2 d2 ~ g1@5", Q: "e1@2 g1@2 a1!2 ~ g1", R: "~ e1 g1 e1 a1!2 ~ g1", S: "~ e1 g1 e1 d2@2 c2@2",
  T: "a1 g1 e1 a1@3 f#1@2", U: "g1@2 g#1@2 a1!2 ~ g1", V: "[a1 g1 e1 a1@9 b1@2 ~ b1]/2", W: "b1@2 ~@2 e1@2 ~ e1",
  X: "e1@2 ~@2 f1@2 ~ f1", Y: "[f1@2 ~@2 g2 d2 c2 g1@5 ~@4]/2", Z: "[~@20 a2@6 a1@5 ~@17]/2",
  AA: "[~@17 d2@3 ~@3 e2@3 ~@3 d2@3 c2@6 d2@3 e2@3 g2@6 a1@3 a1@3 ~@3 g1@3 ~@3 e1@3 g1@3 e1@3 a1@3 a1@3 ~@3 g1@3 ~@3 e1@3 g1@3 e1@3 d2@6 c2@6 a1@3 g1@3 e1@3 a1@9 f1@6 g1@6 g#1@6 a1@3 a1@3 ~@3 g1@3 ~@3 e1@3 g1@3 e1@3 a1@3 ~@19]/8",
  AB: "[~@2 g2@6 f#2@6 e2@6 d2@3 f#2@3 ~@3 d2@3 a1@18 a1@3 a1@3 ~@3 g1@3 ~@3 e1@3 g1@3 e1@3 a1@3 ~@19]/4",
  AC: "[~@2 g2@6 f#2@6 e2@6 d2@3 f#2@3 ~@3 d2@3 a1@6 c2 a1@4 c2 a1@4]/2",
  AD: "a1@4 c2 a1@4 c2 a1@4 a1@4 ~ a1@4 c2, c2 ~@13 c2 ~@4 c2 ~@4",
  AE: "a1@4 c2 a1@4 a1@4 c2 a1@4 c2 a1@4 c2, ~@9 c2 ~@14",
  AF: "[a1@4 a1@4 c2 a1@4 c2 a1@4 a1@4 ~ a1@4 c2 a1@4 a1@4 ~ a1@4 c2 a1@4 c2 a1@4 a1@4 ~ a1@4 c2 a1@4 c2 a1@4 a1@4 ~ a1@4 c2 a1@4 a1@4 ~ a1@4 c2 a1@4 c2 a1@4 a2@11 ~@6, ~@4 c2 ~@13 c2 ~@4 c2 ~@8 c2 ~@4 c2 ~@13 c2 ~@4 c2 ~@13 c2 ~@4 c2 ~@8 c2 ~@4 c2 ~@30]/5",
})).s("gm_electric_bass_pick").gain(0.5)

// chords · overdriven guitar · "Gtr 1"
const overdriven_guitar = note(`<
  ~ A B C@2 D E F@2 G@2 H@2 G@2 H@2 I@2 J@2 I@2 J@2 K@3 L I M H@2 I M H@2 I@2 J@2 I M J@2 N@3 L G@2 H@2 G@2 H@2 O P Q
  R@2 S T U@2 S T U@2 S T U@2 S T V@4 W@5 X@8 Y@2 Z@4 AA@2 AB@7 ~
>`.pickRestart({
  A: "[a2,e3,a3]@2 [a2,f#3,a3] ~ [a2,g#3,b3] ~ [a2,f#3,a3] ~", B: "[a2,e3,a3]@2 [a2,f#3,a3] [a2,e3,a3]@3 ~ [a3,d4,f#4]",
  C: "[[b3,d4,g4] [a3,d4,f#4] [b3,d4,g4] [a3,d4,f#4] [b3,d4,g4] [a3,d4,f#4] ~ [a2,a3,e4]@2 [a2,a3,e4]!5 g3 g2]/2", // G D G D G D A5
  D: "[a2,e3,a3] a2 [a2,f#3,a3] a2 [a2,g#3,b3] a2 [a2,f#3,a3] a2", // A5 D E D
  E: "[a2,e3,a3]!2 [a2,f#3,a3] [a2,e3,a3]@2 a2!2 [a3,d4,f#4]", // A5 D A5 D
  F: "[[b3,d4,g4] [a3,d4,f#4] [b3,d4,g4] [a3,d4,f#4] [b3,d4,g4] [a3,d4,f#4] a2 [a2,e3,a3]@9]/2", // G D G D G D A5
  G: "[a2,e3]@2 ~ g2 ~ e2 g2 e2", // A5
  H: "[[b3,d4,g4] [a3,d4,f#4] [b3,d4,g4] [a3,d4,f#4] [b3,d4,g4] [a3,d4,f#4] a2 [a2,e3,a3,e4]@7 ~@2]/2", // G D G D G D A5
  I: "[a2,e3,a3,e4,a4] ~@3", // A5
  J: "[[b3,d4,g4] [a3,d4,f#4] [b3,d4,g4] [a3,d4,f#4] [b3,d4,g4] [a3,d4,f#4] ~ [a2,e3,a3,e4]@7 ~@2]/2", // G D G D G D A5
  K: "[[c3,g3,c4]@20 ~ [g2,d3,g3]@24 [a#2,f3,a#3]@24 [b2,f#3,b3]@3]/3", L: "~ [b2,f#3,b3] ~ [e2,b2,e3] ~@4",
  M: "[a2,e3,a3,e4,a4]@2 c3 ~ c3 a2 g2 e2", N: "[[c3,g3,c4]@7 [g2,d3,g3]@8 [a#2,f3,a#3]@8 [b2,f#3,b3]]/3",
  O: "[b2,f#3,b3]@2 ~ [b2,f#3,b3]@3 ~@2", P: "[e2,b2,e3]@2 ~ [e2,b2,e3]@3 ~@2",
  Q: "[f2,c3,f3]@2 ~ [f2,c3,f3] [f2,c3,f3]@2 ~@2", R: "[[g2,d3,g3]!2 ~ [g2,d3,g3]@9 [a2,e3]@2 ~ g2]/2",
  S: "~ e2 g2 e2 [a2,e3]@2 ~ g2", T: "~ e2 g2 e2 [b3,d4,g4] [a3,d4,f#4] [b3,d4,g4] [a3,d4,f#4]",
  U: "[[b3,d4,g4] [a3,d4,f#4] a2 [a2,e3,a3,e4]@7 ~@2 [a2,e3]@2 ~ g2]/2", // G D A5
  V: "[[b3,d4,g4] [a3,d4,f#4] a2 [a2,e3,a3,e4]@7 ~@2 [b2,f#3,b3]@2 ~ [b2,f#3,b3]@3 ~@2 [e2,b2,e3]@2 ~ [e2,b2,e3]@3 ~@2 [f2,c3,f3]@2 ~ [f2,c3,f3]]/4", // G D A5 B5 E5 F5
  W: "[[f2,c3,f3]@6 ~@6 g4@3 d4@3 c4@3 b3@76 ~@23]/5", // F5
  X: "[~@2 [a2,e3,a3]@3 a2@3 [a2,f#3,a3]@3 a2@3 [a2,g#3,b3]@3 a2@3 [a2,f#3,a3]@3 a2@3 [a2,e3,a3]@3 [a2,e3,a3]@3 [a2,f#3,a3]@3 [a2,e3,a3]@6 a2@6 [a3,d4,f#4]@3 [b3,d4,g4]@3 [a3,d4,f#4]@3 [b3,d4,g4]@3 [a3,d4,f#4]@3 [b3,d4,g4]@3 [a3,d4,f#4]@3 ~@3 [d4,f#4]@3 ~@3 [d4,f#4]@3 [c4,e4]@3 a3@3 d3@3 e3@3 [g3,c4]@6 [a2,e3]@6 ~@3 g2@3 ~@3 e2@3 g2@3 e2@3 [a2,e3]@6 ~@3 g2@3 ~@3 e2@3 g2@3 e2@3 [b3,d4,g4]@3 [a3,d4,f#4]@3 [b3,d4,g4]@3 [a3,d4,f#4]@3 [b3,d4,g4]@3 [a3,d4,f#4]@3 a2@3 [a2,e3,a3,e4]@21 ~@4]/8", // A5 D E D A5 D A5 D …
  Y: "[~@2 [a2,e3]@6 ~@3 g2@3 ~@3 e2@3 g2@3 e2@3 [a2,e3]@3 ~@19]/2", // A5
  Z: "[~@2 [b3,d4,g4]@6 [a3,d4,f#4]@6 [a3,e4]@6 a2@3 [f#3,b3]@3 ~@3 [e3,a3]@3 [a2,e3,a3]@18 [a2,e3]@6 ~@3 g2@3 ~@3 e2@3 g2@3 e2@3 [a2,e3]@3 ~@19]/4", // G D A5 B5 A5
  AA: "[~@2 [b3,d4,g4]@6 [a3,d4,f#4]@6 [a3,e4]@6 a2@3 [f#3,b3]@3 ~@3 [e3,a3]@3 [a2,e3,a3]@15 ~]/2", // G D A5 B5 A5
  AB: "[[a2,e3,a3]@18 ~ [a2,e3,a3]@18 [a2,e3,a3]@19 [a2,e3,a3]@19 [a2,e3,a3]@19 [a2,e3,a3]@19 [a2,e3,a3]@19 [a2,e3,a3]@19 [a2,e3,a3]@12 ~@5]/7", // A5
})).s("gm_overdriven_guitar").gain(0.31).pan(0.1)

// chords · distortion guitar · "Gtr 2"
const distortion_guitar = note("<~@8 A ~@16 B@3 C ~@16 D@3 E ~@8 F G H I@2 ~@15 J K L M@5 ~@16 N@3 ~@5>".pickRestart({
  A: "d4@23 ~",
  B: "[a#4@12 a#4@4 a4 ~ f4 ~@2 f4@12 ~@3 f4@6 c4 ~@2 d4@6 a#4@3 d4@3 c5@3 e4@3 ~@3 f4 ~@2 d#5@3, ~@7 c#5]/3",
  C: "~ d#5 ~@6", D: "[a#4@12 a#4@4 ~ a4 f4 ~@2 f4@12 ~@3 f4@6 c4 ~@2 d4@6 a#4@3 c4@3 g#4@3 a#3@3 g4@3 g#3@2 ~@4]/3",
  E: "~@3 g#4 ~@4", F: "e4@2 d4 ~@5", G: "f#4@2 e4 ~@5", H: "g4@2 f4 ~@3 c4!2", I: "[a4@2 g4 c5@9 ~@4]/2",
  J: "~@4 e4@2 d4 ~", K: "~@4 f#4@2 e4 ~", L: "~@4 g4@2 f4 ~", M: "[~@2 c4!2 a4@2 g4 c5@26 ~@7]/5",
  N: "[~@18 e3@19 ~ [a2,e3,a3]@18 ~@16]/3", // A5
})).s("gm_distortion_guitar").gain(0.31).pan(0.9)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@108>").gain(0.42)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~ A ~@5 B C ~@15 D E F@2 ~@17 B G ~@31 H I ~@16 J ~ K A ~@9>".pickRestart({
  A: "x", B: "~@7 x", C: "~@3 x ~@4 x ~ x ~", D: "~@6 x ~@5 x!2 ~ x ~ x!2 ~ x!2 ~@2", E: "~@12 x ~ x ~@2 x!2 ~@5",
  F: "~@12 x ~ x!3 ~@7", G: "~@3 x", H: "~@3 x ~@4", I: "~@9 x!2 ~@13", J: "~@20 x ~@2 x", K: "~@7 x ~@3 x",
})).gain(0.42)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@8 A ~@3 B ~@4 C@2 ~@2 C@2 ~@3 D E ~@8 F ~@7 G H I J ~@7 K L ~ M J ~@8 N O ~@2 N P ~@2 Q R S T ~@14 U V W X Y ~@10
>`.pickRestart({
  A: "~ x ~ x ~@14 x ~@2 x ~@2", B: "~@6 x ~@4 x!2 ~@2 x ~@2 x ~@2 x ~@2", C: "~ x ~@2", D: "~@6 x!2 ~ x ~ x ~@9 x ~@2",
  E: "~@6 x ~ x!2 ~ x ~@12", F: "~@12 x!2 ~ x ~@2 x!2 ~ x ~@2", G: "~@6 x ~@2 x!2 ~@10 x ~ x", H: "~@6 x!4 ~@2",
  I: "~@13 x ~ x!2 ~@7", J: "~@15 x ~ x!2 ~@5", K: "~@2 x", L: "~@9 x!2 ~", M: "~@17 x!2 ~@5", N: "~@18 x ~ x!2 ~ x",
  O: "x ~ x!3 ~ x!2 ~ x ~@14", P: "x ~ x!3 ~ x ~ x ~@15", Q: "x ~ x ~@2 x!2 ~@17", R: "x!2 ~@2 x ~@2 x ~ x ~ x ~@12",
  S: "~@3 x ~@2 x ~ x ~@15", T: "~@3 x ~ x!2 ~ x ~@15", U: "~@7 x ~@8 x!2 ~ x!2 ~@2 x", V: "~@17 x ~@2 x ~@3",
  W: "~@13 x!2 ~@2 x ~@6", X: "~@23 x", Y: "~ x!2 ~@7 x ~ x ~@3 x ~ x ~ x ~@3",
})).gain(0.42)

// drums · high tom
const high_tom = s("ht").struct("<~@46 A ~@10 B ~@3 C ~@15 D ~@16 E ~@3 F ~@10>".pickRestart({
  A: "~ x ~@6", B: "~@15 x!2 ~ x ~@5", C: "x!2 ~@2", D: "~ x ~@2", E: "~@2 x ~ x!2 ~@2 x ~ x!2 ~ x!2 ~@9",
  F: "~@2 x!3 ~@7",
})).gain(0.36)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~ B ~ A ~ B ~@3 C ~@3 D E F B G H A ~@7 A ~@3 I@2 F J C B@2 K L ~@3 A ~ C ~ M@3 N O ~@3 O ~@3 O@3 ~ P E ~ Q R D
  S T ~@8 U ~@5 V ~ W ~ X Y ~@6 Z ~
>`.pickRestart({
  A: "x", B: "~@7 x", C: "x ~@6 x", D: "x ~@3 x ~@2 x", E: "~ x ~@2", F: "x ~ x ~@4 x", G: "~ x ~@5 x", H: "~@3 x ~@4",
  I: "~@3 x ~@2 x ~", J: "~@2 x ~@2 x ~@2", K: "~ x ~@6", L: "x!2 ~@2", M: "x ~@2 x!2 ~@3", N: "~ x!3 ~@4", O: "~ x",
  P: "~@2 x!2", Q: "~@3 x", R: "~@4 x ~@2 x", S: "x!2", T: "~ x ~@2 x!4", U: "~ x ~@10", V: "~@2 x ~@5 x ~@14 x",
  W: "~ x ~@2 x ~@2 x ~@2 x ~", X: "~@2 x ~@5 x ~@8 x ~@2 x ~@2 x", Y: "~@5 x ~@2 x ~@15", Z: "~@7 x ~@16",
})).gain(0.42)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@81
  [~@6 x ~@2 x ~@2 x!4 ~@2 x ~@3 x ~]
  [~ x ~@2 x ~@2 x!17]
  [x!2 ~ x ~ x!11 ~ x ~@6]
  ~@25
>`).gain(0.42)

// drums · cowbell
const cowbell = s("cb").struct("<~@53 A B ~ C ~@5 D@3 E F@2 G ~ H ~@38>".pickRestart({
  A: "~@2 x!2", B: "x!4", C: "~ x ~@2", D: "x!2", E: "~@7 x", F: "x!3 ~@4 x", G: "x!3 ~@5", H: "~@5 x ~@6",
})).gain(0.42)

// drums · ride
const ride = s("rd").struct("<~@28 A ~@8 B C D C E@2 ~@33 F ~@23 G H@6 I ~>".pickRestart({
  A: "~ x ~@6", B: "~ x!3", C: "x!4", D: "x!2 ~@2", E: "x", F: "~@5 x ~@2", G: "~@14 x!10", H: "x!24", I: "x!7 ~@17",
})).gain(0.42)

stack(
  bass, overdriven_guitar, distortion_guitar, rim, kick, snare, low_tom, hihat, mid_tom, high_tom, crash, tambourine,
  cowbell, ride
)

More by Kiss