Strudelify

Rispetto

Zucchero

KeyC minorTempo116 bpm
0:00/0:00
// Rispetto — Zucchero
// 116 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 "E.GUITAR" overdriven guitar (copy of ch 7 "E.GUITAR" overdriven guitar, 0.5 beats early)
// note: Full arrangement: all 130 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/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 finger
const bass = note(`<
  ~@8 A B C D E F G D H I J D K I L D M N O P Q N R S T I C D U I V D W B X D U I Y D Z AA R AB AC AD AE AB T AF AG AH
  AI AJ AG AK AL I AM D AN I V D AO F AP D AQ AR AS D U AA R AB AT AD AU AV AW AF AG AX AY AJ AG AK AZ BA BB BC BD I V
  BC BE I BF BC BG I BH BI BJ BK Y BL BM I BN D BO F AP D AQ I V D AO BP
>`.pickRestart({
  A: "~@2 c4 bb1", B: "c2@2 g1@2 bb1@2 b1@2 c2@3 ~@5", C: "eb2 ~ eb2@3 ~ eb2 ~ eb2@3 ~@4 eb2",
  D: "f2 ~ f2@2 eb2 ~ eb2@2 c2 ~ c2@2 ~@4", E: "f1 ~ f2@2 eb2 ~ eb2@2 c2 ~ c2@2 ~@2 bb1 b1",
  F: "c2 gb1 g1@2 bb1@2 b1@2 c2@4 ~@4", G: "eb2 ~ eb2@2 ~@2 eb2@4 ~@5 eb2", H: "f1 ~ f2@2 eb2 ~ eb2@2 c2 ~ c2@2 ~@4",
  I: "c2 gb1 g1@2 bb1@2 b1@2 c2@3 ~@5", J: "eb2 ~ eb2@2 ~@2 eb2 ~ eb2@3 ~@4 eb2",
  K: "f1 ~ f2!2 eb2 ~ eb2@2 c2 ~ c2@2 ~@4", L: "eb2 ~ eb2@2 ~@2 eb2 ~ eb2@4 ~@3 eb2",
  M: "f1 ~ f2!2 eb2 ~ eb2@2 c2 ~ c2@2 ~@2 bb1@2", N: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@2 db2 d2",
  O: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2@2 eb2 e2", P: "f2 ~ f1 ~ f2@2 f1 ~ f1 ~ f1 ~ f1@2 g1@2",
  Q: "ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1@2 bb1@2", R: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2@2",
  S: "f1 ~ f2@2 f1 ~ f2 ~ f1@2 f2 ~ f1@2 g1@2", T: "ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1@2 ab2@3 ~",
  U: "f1 ~ f2!2 eb2 ~ eb2@2 c2 ~ c2@2 bb1@2 b1@2", V: "eb2 ~ eb2@3 ~ eb2@2 eb2@4 ~@2 g2 gb2",
  W: "f1 ~ f2!2 eb2 ~ eb2@2 d2 ~ d2@2 bb1@2 b1@2", X: "eb2 ~ eb2@3 ~ eb2@2 eb2@3 ~@5",
  Y: "eb2 ~ eb2@2 ~@2 eb2@2 eb2@3 ~@4 eb2", Z: "f1 ~ f2@2 eb2 ~ eb2@2 c2 ~ c2@2 bb1@2 b1@2",
  AA: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@2", AB: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1@2 g1@2",
  AC: "ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~", AD: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@2 d2 ~",
  AE: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2@2 f2@2", AF: "g1 ~ g1@3 ~ d2@4 c2@4 bb1@2",
  AG: "~@2 bb1@3 ~ f2@4 eb2@4 d2@2", AH: "ab1@2 ab1 ~ ab1@3 ~ f1 ~ f1@3 ~ ab1@2",
  AI: "~@2 ab1@2 ab1@3 ~ eb2 ~ eb2@2 f1@2 gb1@2", AJ: "g1@2 g1@3 ~ d2@4 c2@3 ~ bb1@2", AK: "eb2@4 d2@4 c2@4 bb1 ~ g1 ~",
  AL: "~@4 g1@8 g2@3 ~", AM: "eb2 ~ eb2@3 ~ eb2@2 eb2@3 ~@4 eb2", AN: "f1 ~ f2@2 eb2 ~ eb2@2 c2 ~ c2 ~ bb1@2 b1@2",
  AO: "f1 c2 f2 f1 eb2 ~ eb2@2 d2 ~ d2@2 bb1 f1 bb1@2", AP: "eb2 ~ eb2@2 ~@2 eb2@2 eb2@3 ~@5",
  AQ: "f1 ~ f2@2 eb2@2 eb2 ~@5 c3@2 ~@2", AR: "c2 ~ g1@2 bb1@2 b1@2 c2@4 ~@4",
  AS: "eb2 ~ eb2@2 ~@2 eb2@2 eb2@4 ~@3 eb2", AT: "ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1@2 eb2@2 d2@2",
  AU: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2@2 f2 ~", AV: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1@2 g1 ~",
  AW: "ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1@2 ab1@2 g1@2", AX: "ab1@2 ab1 ~ ab1@2 g1@2 f1 ~ f1@3 ~ ab1@2",
  AY: "~@2 ab1@2 ab1@4 eb2 ~ eb2@2 f1@2 gb1@2", AZ: "~@4 g1@11 ~", BA: "~@4 bb1@2 b1@2 c2@3 ~@5",
  BB: "eb2 ~ eb2@3 ~ eb2 g1 eb2@3 ~@5", BC: "f2 ~ f2@2 eb2@2 eb2@2 c2 ~ c2@2 ~@4",
  BD: "f1 ~ f2!2 eb2@2 eb2@2 c2 ~ c2@2 bb1@2 b1@2", BE: "f1 c2 f2 f1 eb2@3 f1 d2@3 f1 d2 f1 db2@2",
  BF: "eb2 ~ eb2@3 ~ eb2@2 eb2@2 ~@5 eb2", BG: "f1 ~ f2!2 eb2@2 eb2@2 c2 ~ c2 ~ bb1@2 b1@2",
  BH: "eb2 ~ eb2@3 ~ eb2@2 eb2@4 ~@3 eb2", BI: "f2 ~ f2@2 eb2 ~ eb2@2 c2 ~ c2@2 ~@2 f2@2",
  BJ: "~ g1 eb2@3 g1 d2@3 g1 d2@3 g1 db2@2", BK: "~ c2 ~ g1 bb1@2 b1@2 c2@3 ~@5", BL: "f2@3 ~ g2@3 ~ f2@3 ~ eb2@3 ~",
  BM: "f2@3 ~ eb2@3 ~ d2@3 ~ db2@3 ~", BN: "eb2 ~ eb2@2 ~@2 eb2@2 eb2@4 ~@4",
  BO: "f1@2 ~@2 f1!2 g1 ~@2 f1 ~ bb1 c2 d2 f2@2", BP: "c2 ~@7",
})).s("gm_electric_bass_finger").gain(0.43)

// bass · slap bass 1 · "SLAP BASS"
const bass_2 = note(`<
  ~@11 A B ~@2 A C ~@2 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@19 A ~@3 A D ~@2 A E ~@2 A B ~@18 A ~@3 A ~@3 A F ~@6 G H ~@2
  A I ~@2 A E ~@2 A D ~
>`.pickRestart({
  A: "~@7 eb2", B: "~@3 f2 ~@3 eb2 ~@8", C: "~@3 f2 ~@12", D: "~@5 f2 ~@3 f2 ~@6", E: "~@3 f2 ~@6 f2@2 ~@2 f2@2",
  F: "~@5 f2 ~@10", G: "~@3 f2 ~@3 g2 ~@3 f2 ~@3 eb2", H: "~@3 f2 ~@3 eb2 ~@3 d2 ~@3 db2", I: "~@3 c2 ~@4 bb2 ~ f2 ~@5",
})).s("gm_slap_bass_1").gain(0.76)

// chords · electric guitar clean · "E.GUITAR"
const electric_guitar_clean = note(`<
  ~ A B C D A B D@2 A E D C A E D@2 F G H@2 F G H@2 I J K L I J K L A M C D N O C D F G K P F G H@2 I J K L I J K L Q@2
  R S T Q U V@2 B C D A B D@2 A E D C A E D@2 I J K L I J K L Q@2 R S T Q U V@2 M C D N O C D A B C D A B D@2 A E D C A
  E D@2 A M C D N O C D ~
>`.pickRestart({
  A: "~@4 [g4,c5,eb5]!5 ~ [g4,bb4,eb5] ~@3 [eb4,g4,c5] ~, ~@4 c4@5 ~@7", // Cm Eb Cm
  B: "~@4 [eb4,g4,c5]!3 [g4,c5] [eb4,g4,c5] ~ [eb4,f4,c5] ~@3 [eb4,g4,c5] ~, ~@4 bb3@5 ~@7", // Cm C5 Cm F7 Cm
  C: "~@4 [f3,a3,eb4,f4]@3 [eb4,f4] ~@2 [a3,eb4,f4] ~@3 [a3,eb4,f4] ~", // F7 Ebsus2 F7
  D: "~@4 [f3,a3,eb4,f4]@3 [a3,eb4,f4] ~@2 [a3,eb4,f4] ~@3 [a3,eb4,f4] ~", // F7
  E: "~@4 [eb4,g4,c5]!5 ~ [eb4,f4,c5] ~@3 [eb4,g4,c5] ~, ~@4 bb3@5 ~@7", // Cm F7 Cm
  F: "~@4 [g3,eb4,g4,c5]@3 [eb4,g4,c5] ~@2 [eb4,g4,c5] ~@3 [g3,eb4,g4] ~", // Cm
  G: "~@4 [g3,c4,eb4,bb4]@3 [c4,eb4,bb4] ~@2 [c4,eb4,bb4] ~@3 [c4,eb4,bb4] ~", // Cm7
  H: "~@4 [a3,c4,f4,a4]@3 [c4,f4,a4] ~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~", // F
  I: "~@4 [g3,eb4,g4,c5]@3 [eb4,g4,c5] ~@2 [eb4,g4,c5] ~@3 [eb4,g4,c5] ~", // Cm
  J: "~@4 [g3,eb4,g4,bb4]@3 [eb4,g4,bb4] ~@2 [g3,eb4,g4] ~@3 [g3,eb4,g4] ~", // Eb Cm
  K: "~@4 [a3,c4,f4,a4]@3 [c4,f4,a4] ~@2 [c4,f4,a4] ~@3 [c4,f4,a4] ~", // F
  L: "~@4 [ab3,c4,ab4,c5]@3 [c4,ab4,c5] ~@2 [c4,ab4,c5] ~@3 [c4,ab4,c5] ~", // Ab Fm
  M: "~@4 [eb4,g4]!2 [eb4,g4,c5]!3 ~ [eb4,f4,c5] ~@3 [eb4,g4,c5] ~, ~@4 bb3@5 ~@7, ~@2 c5 ~@5", // Eb Cm F7 Cm
  N: "~@4 [c5,eb5]!2 [g4,c5,eb5]!3 ~ [g4,bb4,eb5] ~@3 [eb4,g4,c5] ~, ~@4 c4@5 ~@7, ~@2 g4 ~@5", // Cm Eb Cm
  O: "~@4 [eb4,g4,c5] [g4,c5]!3 [eb4,g4,c5] ~ [eb4,f4,c5] ~@3 [eb4,g4,c5] ~, ~@4 bb3@5 ~@7, ~@5 eb4@3 ~@8", // Cm C5 Cm F7 Cm
  P: "~@4 [a3,c4,f4,a4]@3 [c4,f4,a4] ~@2 [c4,f4,a4] ~@3 [a3,c4,f4] ~", Q: "~ bb4@15, [f3,bb3,d4,f4]",
  R: "[eb3,ab3,c4,ab4,c5]@9 ~ g4 ab4 g4@2 eb4@2", S: "~@3 eb5@5, c4, ~ g4@3", T: "[f3,bb3,d4,f4,bb4]",
  U: "eb4@2 d4@2 c4@2 bb3 g3",
  V: "[~@4 [g3,b3,eb4,g4,b4]@16 [g4,c5,eb5]!5 ~ [g4,bb4,eb5] ~@3 [eb4,g4,c5] ~, ~@20 c4@5 ~@7]/2", // Gaug Cm Eb Cm
})).s("gm_electric_guitar_clean").gain(0.25).pan(0.2)

// other · electric guitar clean · "E.GUITAR"
const electric_guitar_clean_2 = note("<~@25 A@3 B A@3 C ~@16 A@3 B A@3 C ~@24 A@3 B A@3 C ~@41>".pickRestart({
  A: "bb3 c4 ~ c4 ~@2 g3 ~ bb3 c4 ~ c4 ~@4", B: "bb3 c4 ~ c4 ~@2 bb3 ~ eb4!2 d4 ~ eb4 ~ c4 ~",
  C: "bb3 c4 ~ c4 ~@2 g3 ~ eb4!2 d4 ~ c4@2 ~@2",
})).s("gm_electric_guitar_clean").gain(0.31).pan(0.7)

// other · overdriven guitar · "E.GUITAR"
const overdriven_guitar = note("<~@97 A@2 B C D E F@2 G ~@24>".pickRestart({
  A: "[~@6 g5@8 ~ g5@2 eb5 g5 ~ eb5@9 ~@3]/2", B: "c5@2 eb5!2 c5@4 f4@5 g3@2 ~",
  C: "c4@2 eb4 g4@2 eb4 f4 ~ f4@2 eb4@3 f4 ~@2", D: "~@4 bb4 [c5,d5] eb5 [f5,g5] f5@5 ~@3, ~@8 eb5 ~@7",
  E: "bb4 c5 [d5,eb5,g5] f5 f5@4 ~@8, ~@4 eb5 ~@11", // Ebmaj7
  F: "[bb4 [c5,d5] eb5 [f5,g5] eb5 [eb5,f5] d5 [c5,d5] c5 [a4,bb4] c5 [a4,bb4] g4 f4@5 ~@2 f4 [g4,a4] bb4 [g4,a4] bb4 [c5,d5] a4 [bb4,c5] d5 [eb5,f5] g5 [d5,eb5]]/2", // Csus2 Fsus2 Ebsus2 Csus2 Bbmaj7 Gsus2 Csus2 Bbsus2 …
  G: "f5 [g5,a5] bb5@14", // Gsus2
})).s("gm_overdriven_guitar").gain(0.24).pan(0.8)

// other · sitar
const sitar = note(`<
  ~@10 A ~@3 A ~@19 A ~@3 A ~@18 B@3 C B@2 D E ~ A ~@3 A ~@3 A ~@3 A ~@10 F@3 C F@2 D E ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@11
>`.pickRestart({
  A: "g4@3 ~ eb4@3 ~ c4@3 ~ bb3@2 a3@2", B: "~@6 f3@2 c4@3 ~ bb3@3 ~", C: "~@4 eb4@2 d4@2 c4@3 ~ bb3@3 ~",
  D: "eb4@3 ~ d4@3 ~ c4@3 ~ bb3@2 g3 ~", E: "~@2 g3@5 ~", F: "~@4 f3@3 ~ c4@3 ~ bb3@3 ~",
})).s("gm_sitar").gain(0.19).pan(0.8)

// chords · epiano2 · "E.PIANO"
const epiano2 = note(`<
  ~@9 A B C D E B C F ~@16 A B C D E B C F ~@16 G@2 H@2 G@2 I J A B C D E B C F A B C D E B C F ~@8 G@2 H@2 G@2 I J A B
  C D E B C F A B C D E B C F A B C D E B C F A B C D E B C F ~
>`.pickRestart({
  A: "[c4,eb4,g4]@15 ~", B: "[eb4,g4,bb4]@15 ~", C: "[c4,f4,a4]@15 ~", D: "[c4,f4,a4]@7 ~ [d4,g4,bb4]@7 ~",
  E: "[c4,eb4,g4]", F: "[c4,f4,a4] [d4,g4,bb4]", G: "[bb3,d4,f4]@15 ~", H: "[[ab3,c4,eb4]@31 ~]/2",
  I: "eb4@2 d4@2 c4@2 bb3 g3", J: "~ [g3,b3,eb4,g4]@3",
})).s("gm_epiano2").gain(0.22).pan(0.6)

// other · synth strings 1 · "STRINGS"
const synth_strings_1 = note(`<
  ~@5 A@4 ~ B@2 ~@2 B@2 ~@9 C@4 D E F@2 ~ B@2 ~@2 B@2 ~@9 G@2 H@2 I@4 ~@7 J ~ B@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~ C@4 D E F@2
  ~@3 K ~@3 J ~ B@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~ L@4 M@4 ~
>`.pickRestart({
  A: "g5/4", B: "[g6@2 eb6@2 c6@2 bb5 a5@2 ~@7]/2", C: "[c6@14 f5 g5]/4", D: "c6", E: "bb5", F: "c6/2",
  G: "[c6@3 bb5]/2", H: "[c6@6 f5 g5]/2", I: "c6/4", J: "~ bb5@3", K: "~@4 eb6@2 d6@2 c6@4 bb5@3 ~",
  L: "[g5 a5, [c5,c6]@31 ~]/4", M: "[g5@8 a5@7 ~, c6, c5@7 ~]/4",
})).s("gm_synth_strings_1").gain(0.28).pan(0.7)

// chords · pad poly · "SYNTH"
const pad_poly = note(`<
  ~@9 A B ~@2 A B ~@5 C ~@4 D E F G H E I J A B ~@2 A B ~@4 K L ~@2 M N O P F Q O E R S T@2 U@2 T@2 V W A B ~@2 A B ~@2
  A B ~@2 A B ~@2 O P F Q O E R S T@2 U@2 T@2 V W A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 X Y Z@2 X Y AA@2 ~
>`.pickRestart({
  A: "[bb4,c5,eb5]@11 ~@5", B: "g5@2 eb5@2 c5@2 bb4 a4", C: "~@11 c4 [eb4,f4] g4 f4 ~",
  D: "~@6 [g3,c4,eb4] ~ [g3,c4,eb4]@2 ~ [g3,c4,eb4] ~@4", // Cm
  E: "~@4 [g3,c4,eb4] ~ [g3,c4,eb4] ~ [g3,c4,eb4]@2 ~ [g3,c4,eb4] ~@4", // Cm
  F: "~@4 [a3,c4,eb4] ~@3 [a3,c4,eb4]@3 [a3,c4,eb4] ~@4", G: "[eb3,ab3,c4] [f3,ab3,d4] [ab3,c4,eb4] ~",
  H: "~@4 [g3,c4,eb4] ~@3 [g3,c4,eb4]@3 [g3,c4,eb4] ~@4", // Cm
  I: "~@4 [a3,c4,eb4] ~ [a3,c4,eb4] ~ [a3,c4,eb4]@2 ~ [a3,c4,eb4] ~@4", // Adim
  J: "[eb3,ab3,c4] [f3,bb3,d4] [g3,c4,eb4] [ab3,c4,eb4]", K: "~@6 bb4 ~ [g4,c5] ~@2 [g4,c5] ~@4",
  L: "~ g3 [bb3,eb4] g3 [c4,f4] g3 ~ eb4 [c4,f4]@2 eb4 [c4,f4] ~@4", M: "~@4 f5@3 ~@3 g4@2 [f4,bb4]@2 eb4 ~",
  N: "~ a3 c4 d4 [a3,f4] ~@3 f3 g3 [eb3,d4] ~ [d3,c4] ~ c3@2, ~ g4 ~@2 eb4 ~@3", // Dm Ebmaj7 D7
  O: "~@4 [g3,c4,eb4] ~ [g3,c4,eb4] ~ [g3,c4,eb4]@3 [g3,c4,eb4] ~@4", // Cm
  P: "~@4 [g3,c4,eb4] ~@3 [g3,c4,eb4]@2 ~ [g3,c4,eb4] ~@4", Q: "[eb3,ab3,c4] [f3,ab3,d4] [ab3,c4,eb4] [bb3,d4,f4]",
  R: "~@4 [a3,c4,eb4] ~@3 [a3,c4,eb4]@2 ~ [a3,c4,eb4] ~@4", S: "[eb3,ab3,c4] [f3,bb3,d4] [g3,c4,eb4] [eb3,ab3,c4]",
  T: "[f3,bb3,d4]", U: "[[eb3,ab3,c4]@31 ~]/2", V: "eb3@2 d3@2 c3@2 bb2 g2", W: "~ [g3,b3,eb4,g4]@3", X: "c4", Y: "bb3",
  Z: "[a3@3 bb3]/2", AA: "[a3@3 ~]/2",
})).s("gm_pad_poly").gain(0.24).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@19 B A@11 C A@15 D A@7 D A@6 E F A@7 G A@7 H I@3 J I@3 K A@3 H A@3 L A@27 M A@2 H ~ D
>`.pickRestart({
  A: "x!2", B: "x ~ x!3 ~ x ~", C: "x ~ x ~@2 x!2 ~", D: "x", E: "x ~@3 x ~@2 x", F: "~@3 x ~@12", G: "x ~@3 x!2 ~ x",
  H: "x ~@3 x!2 ~@2", I: "~ x ~ x ~ x ~ x", J: "~@2 x!2 ~@4 x!2 ~@4 x!2", K: "x ~@2 x ~@12", L: "~@2 x!2 ~@4 x!2 ~@6",
  M: "x!2 ~ x ~ x ~@2",
})).gain(0.48)

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

// drums · low tom
const low_tom = s("lt").struct("<~@24 [~@14 x!2] ~@105>").gain(0.48)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A B C A D E D F G A D E G D@2 H G D I D J A G K ~ L K ~ M G K ~ C F M A M I M A D@3 A C@2 F ~ A B N ~@5 F@2 C K ~@5
  C A F O D F ~ C I@2 F J C L ~@9 J A M A ~ C L ~ A P F@2 O C ~@2 M B M ~ C D I ~ M D G A C M C A B C A ~ C@2 ~@3
>`.pickRestart({
  A: "~ x ~ x ~@4", B: "~ x ~@5 x", C: "~@3 x ~@3 x", D: "~ x ~ x ~ x ~ x", E: "~@2 x ~@3 x!2 ~@8", F: "~@3 x ~@4",
  G: "~@3 x ~ x ~ x", H: "~ x ~ x ~@2 x ~", I: "~ x ~ x ~ x ~@2", J: "~@5 x ~ x", K: "~ x ~@6", L: "~@3 x ~ x ~@2",
// … 94 more lines

More by Zucchero