Strudelify

Quante volte

Rossi Vasco

KeyG majorTempo74 bpm
0:00/0:00
// Quante volte — Rossi Vasco
// 74 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 76 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(74/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 · fretless bass
const bass = note(`<
  A B C D E F G H@2 I J K L F M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS@2 AT
  X AU@6 AV@3 AW@8 AX@2 AY@7
>`.pickRestart({
  A: "~@24 g1@16 ~@2 g1 ~@5", B: "g1@21 ~@3 b1@16 ~@2 b1 ~@5", C: "b1@19 ~@5 e2@16 ~@2 e2 ~@5",
  D: "e2@22 ~@2 c2@16 ~@2 c2@3 ~@3", E: "c2@19 ~@5 c2@15 ~@3 c2 ~@5", F: "c2@24 g1@15 ~@3 g1 ~@5",
  G: "g1@6 d1 ~ d1@7 ~", H: "[d1@60 ~@12 g1@15 ~@3 g1 ~@5]/2", I: "g1@19 ~@5 b1@13 ~@5 b1 ~@5",
  J: "b1@24 e2@15 ~@3 e2 ~@5", K: "e2@24 c2@16 ~@2 c2@3 ~@3", L: "c2@18 a#1@3 b1@3 c2@18 c2 ~@5",
  M: "g1@16 ~@2 d1@4 ~@2 d1@16 ~@2 d1 ~@5", N: "d1@18 ~@6 g1@16 ~@2 g1 ~@5", O: "g1@16 ~@8 g1@13 ~@5 g1 ~@5",
  P: "g1@21 ~@3 b1@15 ~@3 b1 ~@5", Q: "b1@19 ~@5 e2@15 ~@3 e2 ~@5", R: "e2@21 ~@3 c2@15 ~@3 c2 ~@5",
  S: "c2@18 a#1@3 b1@3 c2@15 ~@3 c2 ~@5", T: "c2@22 ~@2 g1@15 ~@3 g1 ~@5", U: "g1@18 d1@4 ~@2 d1@16 ~@2 d1 ~@5",
  V: "d1@3 ~ d1@4", W: "~@24 g1@12 ~@6 g1 ~@5", X: "g1@19 ~@5 b1@15 ~@3 b1 ~@5", Y: "b1@21 ~@3 e2@13 ~@5 e2 ~@5",
  Z: "e2@16 ~@2 d#2@3 d2@3 c2@15 ~@3 c2 ~@5", AA: "c2@18 a#1@3 b1@3 c2@16 ~@2 c2 ~@5",
  AB: "c2@12 b1@3 a#1@3 a1@6 g1@15 ~@3 g1 ~@5", AC: "g1@15 d1@3 d#1@3 d1@18 ~@3 d1 ~@5",
  AD: "d1@18 ~@6 d1@9 ~@9 d1 ~@5", AE: "d1@16 ~@8 g1@13 ~@5 g1 ~@5", AF: "g1@16 ~@2 g1@6 b1@13 ~@5 b1 ~@5",
  AG: "b1@6 c2 d2 e2@4 ~@2 e2 ~", AH: "e2@19 ~@2 d#2 d2 ~ c2@13 ~@5 c2 ~@5", AI: "c2@21 b1 a#1 ~ c2@15 ~@3 c2 ~@5",
  AJ: "c2@12 a#1@10 ~@2 g1@15 ~@3 g1 ~@5", AK: "g1@18 d1@3 ~@3 d1@15 ~@3 d1 ~@5", AL: "d1@21 ~@3 g1@12 ~@6 g1 ~@5",
  AM: "g1@12 f1@3 f#1@3 g1@3 ~@3 g1@13 ~@5 g1 ~@5", AN: "g1@9 ~@3 g1@12 b1@13 ~@5 b1@3 ~@3",
  AO: "b1@12 c2@3 d2@9 e2@13 ~@5 e2@3 ~@3", AP: "e2@10 ~@2 d#2@3 d2@3 c#2@6 c2@12 ~@6 c2 ~@5",
  AQ: "c2@18 b1 a#1 ~ c2@18 ~@3 c2 ~@5", AR: "c2@12 b1@6 a#1@6 g1@15 ~@3 g1 ~@5",
  AS: "[g1@16 ~@2 d1@3 ~@3 d1@15 ~@3 d1 ~@4 d1@23 ~@2 d1@13 ~@5 d1 ~@5]/2", AT: "d1@15 ~@9 g1@16 ~@2 g1 ~@5",
  AU: "[b1@19 ~@5 e2@15 ~@2 e2 ~@5 e2@18 ~@6 c2@16 ~@2 c2 ~@5 c2@18 ~@6 c2@15 ~@3 c2 ~@5 c2@24 g1@13 ~@5 g1 ~@5 g1@24 d1@15 ~@3 d1 ~@5 d1@18 ~@6 d1@25]/6",
  AV: "[~@23 g1@13 ~@5 g1 ~@5 g1@10 ~@2 g1@12 b1@15 ~@3 b1 ~@5 b1@15 ~@3 c2@3 d2@3 e2@15 ~@3 e2 ~@5 e2]/3",
  AW: "[~@11 d#2@3 d2@3 c#2@6 c2@13 ~@5 c2 ~@5 c2@18 a#1 ~ b1 c2@16 ~@5 c2 ~@5 c2@12 b1@3 a#1@9 g1@13 ~@5 g1 ~@5 g1@15 d1@6 ~@3 d1@13 ~@5 d1 ~@5 d1@19 ~@5 g1@13 ~@5 g1 ~@5 g1@12 f1@3 f#1@3 g1@3 ~@3 g1@13 ~@5 g1 ~@5 g1@19 ~@5 b1@13 ~@5 b1 ~@5 b1@9 ~@3 c2 ~ c#2 d2@3 d#2@3 ~@3 e2@15 ~@3 e2 ~@5 e2]/8",
  AX: "[~@11 e2@6 d#2@6 c2@12 ~@6 c2 ~@5 c2@18 a#1 ~ b1 c2@16 ~@5 c2 ~@5 c2]/2",
  AY: "[~@11 b1@3 a#1@3 a1@6 g1@13 ~@5 g1 ~@5 g1@24 d1@13 ~@5 d1 ~@5 d1@18 ~@6 d2@39 ~@9 g1@16 ~@2 g1@3 ~@3 g1@21 ~@3 g1@12 ~@6 g1 ~@5 g1@19 ~@5 g1@42 ~@31]/7",
})).s("gm_fretless_bass").gain(0.55)

// chords · epiano2
const epiano2 = note(`<
  A B C D E B F G H I@3 J@4 K I@3 L@4 M N@2 O P@2 Q R S@2 T@2 U V@2 W X Y Z@4 AA AB AC AD@3 AE@6 AF AG@6 AH AI@3 AJ@2
  AK@2 ~@3
>`.pickRestart({
  A: "~@8 a4@3 g4@3 f#4@2", B: "a4@3 g4@3 f#4@2 a4@3 g4@3 f#4@2", C: "a4@9 g4@9 f#4@6 a4@9 g#4@9 e4@5 ~",
  D: "a4@9 g#4@9 e4@6 a4@8 ~ g4@9 f#4@6", E: "a4@9 g4@9 f#4@6 a4@9 g4@9 f#4@5 ~", F: "a4@3 g4@3 f#4@2 a4@8",
  G: "a4@24 d5@15 ~@3 d5 ~@5", H: "d5@4 [g4,b4]@3 ~, ~@12 d5 ~@11",
  I: "[g4@12 b4@3 ~@3 b4@6 ~@30 b4@6 ~@12 g#4@14 ~@4 [b4,d5]@11 ~ [b4,d5]@5 ~ [b4,d5]@6 ~@6 [g4,c5,e5]@16 ~@8, ~@12 d5@10 ~@2 f#4@35 ~@7 b4@19 ~@5 g#4@25 ~@29, ~@9 d5@5 ~@10]/3", // Bm C
  J: "[~@6 [g4,c5,e5]@15 ~@3 [g4,c5,d#5]@28 ~@2 d#5@6 c5@8 ~@22 [b4,d5]@14 ~@4 [g4,b4,d5]@7 ~@17 [d5,f#5]@17 ~ [a4,d5,f#5]@4 ~@2 [a4,d5,f#5]@4 ~@20 [g4,b4,d5]@7 ~@5, ~@72 g4@32 ~@16 a4@27 ~@45]/4", // C Cm Bm G D G
  K: "~@3 [g4,b4,d5]@7 ~@2 [g4,b4,d5]@9 ~@3", // G
  L: "[~@6 [g4,c5,e5]@15 ~@3 [g4,c5,d#5]@28 ~@2 d#5@6 c5@8 ~@22 [b4,d5]@14 ~@4 [g4,b4,d5]@7 ~@17 [d5,f#5]@17 ~ [a4,d5,f#5]@4 ~@2 [a4,d5,f#5]@4 ~@20 [g4,b4,d5]@7 ~@5, ~@72 g4@31 ~@17 a4@27 ~@45]/4", // C Cm Bm G D G
  M: "~@3 [g4,b4,d5]@7 ~@8 [g4,b4,d5]@6", // G
  N: "[~@6 [g4,b4,d5]@10 ~@2 [b4,d5]@5 ~ [f#4,b4,d5]@29 ~ [f#4,d5]@10 ~@2 d5@4 ~@2 [g#4,d5,e5]@24, ~@9 g4 ~@17 b4@21, ~@33 f#4 ~@14]/2", // G Bm D E7
  O: "~@6 [g#4,b4,d5,e5]@10 ~@2 [g#4,b4,d5,e5]@3 ~@15 [g4,c5,e5]@12", // E7 C
  P: "[~@6 [g4,c5,e5]@13 ~@17 [g4,c5]@15 ~@3 [g4,c5,d#5]@14 ~@16 [b4,d5]@12, ~@6 d#5@7 ~@5 g4@6]/2", // C C5 Cm Bm
  Q: "~@6 g4@9 ~@3 g4@4 ~@14 [a4,d5,f#5]@4 ~@8, ~@3 [b4,d5]@8 ~@13", // D Bm
  R: "~@6 [a4,d5,f#5]@15 ~@9 [a4,d5,f#5]@9 ~@3 [a4,d5,f#5]@4 ~@2", // D
  S: "[[a4,d5,f#5]@6 [g3,b3,d4]@8 ~ [g3,d4]@2 ~ [f#3,d4]@6, ~@5 b3@3]/2", // D G G5 D
  T: "[~@12 b3@7 ~@5 [g#3,b3,d4,e4]@29 ~ e4@12 d4@3 ~@3 [g3,c4,e4]@24, ~@6 d4@13 ~@77]/2", // E7 C
  U: "~@4 c4@3 ~ [g3,c4,d#4]@8, ~@2 g3@5 ~@9", // Cm
  V: "[~@6 c4@3 g3@2 ~ [g3,d4]@14 ~ [g3,d4]@6 ~@6 [a3,d4,f#4]@9, ~ d#4@2 ~ b3@7 ~@5]/2", // G5 D
  W: "~@12 d4@3 ~@3 [d4,f#4]@3 ~@3 [g3,b3,d4]@22 ~@2, ~@3 f#4@5 ~@16", X: "~@6 [g3,b3,d4]@5 ~@13 [g3,b3,d4]@24",
  Y: "~@6 d4@6 b3@5 ~ g3@4 ~@2 [f#3,b3,d4]@24, ~@9 b3 ~@14", // Bm
  Z: "[~@6 [f#3,b3,d4]@8 ~@4 [f#3,d4]@4 ~@2 [g#3,d4,e4]@28 ~@2 [g#3,b3,d4,e4]@14 ~@4 [g3,c4,e4]@28 ~@2 [c4,e4]@16 ~@14 [g3,c4,d#4]@16 ~@2 [g3,c4,d#4]@15 ~@15 [g3,b3,d4]@12, ~@6 b3@11 ~@47]/4", // Bm D E7 C Cm G
  AA: "~@6 [b3,d4]@11 ~@19 [a3,d4,f#4]@12", AB: "~@2 [a3,d4,f#4]@5 ~@5 [a3,d4,f#4]@4",
  AC: "~@6 [a3,d4,f#4]@4 ~@2 [a3,d4,f#4]@11 ~@25", // D
  AD: "[~@6 [g4,b4,d5]@15 ~@3 [f#4,b4,d5]@28 ~@8 b4@7 ~@5 [b4,d5,e5]@34 ~ [b4,d5,e5]@5 ~@32, ~@54 d5@14 ~@4 g#4@41 ~@31]/3", // G Bm E7
  AE: "[~@11 c5@7 ~@6 [g4,c5]@28 ~ c5@6 d#5@6 c5@3 ~@33 [b4,d5]@12 ~@19 d5@30 ~@6 [a4,d5]@47 ~ [g4,b4]@28 ~@2 g4@9 ~@2 g4@2 ~@4 f#4@25, ~@5 e5@14 ~@4 d#5@28 ~@116 f#5@48 d5@28 ~@45, ~@11 g4@2 ~@59 g4@39 ~@20 [a4,f#5]@31 ~@83 [b4,d5]@10 ~@2 [b4,d5]@31]/6", // C5 Bm D5 G D Bm
  AF: "~@3 d5@5 ~ d5@2 ~ [g#4,e5]@12, ~@5 f#4@14 ~@4 d5@25, ~@5 b4@10 ~@2 b4@31", // C#m
  AG: "[~@6 [b4,e5]@10 ~@2 [d5,e5]@3 ~@3 [g4,c5,e5]@28 ~@2 c5@4 ~@2 c5@8 ~@4 g4@28 ~ [g4,c5,d#5]@4 ~@3 [g4,c5]@4 ~ [g4,c5,d#5]@3 ~@4 [g4,b4,d5]@28 ~@2 d5@9 ~@3 d5@2 ~@4 [a4,d5,f#5]@28 ~@2 f#5@8 ~@3 [a4,d5,f#5]@3 ~@3 [g4,b4,d5]@29 ~ [g4,b4,d5]@16 ~@27, ~@5 [g#4,d5]@11 ~ [g#4,b4]@4 ~@32 [g4,e5]@4 ~@2 [g4,e5]@8 ~@4 [c5,d#5]@29 ~@7 d#5@4 ~@38 [g4,b4]@9 ~@3 [g4,b4]@2 ~@34 [a4,d5]@8 ~@83]/6", // E5 Dsus2 C Cm C5 Cm G D …
  AH: "~@5 [g4,b4,d5]@10 ~@2 [g4,b4,d5]@4 ~@2 [f#4,b4,d5]@25", // G Bm
  AI: "[~@5 [f#4,b4,d5]@10 ~@3 d5@2 b4 ~@17 e5@15 ~@4 b4@7 ~ [g#4,b4,e5]@3 ~@3 e5@24 ~@6 e5@9 ~@3 [g4,c5,e5]@4 ~@2 [g4,c5,d#5]@25, ~@17 [f#4,b4]@3 ~@3 [g#4,d5]@30 ~@3 [g#4,d5,e5]@9 d5 ~@5 [g4,c5]@38 ~@35]/3", // Bm E C Cm B5 G#dim E7 C5
  AJ: "[~@5 c5@6 d#5@6 c5@6 a4@15 ~@3 g4@29 ~@13 [a4,d5,f#5]@13]/2", AK: "[~@23 [a4,d5,f#5]@47 ~@26]/2",
})).s("gm_epiano2").gain(0.59)

// chords · string ensemble 2
const string_ensemble_2 = note("<A@8 ~@16 A@8 B@8 A@8 ~@8 C@8 D@8 E@4>".pickRestart({
  A: "[~ g3@2 ~@6 d#4@2 [b3,d4]@2 [a3,d4,f#4]@3, ~ [b3,d4]@6 c4@4 ~@5, ~@3 f#3@4 g3@6 ~@3, ~@5 e4@4 ~@7]/8", // Bm D Bm
  B: "[~ g3@2 ~@6 d#4@2 [b3,d4]@2 [a3,f#4]@2 [g3,b3], ~ [b3,d4]@6 c4@4 ~@2 d4@3, ~@3 f#3@4 g3@6 ~@3, ~@5 e4@4 ~@7]/8", // Bm D G Bm
  C: "[~@24 g3@47 ~@145 d#4@48 [b3,d4]@48 [a3,f#4]@47 [g3,b3]@25, ~ [b3,d4]@6 c4@4 ~@2 d4@3, ~@71 f#3@96 ~ g3@144 ~@72, ~@5 e4@4 ~@7]/8", // Bm D G Bm
  D: "[~@23 g3@48 ~@144 d#4@48 [b3,d4]@48 [a3,d4,f#4]@73, ~@23 [b3,d4]@144 c4@96 ~@121, ~@71 f#3@96 ~ g3@144 ~@72, ~@119 e4@96 ~@169]/8", // Bm D Bm
  E: "[~@22 d4 g4@94 ~@2 [g3,b3,d4,g4]@44 ~@29, ~@22 [g3,b3]@95 ~@75]/4", // G
})).s("gm_string_ensemble_2").gain(0.28)

// other · overdriven guitar
const overdriven_guitar = note("<~@32 A B@3 C@2 D@3 E@2 F@5 ~@8 G H I J@2 K@4 L M N@2 O P@3 ~@3>".pickRestart({
  A: "~ a4",
  B: "[~@11 a4@6 g4@3 e4@2 ~@2 f#4 ~@4 g4@5 e4@2 g4@2 ~ a4@13 ~@19 a4@6 ~ g#4@32 ~@3 a4@3 b4@2 ~@2 c5@19 ~@5, ~@23 g4@4 ~@117]/3",
  C: "[~@5 g5@7 d#5@3 c5@3 b4@11 c5@24 a#5@12 ~ b5@2 c6@3 b5@25]/2",
  D: "[~@15 g4@3 ~ [g4,a4]@2 ~@2 a4@49 g4@34 ~@19 e4@2 ~ g4@2 ~@2 a4@10 ~@2, ~@15 a4 ~@107 d4@4 ~@17]/3", // Gsus2
  E: "[~@3 d4@3 e4 ~@2 g4 ~@2 a4@8 g4@3 ~ d4@29 e4@5 ~@2 c5@11 b4@25]/2",
  F: "[~@4 b4@2 ~ c5@2 ~@2 d5@10 c5@3 b4@3 c5@3 g4@29 g5@13 f#5@8 ~@2 g5@20 ~@5 c#5@2 d5@10 a4@9 b4@22 ~@6 b3@4 a3@4 g3@3 ~ d3@70 ~@2]/5",
  G: "~ b3", H: "~@2 b3@4 ~ b3 ~@3 c4@9 b3 ~ b3@26, ~@3 c4 ~@20", I: "~@2 b3@4 c4@2 ~@3 c4@10 b3 ~ b3@25",
  J: "[~@3 b3@3 ~ [b3,c4]@2 ~@2 c4@10 b3 ~@2 b3@3 c4@3 b3@4 ~@26 b2@2 c3@3 c#3@3 d3@2 ~ d#3@25, ~@35 e3@36 ~@25, ~@62 a#2 ~@33]/2", // Cmaj7
  K: "[~@3 g3@4 a3@3 ~ a3@10 g3@3 d3@28 ~@14 g3@6 f#3@47 g3@40 ~@9 [b4,b5]@24]/4", // B
  L: "~@2 [b4,b5]@2 ~@2 [c5,c6]@2 ~@3 [c5,c6]@13 ~@2 b5@22, ~@25 b4@23", // B C
  M: "~@2 [b4,b5]@3 ~ [c5,c6]@3 ~@2 [c5,c6]@11 ~@2 [b4,b5]@24, ~@24 a#5 ~@23", // B C B
  N: "[~@3 b5 ~@3 [c5,c6]@2 ~@2 [c5,c6]@6 ~@3 [b4,b5] ~@2 [c5,c6]@7 ~@3 g4@20 g4@5 ~@2 a4@5 g4@3 ~ c5@27, ~@2 b4@2 ~@29 g5@29 ~@34]/2", // C B C
  O: "~@2 a#4@5 a4@4 f4@6 c#4@6 c4@25",
  P: "[~@6 c5@2 d5@2 c5@2 [d5,e5]@2 c5@2 f5@2 ~ f5@2 [a#4,c5]@2 ~ g5@92 ~@28, ~@9 c5 ~@62]/3", // Dsus2 A#sus2
})).s("gm_overdriven_guitar").gain(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A B@5 C A B@2 C B@4 ~ D B@7 A B@6 C A B@5 E ~ F G H I J@3 K L@3 A E L@2 M N@3 O N@2 O M O N M ~
>`.pickRestart({
  A: "~@4 x ~@2 x", B: "x ~@3 x ~@2 x", C: "x!2", D: "~@7 x", E: "x ~@23 x ~@17 x ~@4 x", F: "~ x", G: "x!2 ~@2 x ~@3",
  H: "x ~@5 x ~@17 x ~@22 x", I: "~@5 x ~@17 x ~@23 x", J: "~@5 x ~@18 x ~@22 x", K: "~@5 x ~@42",
  L: "~@24 x ~@17 x ~@4 x", M: "~@23 x ~@24", N: "~@23 x ~@17 x ~@5 x", O: "~@24 x ~@16 x ~@5 x",
})).gain(0.71)

// drums · rim
const rim = s("rim").struct("<~@8 A B@5 C A@2 B@6 ~@26 C D@2 E@2 F G ~@16 H E G ~>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2", D: "~@12 x ~@22 x ~@12", E: "~@11 x ~@23 x ~@12", F: "~@11 x ~@24 x ~@11",
  G: "~@11 x ~@36", H: "~@35 x ~@12",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@23 A B C@7 D C@6 E F C@6 E D@2 ~@5 G H I@3 J@2 I K H I@6 L ~@4>".pickRestart({
  A: "~@22 x ~@8 x ~@10 x ~@5", B: "~ x ~@3 x!2 ~@5 x ~@3", C: "~ x ~ x", D: "~@3 x", E: "~ x ~@2", F: "x!8 ~@4 x ~@3",
  G: "~@47 x", H: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@14 x ~@12", I: "~@11 x ~@23 x ~@12",
  J: "~@12 x ~@22 x ~@12", K: "~@11 x ~@35 x", L: "~@11 x ~@36",
})).gain(0.71)

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

// drums · low tom
const low_tom = s("lt").struct("<~@15 [x!2 ~@6] [~ x ~@6] ~@15 [~ x ~ x ~@12] ~@14 [~@6 x!2 ~@8] ~@28>").gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@14 [~@15 x] ~ [~@5 x!3 ~@8] ~@15 [~ x ~@2 x ~ x ~@9] ~@43>").gain(0.71)

// drums · open hat
const open_hat = s("oh").struct("<~@33 A@7 ~ A@6 ~@10 A@3 B A@2 B ~ B A B@4 C ~@4>".pickRestart({
  A: "~@3 x ~@4", B: "~@17 x ~@30", C: "~@11 x ~@36",
})).gain(0.57)

// drums · crash
const crash = s("cr").struct("<~@14 A ~@9 B ~@7 B ~@7 B ~@6 B C@2 ~@6 B ~@7 B ~@6 D ~@2 D ~>".pickRestart({
  A: "~@7 x", B: "~ x", C: "~@3 x", D: "~@23 x ~@24",
})).gain(0.71)

// drums · high tom
const high_tom = s("ht").struct("<~@14 [~@7 x] ~ [~@3 x!2 ~@11] ~@59>").gain(0.64)

// drums · triangle
const triangle = s("triangles:35").struct("<~@75 [~@5 x ~@10]>").gain(6.22)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@75 [~@5 x ~@42]>").gain(4.26)

stack(
  bass, epiano2, string_ensemble_2, overdriven_guitar, kick, rim, snare, hihat, low_tom, mid_tom, open_hat, crash,
  high_tom, triangle, bell_tree
)

More by Rossi Vasco