Strudelify

Under the Rose

Kiss

KeyD minorTempo148 bpm
0:00/0:00
// Under the Rose — Kiss
// 148 bpm, 6/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (6/4 at bar 1, 7/4 at bar 33, 6/4 at bar 35, 7/4 at bar 68, ...) are rendered on a constant 6/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 1 "Accoustic 1" electric guitar clean (copy of ch 4 "Accoustic 2" acoustic guitar steel); ch 5 "Ace" distortion guitar (copy of ch 3 "Paul" distortion guitar); ch 9 "Solo 2" distortion guitar (copy of ch 8 "Solo 1" distortion guitar); ch 12 "Solo 4" distortion guitar (copy of ch 11 "Solo 3" distortion guitar)
// note: Full arrangement: all 113 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(148/6)

// 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 · "Gene"
const bass = note(`<
  A@2 B C D@2 E F G@2 B C D@2 E F G@2 B H I F B H J K L M L N L M L O@7 P@2 Q@5 R P@2 S T@5 U@5 V W X Y V W Z@6 AA@3
  AB@5 AC@3 AD AE AF@8 AG AH AI AJ AK AH AI AJ AL@4 ~@7
>`.pickRestart({
  A: "d3", B: "d2!2", C: "c2 g1", D: "[d2@11 e2]/2", E: "f2 c2", F: "g1@4 a1 c2", G: "d2/2", H: "e1 f1", I: "g1",
  J: "g1 a1", K: "bb1 c2", L: "f2 e2 d2 c2@2 e2 d2@2 d2@2 d2@2", M: "c2 b1 a1 g1@2 e1 g1 a1 b1 c2 e2@2",
  N: "c2 b1 a1 g1@2 c2 b1 a1 g1 a1 b1 c2", O: "[c2 b1 a1 g1@2 c2 b1 a1 g1@30 d2@6 d2@6 c2@6 g1@6 d2@22]/7",
  P: "[e2 f2@3 c2@3 g1@4 a1]/2", Q: "[c2@2 d2@24 d2@6 d2@6 c2@6 g1@6 d2@8 f2 e2]/5", R: "d2", S: "c2@2 d2@8 f2 e2",
  T: "[d2@7 d2@3 d2@3 e1@3 f1@3 g1@6 g1@4 a1]/5",
  U: "[c2@2 d2@6 d2@6 e1@6 f1@6 g1@6 a1@6 bb1@6 c2@6 f2 e2 d2 c2@2 e2 d2@2 d2@2]/5",
  V: "d2@2 c2 b1 a1 g1@2 e1 g1 a1 b1 c2", W: "e2@2 f2 e2 d2 c2@2 e2 d2@2 d2@2", X: "d2@2 c2 b1 a1 g1@2 c2 b1 a1 g1 a1",
  Y: "b1 c2 f2 e2 d2 c2@2 e2 d2@2 d2@2",
  Z: "[d2@2 c2 b1 a1 g1@2 c2 b1 a1 ~@26 a1@2 c2@2 d2@6 d2@6 c2@6 g1@6 d2@8, ~@5 g1@15 ~@16]/6",
  AA: "[f2 e2 d2 ~ d2@10 e2@2 f2@6 c2@6 g1@8]/3", AB: "[a1 c2 d2@12 d2@3 d2@3 c2@3 g1@3 d2@4]/5",
  AC: "[f2 e2 d2@12 e2@2 f2@6 c2@6 g1@8]/3", AD: "a1 c2 d2@4", AE: "f2 e2 d2@2 d2!8",
  AF: "[d2!4 d2@6 d2@6 e1@6 f1@6 g1@6 a1@6 bb1@6 c2@6 d2@6 d2@6 e1@6 f1@6 g1@6 a1@6 bb1@6 c2@2]/8",
  AG: "~@4 f2 e2 d2 c2@2 e2 d2@2", AH: "d2@2 d2@2 c2 b1 a1 g1@2 e1 g1 a1", AI: "b1 c2 e2@2 f2 e2 d2 c2@2 e2 d2@2",
  AJ: "d2@2 d2@2 c2 b1 a1 g1@2 c2 b1 a1", AK: "g1 a1 b1 c2 f2 e2 d2 c2@2 e2 d2@2", AL: "[g1@5 ~]/4",
})).s("gm_electric_bass_pick").gain(0.64)

// chords · distortion guitar · "Paul"
const distortion_guitar = note(`<
  ~@18 A B C@2 A B D E F G F H F G F I@4 ~@15 J@4 K@5 L M N O L M P@4 ~@15 Q@8 R S T U V S T U W@3 ~@8
>`.pickRestart({
  A: "[d3,a3,d4]!2", B: "[e2,b2,e3] [f2,c3,f3]", C: "[[g2,d3,g3]@10 [a2,e3,a3] [c3,g3,c4]]/2",
  D: "[g2,d3,g3] [a2,e3,a3]", E: "[bb2,f3,bb3] [c3,g3,c4]", F: "f3 e3 d3 c3@2 e3 d3@2 [d3,a3,d4]@2 [d3,a3,d4]@2",
  G: "c3 b2 a2 g2@2 e2 g2 a2 b2 c3 e3@2", H: "c3 b2 a2 g2@2 c3 b2 a2 g2 a2 b2 c3",
  I: "[c3 b2 a2 g2@2 c3 b2 a2 [g3,d4,g4]@30 ~@10]/4", // G5
  J: "[~ [d3,a3,d4]@3 [d3,a3,d4]@3 [e2,b2,e3]@3 [f2,c3,f3]@3 [g2,d3,g3]@10 [a2,e3,a3]]/4", // D5 E5 F5 G5 A5
  K: "[[c3,g3,c4]@2 [d3,a3,d4]@6 [d3,a3,d4]@6 [e2,b2,e3]@6 [f2,c3,f3]@6 [g2,d3,g3]@6 [a2,e3,a3]@6 [bb2,f3,bb3]@6 [c3,g3,c4]@6 f3 e3 d3 c3@2 e3 d3@2 [d3,a3,d4]@2]/5", // C5 D5 E5 F5 G5 A5 Bb5 C5 …
  L: "[d3,a3,d4]@2 c3 b2 a2 g2@2 e2 g2 a2 b2 c3", M: "e3@2 f3 e3 d3 c3@2 e3 d3@2 [d3,a3,d4]@2",
  N: "[d3,a3,d4]@2 c3 b2 a2 g2@2 c3 b2 a2 g2 a2", O: "b2 c3 f3 e3 d3 c3@2 e3 d3@2 [d3,a3,d4]@2",
  P: "[[d3,a3,d4]@2 c3 b2 a2 g2@2 c3 b2 a2 [g2,d3,g3]@30 ~@8]/4", // D5 G5
  Q: "[~@2 [d3,a3,d4]@3 [d3,a3,d4]@3 [e2,b2,e3]@3 [f2,c3,f3]@3 [g2,d3,g3]@3 [a2,e3,a3]@3 [bb2,f3,bb3]@3 [c3,g3,c4]@3 [d3,a3,d4]@3 [d3,a3,d4]@3 [e2,b2,e3]@3 [f2,c3,f3]@3 [g2,d3,g3]@3 [a2,e3,a3]@3 [bb2,f3,bb3]@3 [c3,g3,c4]]/8", // D5 E5 F5 G5 A5 Bb5 C5 D5 …
  R: "~@4 f3 e3 d3 c3@2 e3 d3@2", S: "[d3,a3,d4]@2 [d3,a3,d4]@2 c3 b2 a2 g2@2 e2 g2 a2",
  T: "b2 c3 e3@2 f3 e3 d3 c3@2 e3 d3@2", U: "[d3,a3,d4]@2 [d3,a3,d4]@2 c3 b2 a2 g2@2 c3 b2 a2",
  V: "g2 a2 b2 c3 f3 e3 d3 c3@2 e3 d3@2", W: "[[g2,d3,g3]@5 ~]/3",
})).s("gm_distortion_guitar").gain(0.42).pan(0)

// chords · acoustic guitar steel · "Accoustic 2"
const acoustic_guitar_steel = note(`<
  A@2 B C D@2 E F G@2 B C D@2 E F A H I J K@2 I J K@2 ~@8 L M N@6 O@8 P@5 Q R@3 Q S ~@7 T U V@6 W@8 X@5 Y Z@3 Y AA ~@18
>`.pickRestart({
  A: "c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4, d3", B: "~ a3 d4 a3 d4 a3 ~ f4 e4 c4 f4 e4, d3!2",
  C: "c4 d4 g4 c4 d4 g4 g3 d4 g4 g3 d4 g4, c3 g2", D: "a3 d4 e4 a3 d4 e4 a3 d4 e4 a3 g3 a3, d3",
  E: "c4 d4 g4 c4 d4 g4 c4 d4 g4 c4 d4 g4, f3 c3", F: "g3 d4 g4 g3 d4 g4 g3 d4 g4 g3 d4 g4, g2@4 a2 c3",
  G: "[c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4, d3]/2", H: "[d4,e4,f4]",
  I: "~ a3 d4 a3 d4 a3 ~ a3 d4 a3 d4 a3, d3!2", J: "~ f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4, e3 f3",
  K: "d4 g4 e4 d4 g4 e4 d4 g4 e4 d4 g4 e4", L: "~@2 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4",
  M: "f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4",
  N: "[f4 e4 ~ a3 d4 a3 d4 a3 ~ f4 e4 c4 f4 e4 c4 d4 g4 c4 d4 g4 g3 d4 g4 g3 d4 g4 a3 d4 e4 a3 d4 e4 a3 d4 e4 a3 g3 a3!2 d4 e4 a3 d4 e4 a3 d4 e4 a3 g3 a3 c4 d4 g4 c4 d4 g4 c4 d4 g4 c4 d4 g4 g3 d4 g4 g3 d4 g4 g3 d4 g4 g3, ~ d3@3 d3@3 c3@3 g2@3 d3@6 d3@6 f3@3 c3@3 g2@4 a2]/6",
  O: "[d4 g4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 ~ a3 d4 a3 d4 a3 ~ f4 e4 c4 f4 e4 c4 d4 g4 c4 d4 g4 g3 d4 g4 g3 d4 g4 a3 d4 e4 a3 d4 e4 a3 d4 e4 a3 g3 a3!2 d4 e4 a3 d4 e4 a3 d4 e4 a3 g3 a3 c4 d4 g4 c4 d4 g4 c4 d4 g4 c4 d4 g4 g3 d4 g4 g3 d4 g4 g3 d4 g4 g3, c3 d3@12 d3@3 d3@3 c3@3 g2@3 d3@6 d3@6 f3@3 c3@3 g2@4 a2]/8",
  P: "[d4 g4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 [d4,e4,f4]@12 ~ a3 d4 a3 d4 a3 ~ a3 d4 a3 d4 a3 ~ f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 d4 g4 e4 d4 g4 e4 d4 g4 e4 d4, c3 d3@6 ~@6 d3@3 d3@3 e3@3 f3@3 ~@5]/5", // Dm
  Q: "g4 e4 d4 g4 e4 d4 g4 e4 d4 g4 e4 d4",
  R: "[g4 e4 ~ a3 d4 a3 d4 a3 ~ a3 d4 a3 d4 a3 ~ f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 d4 g4 e4 d4 g4 e4 d4 g4 e4 d4, ~ d3@3 d3@3 e3@3 f3@3 ~@5]/3",
  S: "g4 e4 ~@10", T: "~@4 c4 f4 e4 c4 f4 e4 c4 f4", U: "e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4",
  V: "[e4 c4 f4 e4 ~ a3 d4 a3 d4 a3 ~ f4 e4 c4 f4 e4 c4 d4 g4 c4 d4 g4 g3 d4 g4 g3 d4 g4 a3 d4 e4 a3 d4 e4 a3 d4 e4 a3 g3 a3!2 d4 e4 a3 d4 e4 a3 d4 e4 a3 g3 a3 c4 d4 g4 c4 d4 g4 c4 d4 g4 c4 d4 g4 g3 d4 g4 g3 d4 g4 g3 d4, ~@2 d3@3 d3@3 c3@3 g2@3 d3@6 d3@6 f3@3 c3@3 g2@4]/6",
  W: "[g4 g3 d4 g4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 ~ a3 d4 a3 d4 a3 ~ f4 e4 c4 f4 e4 c4 d4 g4 c4 d4 g4 g3 d4 g4 g3 d4 g4 a3 d4 e4 a3 d4 e4 a3 d4 e4 a3 g3 a3!2 d4 e4 a3 d4 e4 a3 d4 e4 a3 g3 a3 c4 d4 g4 c4 d4 g4 c4 d4 g4 c4 d4 g4 g3 d4 g4 g3 d4 g4 g3 d4, a2 c3 d3@12 d3@3 d3@3 c3@3 g2@3 d3@6 d3@6 f3@3 c3@3 g2@4]/8",
  X: "[g4 g3 d4 g4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 ~ a3 d4 a3 d4 a3 ~ a3 d4 a3 d4 a3 ~ f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 d4 g4 e4 d4 g4 e4 d4 g4, a2 c3 d3@6 d3@6 d3@3 d3@3 e3@3 f3@3 ~@4]/5",
  Y: "e4 d4 g4 e4 d4 g4 e4 d4 g4 e4 d4 g4",
  Z: "[e4 d4 g4 e4 ~ a3 d4 a3 d4 a3 ~ a3 d4 a3 d4 a3 ~ f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 d4 g4 e4 d4 g4 e4 d4 g4, ~@2 d3@3 d3@3 e3@3 f3@3 ~@4]/3",
  AA: "e4 d4 g4 e4 ~@8",
})).s("gm_acoustic_guitar_steel").gain(0.64).pan(1)

// chords · synth strings 1 · "Synth"
const synth_strings_1 = note("<A@2 B C D@2 E F G@2 B C D@2 E F H I ~@16 J K L@6 M@8 N@3 ~@49 O@8 ~@3>".pickRestart({
  A: "c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5, d4", B: "~ a4 d5 a4 d5 a4 ~ f5 e5 c5 f5 e5, d4!2",
  C: "c5 d5 g5 c5 d5 g5 g4 d5 g5 g4 d5 g5, c4 g3", D: "a4 d5 e5 a4 d5 e5 a4 d5 e5 a4 g4 a4, d4",
  E: "c5 d5 g5 c5 d5 g5 c5 d5 g5 c5 d5 g5, f4 c4", F: "g4 d5 g5 g4 d5 g5 g4 d5 g5 g4 d5 g5, g3@4 a3 c4",
  G: "[c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5, d4]/2",
  H: "c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4, d3", I: "[d4,e4,f4]", J: "~@2 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5",
  K: "f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5",
  L: "[f5 e5 ~ a4 d5 a4 d5 a4 ~ f5 e5 c5 f5 e5 c5 d5 g5 c5 d5 g5 g4 d5 g5 g4 d5 g5 a4 d5 e5 a4 d5 e5 a4 d5 e5 a4 g4 a4!2 d5 e5 a4 d5 e5 a4 d5 e5 a4 g4 a4 c5 d5 g5 c5 d5 g5 c5 d5 g5 c5 d5 g5 g4 d5 g5 g4 d5 g5 g4 d5 g5 g4, ~ d4@3 d4@3 c4@3 g3@3 d4@6 d4@6 f4@3 c4@3 g3@4 a3]/6",
  M: "[d5 g5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 ~ a4 d5 a4 d5 a4 ~ f5 e5 c5 f5 e5 c5 d5 g5 c5 d5 g5 g4 d5 g5 g4 d5 g5 a4 d5 e5 a4 d5 e5 a4 d5 e5 a4 g4 a4!2 d5 e5 a4 d5 e5 a4 d5 e5 a4 g4 a4 c5 d5 g5 c5 d5 g5 c5 d5 g5 c5 d5 g5 g4 d5 g5 g4 d5 g5 g4 d5 g5 g4, c4 d4@12 d4@3 d4@3 c4@3 g3@3 d4@6 d4@6 f4@3 c4@3 g3@4 a3]/8",
  N: "[d5 g5 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 [d4,e4,f4]@12 ~@10, c4 d3@6 ~@11]/3", // Dm
  O: "[d2@8 ~@2 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 ~@44, ~@5 d2@43]/8",
})).s("gm_synth_strings_1").gain(0.54)

// chords · synth strings 1 · "Synth" · soft notes
const synth_strings_1_soft = note(`<
  ~@106
  [~@4 c5 f5 e5 c5 f5 e5 c5 f5]
  [e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 c5 f5]!5
  [e5 c5 f5 e5 c5 f5 e5 c5 f5 e5 ~@2]
>`).s("gm_synth_strings_1").gain(0.2)

// other · electric guitar clean · "Accoustic End"
const electric_guitar_clean = note(`<
  ~@102
  [~@10 c4 f4]
  [e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4]!6
  [e4 c4 f4 e4 c4 f4 e4 ~@5]
  ~@3
>`).s("gm_electric_guitar_clean").gain(0.32).pan(0.7)

// other · electric guitar clean · "Accoustic End" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@109
  [~@7 c4 f4 e4 c4 f4]
  [e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 c4 f4]!2
  [e4 c4 f4 e4 c4 f4 e4 c4 f4 e4 ~@2]
>`).s("gm_electric_guitar_clean").gain(0.08).pan(0.7)

// other · distortion guitar · "Solo 1"
const distortion_guitar_2 = note("<~@69 A@3 B C D@4 E F G@2 H@2 I J K@2 ~@25>".pickRestart({
  A: "[~@10 a4@6 a4 g4 f4 d4!3 d4@6 d5@6 c5 a4]/3", B: "g4@2 f4@2 a4@2 g4 f4 d4@16", C: "g3 f3@3 d3@8",
  D: "[d3 ~ e3 ~ f3@6 e3@6 d3 c3@5 c3 b2@5 b2 a2@16 ~@3]/4", E: "g3 a3 c4 ~@5 g3 a3 c4 e4", F: "f4 ~@5 a4@2 a4@2 a4@2",
  G: "[a4@2 a4@2 a4@12 g4 f4@7]/2", H: "[f4 g4 f4 ~ d5@6 d5@6 d5@8]/2", I: "g4 d4!4 g4", J: "g4!2 c5!3 f5",
  K: "[f5!2 d5@6 ~@4]/2",
})).s("gm_distortion_guitar").gain(0.64).pan(0)

// other · distortion guitar · "Solo 3"
const distortion_guitar_3 = note("<~@78 A B C@5 D E@2 ~@25>".pickRestart({
  A: "~@4 g3 a3 c4 ~@5", B: "g3 a3 c4 e4 f4 ~@5 a4@2",
  C: "[a4@2 a4@2 a4@2 a4@2 a4@12 g4 f4@7 f4 g4 f4 ~ d5@6 d5@6 d5@8 g4@2 d4@2 d4@2 d4@2]/5", D: "d4 g4!3 c5!2",
  E: "[c5 f5!3 d5@6 ~@2]/2",
})).s("gm_distortion_guitar").gain(0.64).pan(0.2)

// other · lead 2 sawtooth · "Chorus 1"
const lead_2_sawtooth = note("<~@18 A B C ~ A B D E@2 ~@25 F G H ~ F G I@4 ~@24 J@2 K@2 J@2 L@2 M@2 ~@17>".pickRestart({
  A: "a3@2 a3 a3@2 a3", B: "c4@2 a3 ~ a3!2", C: "b3@2 c4 b3@6 ~@3", D: "b3 c4 b3@4",
  E: "[~@6 [f3,f4] [e3,e4] [d3,d4] [d3,d4]@15]/2", F: "~ a3@2 a3 a3@2", G: "a3 c4@2 a3 ~ a3", H: "a3@2 b3@2 c4 b3@6 ~",
  I: "[a3@2 b3@2 c4@2 b3@8 ~@6 [f3,f4] [e3,e4] [d3,d4] [d3,d4]@15 ~@10]/4", J: "[~@2 a3@2 a3 a3@2 a3 c4@2 a3 ~]/2",
  K: "[a3!2 b3 c4 b3@4 ~@4]/2", L: "[a3!2 b3 c4 b3@4 ~@3 [f3,f4]]/2", M: "[[e3,e4] [d3,d4] [d3,d4,a4]@8 ~@2]/2",
})).s("gm_lead_2_sawtooth").gain(0.64)

// other · lead 2 sawtooth · "Chorus 2"
const lead_2_sawtooth_2 = note("<~@18 A B C ~ A B D ~@27 E F G ~ E F H@2 ~@26 I@2 J@2 I@2 J@2 ~@19>".pickRestart({
  A: "f4@2 f4 f4@2 e4", B: "g4@2 e4 ~ f4!2", C: "g4@2 a4 g4@6 ~@3", D: "g4 a4 g4@4", E: "~ f4@2 f4 f4@2",
  F: "e4 g4@2 e4 ~ f4", G: "f4@2 g4@2 a4 g4@6 ~", H: "[f4 g4 a4 g4@4 ~@5]/2", I: "[~@2 f4@2 f4 f4@2 e4 g4@2 e4 ~]/2",
  J: "[f4!2 g4 a4 g4@4 ~@4]/2",
})).s("gm_lead_2_sawtooth").gain(0.22)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A ~ A ~ A B A ~ A ~ A ~ A B A ~ A@2 C A@5 D A D A D A E F ~@2 G ~ G ~ G H I ~ G ~ G ~ G H I ~ G@3 I G@4 J G J G J
  G K L ~@2 M N@5 O N@7 O P Q M@2 N M@4 R M R M R M S T A ~@10
>`.pickRestart({
  A: "x", B: "~@4 x!2", C: "x ~@4 x", D: "x!2", E: "~ x!2 ~@3 x ~@5", F: "~@3 x ~@4 x ~@3", G: "~ x ~@4", H: "~@5 x",
  I: "x!2 ~@4", J: "~ x ~@2 x ~", K: "~@3 x!2 ~@3 x ~@3", L: "~@5 x ~@4 x ~", M: "~ x ~", N: "~ x!2 ~@3", O: "x!3 ~@3",
  P: "~@2 x ~ x!8", Q: "x!5 ~@7", R: "~@2 x ~@2 x", S: "~@5 x!2 ~@3 x ~", T: "~@7 x ~@4",
})).gain(0.64).pan(0)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A ~@3 A ~@3 A ~@3 A ~@2 B@8 C ~ C ~ C ~ D E ~@3 F ~@3 F ~@3 F ~@3 F ~@2 G@8 H I H I H I J K ~@2 H@5 L H@7 L H ~
  H@8 ~ M ~ M ~ M N O ~@11
>`.pickRestart({
  A: "~@8 x!2 ~ x!2 ~@11", B: "~ x", C: "~@4 x!2", D: "x ~@2 x ~ x ~@2 x ~ x ~", E: "x ~@4 x ~@6",
  F: "~@12 x!2 ~ x!2 ~@7", G: "~@2 x", H: "~@5 x", I: "x", J: "~@2 x ~@2 x ~ x ~@2 x ~", K: "x ~ x ~@4 x ~@4",
  L: "~@16 x!2 ~ x!2 ~@3", M: "x!2 ~@4", N: "~@4 x ~@2 x ~ x ~@2", O: "x ~ x ~ x ~@4 x ~@2",
})).gain(0.64).pan(0)

// drums · low tom
const low_tom = s("lt").struct("<~@26 A B A B A C ~ D ~@27 E F E F E G H ~@27 I J I J I K L ~@11>".pickRestart({
  A: "~@22 x!2", B: "~@20 x ~@2 x", C: "~@5 x", D: "~@7 x ~@4", E: "~@2 x!2 ~@20", F: "x!2 ~@6", G: "x!2 ~@10",
  H: "~@3 x", I: "~@6 x!2 ~@16", J: "~@4 x ~@2 x ~@16", K: "~ x ~@4", L: "~@11 x",
})).gain(0.64).pan(0)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@25 A ~ B ~ C ~ D ~ E ~@26 F G H I H G J K ~@2 L ~@23 M N L O L N P Q ~@11
>`.pickRestart({
  A: "~@22 x!2", B: "~@6 x!6", C: "~@12 x!3 ~ x ~ x ~ x ~ x ~", D: "~@6 x!5 ~", E: "~ x!2 ~@3 x ~@5", F: "~@2 x!2 ~@20",
  G: "~@8 x!4", H: "x!2 ~@10", I: "~@16 x!3 ~ x ~ x ~", J: "x", K: "~@3 x!2 ~@3 x ~@3", L: "x!4 ~@8", M: "~@6 x!2 ~@16",
  N: "~@10 x!2", O: "~@20 x!3 ~", P: "x!3 ~@9", Q: "~@5 x!2 ~@3 x ~",
})).gain(0.64).pan(0)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@18 A@2 B@2 A@2 C D ~@26 E F B@2 F@2 G H I ~@9 J B@4 K B@7 K B L J M N O M@2 N O L ~@18
>`.pickRestart({
  A: "~ x!5", B: "x!6", C: "x!3 ~ x!2", D: "~ x!2 ~ x!2", E: "~@2 x!4", F: "x ~ x!4", G: "x!4 ~ x", H: "x ~ x!2 ~ x",
  I: "x", J: "~@3 x!3", K: "x!4 ~@2", L: "x!2 ~@4", M: "x!2 ~ x!3", N: "x!5 ~", O: "x!2 ~ x!2 ~",
})).gain(0.64).pan(0)

// drums · high tom
const high_tom = s("ht").struct("<~@27 A ~ B ~ A ~@29 C ~ D ~ C ~@3 E F ~@24 G ~ H ~ G ~@13>".pickRestart({
  A: "~@5 x!3 ~@4", B: "~@10 x ~ x!3 ~@9", C: "~@7 x!3 ~@2", D: "~@14 x ~ x!3 ~@5", E: "~@10 x!2", F: "x!2 ~@10",
  G: "~@9 x!3", H: "~@18 x ~ x!3 ~",
})).gain(0.64).pan(0)

// drums · crash
const crash = s("cr").struct(`<
  ~@18 A B A ~ A B@3 C A C A C A D E ~@18 F G F ~ F G@3 H I H I H I J K ~@2 L ~@14 M N O@3 L O@4 N O N O N P Q A ~@10
>`.pickRestart({
  A: "x", B: "x!2", C: "x ~@2 x!3", D: "x ~@2 x ~@2 x ~ x ~ x ~", E: "~@3 x ~@4 x ~@3", F: "~ x ~@4", G: "~ x ~@2 x ~",
// … 14 more lines

More by Kiss