Strudelify

Quando

Daniele

KeyE minorTempo78 bpm
0:00/0:00
// Quando — Daniele
// 78 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 77 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(78/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.

// chords · piano
const piano = note(`<
  ~ A@2 B@2 C D E F G H I J K L M C D N F G H O J K L M P Q R S T U V W X Y Z AA AB G H I J K AC M P Q R AD T U V W X Y
  Z AA AB G H AE J K L M AF@3 ~@7
>`.pickRestart({
  A: "[[c4,d#4,f#4,a4]@6 [b3,d4,e4,g4]@8 [e4,f#4,a4,d5]@15 ~@3]/2", // Cdim Em7 D
  B: "[[d#4,f#4,c5]@3 [d4,e4,g4,b4]@4 [e4,f#4,a4,d5]@8 ~, a4@7 ~@9]/2", C: "[c4,d#4,f#4,a4]@3 [b3,d4,e4,g4]@5",
  D: "~ d5 c5@6 [c5,e5,g#5]@7 ~, g4 ~", E: "~ e5 d5@14, a5", F: "b4@4 a4@3 ~ c5@4 b4@3 ~, [c4,e4]@7 ~ [d#4,f#4]@8",
  G: "[c4,d#4,f#4,a4]@5 ~@8 b4@3, ~@6 [b3,d4,e4,g4]@7 ~@3, ~@11 g5@5", H: "~@3 g5@4 ~ d5@7 ~, c5@7 ~@9",
  I: "~@2 a4@2 ~@2 e5@5 ~@5, d5@4 b4@7 ~@5", J: "~@6 [e5,g5]@9 ~, ~@2 b4@13 ~, ~@4 c5@11 ~",
  K: "d#5@2 d5@2 f4@2 [d#4,d5,f5,a#5]@9 ~", L: "[f#5,a5]@5 ~ [e5,g5]@7 ~ [g5,b5] ~",
  M: "[f#5,a5]@3 ~ [f#5,a5]@2 [e5,g5]@8 ~@2", N: "~ e5 d5@10 ~@4, a5@3 ~", O: "~ a4 ~ e5@3 ~@2, d5@4 b4@7 ~@5",
  P: "[e4,g4,c5]@7 ~ [f#4,a4,d5]@7 ~", Q: "[g4,c5,e5]@5 ~@3 [g#4,b4]@4 a4@4, ~ [c4,e4]", R: "[f#4,g4,b4,d5]@15 ~",
  S: "[f4,a4,c5,e5]@6 ~@2 e5@4 d5@3 ~, ~@8 [f4,b4]@7 ~", T: "[b4,d5,e5,g5]@3 ~ [d5,a5]@2 [b4,d5]@2, ~ f#5",
  U: "[d5,f#5]@7 ~ [g#4,b4,e5]@8, a5@5 ~@11", V: "[b4,c5,e5,g5]@7 ~ [d5,e5,f#5,a5]@7 ~",
  W: "[f#5,a5]@5 ~ [e5,g5]@7 ~ [g5,b5] ~, [g4,d5]@15 ~", X: "[f#5,a5]@3 [f#5,a5] ~@2 [e5,g5]@8 ~@2, [g4,d5]@7 ~",
  Y: "[d#4,f#4,a4,c5]@5 ~@6 d5 ~ d5@3, ~@3 [d4,e4,g4,b4]@4 ~", // D#dim Em7
  Z: "g5@2 ~@3 g5@3 g#5@4 a5@3 ~, ~ b4@3 ~@4, ~@3 c5@4 ~ [c5,e5]@8", // C
  AA: "~ e5 d5 ~@7 a4@3 f#4@3, a5@13 ~@3, ~@3 e5@10 ~@3, ~@5 b4@8 ~@3",
  AB: "a4@4 a4@4 ~@4 b4@3 ~, [e4,c#5]@8 [d#4,f#4,a4,c5]@7 ~", AC: "[f#5,a5]@5 ~ [e5,g5]@8 [g5,b5] ~",
  AD: "[f4,a4,c5,e5]@7 ~ e5@4 d5@3 ~, ~@8 [f4,b4]@7 ~", AE: "~ a4 ~ e5@3 ~@2, d5 b4@2 ~",
  AF: "[[c4,d#4,f#4,a4]@3 [c4,d#4,f#4,a4]@2 ~ d4@10 [a3,d4,f#4] ~ [d4,f#4]@2 [a3,d4,f#4] ~@11 e5@15 ~, ~@6 [b3,e4,g4]@16 [b3,e4,g#4]@25 ~, ~@18 a3 ~@29]/3", // Cdim D Em E
})).s("gm_piano").gain(0.27).pan(0.7)

// bass · electric bass finger
const bass = note(`<
  ~ A B A C D E F G H I J K L M N O P F Q O R S T U V N W R X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AD AN W R X Y Z
  AA AB AC AD AO AP V G AO R AQ AR U V AS AO AT D ~@7
>`.pickRestart({
  A: "e1@13 ~ e1 ~", B: "e1@3 ~", C: "e1@7 ~", D: "e1", E: "a1@2 d2 a1", F: "g1", G: "f#1 b1", H: "e1!2",
  I: "a1@5 ~ a1@2 f#1@8", J: "f1@5 ~ f1@2 e1@8", K: "a1@5 ~ a1@10", L: "c2@5 ~ c2@10", M: "g1@6 g1@8 ~ g1",
  N: "g1@5 ~ g1@9 ~", O: "e1@15 e1", P: "a1@8 d1@6 ~ d1", Q: "f#1@8 b1@6 ~ b1", R: "a1@6 ~ a1 f#1@6 ~ f#1",
  S: "f1@8 e1@6 ~ e1", T: "a1@12 ~@3 g1", U: "c2@6 c2@7 ~ c2 d2", V: "g1@14 ~ g1", W: "c2@6 ~ c2 b1@6 ~ b1",
  X: "e1@7 e1 e1@4 ~ e1 g1 a1", Y: "d1@6 ~ d1 g1@8", Z: "c2@6 b1 c2 c#2@4 f#1@4", AA: "b1@6 ~ b1 e1@6 ~ e1",
  AB: "a1 f#1", AC: "g1@7 g1 g1@6 g1 d2", AD: "g1@6 ~ g1 g1@7 ~", AE: "e1@7 e1 b1@8", AF: "a1@7 a1 d1@8",
  AG: "g1@7 g1 d2@8", AH: "f#1@6 ~ f#1 b1@7 ~", AI: "e1@7 e1 b1@7 ~", AJ: "a1@7 a1 f#1@6 ~ f#1", AK: "f1@7 f1 e1@8",
  AL: "a1@6 ~ a1 e2@6 a2@2", AM: "c2@7 c2 g2@8", AN: "g1@7 g1 g1@7 ~", AO: "e1@14 ~ e1", AP: "a1@6 ~ a1 d1@6 ~ d1",
  AQ: "f1@6 ~ f1 e1@8", AR: "a1@15 g1", AS: "g1@5 ~ g1@10", AT: "e1@6 e1@9 ~",
})).s("gm_electric_bass_finger").gain(0.31)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A B@2 C D E F G H I J@2 K L M N O P G Q R S T U V W X Y Z@2 AA AB AC AD AE AF AG AH G Q AI AJ AK K AL AM AN Y Z@2 AA
  AO AC AP AE AQ AR AS AT ~@2 AU AV AW AX AY@2 AZ@3 ~@7
>`.pickRestart({
  A: "~@5 b3 e4 f#4", B: "[a4 ~ a4 ~ a4@2 g4@5 b3@2 g4@2 ~ d4@9 ~@3 e4@2 f#4@2, ~@15 b3@10 ~ b3@6]/2",
  C: "a4@2 a4 ~ a4@2 g4@4 g4 [b3,g4]@2 g4@2 b3, ~@10 e4@3 ~@3", D: "b3@5 b3 e4 f#4, d4@3 ~",
  E: "a4@3 a4@3 ~@7 g4 ~@2, ~@6 g4@7 ~@3, ~@11 b3@5", F: "[a3,c4]@5 g4@3 [c4,e4]@3 ~ [f#3,c4]@4",
  G: "b3@3 b3@2 b3@2 ~ b3@2 ~@2 b3@4, f#3@6 ~ f#3@9, ~@3 e4@4 ~@3 e4@6",
  H: "~@4 d#4 ~ e4 f#4, f#3@3 ~, ~@3 c4@4 ~@3 b3@6, ~@5 a3@6 ~@5", I: "a4@3 a4@3 g4@7 [e4,g4]@3",
  J: "[~@22 d4@2 ~@5 d4@3, ~@2 b3@8 d3@7 ~ d3@6 ~@2 e3@5 ~, ~@3 c4@7 ~@2 a3@7 ~ a3@4 ~@3 b3@5, ~@5 g4@5 ~@22, ~@8 d4@4 ~@2 d4@6 ~@4 e4@5 ~@3]/2",
  K: "c4@5 c4@3 [c4,e4]@7 ~", L: "[c4,d#4]@2 [a#3,d4]@2 [g3,d#4]@2 [f3,f4,a#4]@9 ~",
  M: "~@2 d3!3 d3@2 ~ e3@3 ~@2 e3@3, ~@7 d3@2 ~@2 b3@4 ~",
  N: "f#3@3 ~@4 e3@3 b3@2 e4@2 f#4@2, ~@3 b3@7 ~@6, ~@5 f#3@5 ~@6",
  O: "a4@3 a4@3 ~@7 g4 ~@2, ~@6 g4@7 ~@3, ~@11 b3@4 ~", P: "[a3,c4]@5 g4@3 [c4,e4]@4 [f#3,c4]@4",
  Q: "~@3 c4@2 ~@3 d#4@2 ~@2 e4@2 f#4@2, f#3@3 ~, ~@5 a3@5 b3@6",
  R: "a4@3 a4@3 ~@8 g4@2, ~@3 g4@4 ~, ~@5 [b3,e4]@3, ~@3 d4", // E5
  S: "~@11 a3@2 [a3,d4]@3, ~ b3@3 ~ d3@3, ~@3 c4@5 d4@4 ~@4, ~@5 g4@5 ~@6", // D5
  T: "d4@2 ~@3 d4@2 ~ d4@2 ~@3 d4@3, ~@2 d3@7 ~ d3@6, ~@3 a3@4 ~@4 g#3@5",
  U: "c4@2 ~@3 c4@2 [a3,e4] [e4,b4]@2 ~ e4 [g4,c5]@2 d5 ~, ~@2 e3@6 ~@3 a3@3 ~@2, ~@3 g3@4 ~@3 a4@3 ~@3", // A5 E5 C5
  V: "d#5 [g3,d5] [d#4,d#5] [d4,f4]@5, ~ [g3,a#3]@3", // G5 D# Dm Gm
  W: "~ d3 ~ [d3,g4] d3@2 [d3,g4]@2 ~ g4 ~@2 g4@3 [e3,g4], g4@2 ~@6 e3@3 b3@4 ~", // G5 Em
  X: "~ g4 ~ g4 ~@2 g4 ~@2 g4 ~@2 g4@2 ~@2, f#3@3 b3@7 ~@6, ~@5 f#3@5 ~@6, ~@7 e3@4 ~@5",
  Y: "[d4,g4]@2 [g3,c4] ~@4 a3 ~@3 g4@4 a3, ~@3 d4@13, ~@5 g4@5 ~@6, ~@4 a3@3 ~", // G5 C5
  Z: "[~@5 g4@3 ~@5 d4@4 ~@4 d4@5 ~@3 d4@3, a3@7 ~@3 d3@8 ~ g3@6 ~@2 g3@5, ~@3 d4@5 ~@3 a3@7 f#3@7 ~ f#3@6]/2",
  AA: "~@2 e3 f3@2 [c4,e4]@5 f#3 g3@2 [b3,e4]@3", AB: "~@2 f#3 ~@2 d4@2 g3 b3@3 a3@3 ~ a3, d4@3 g3@4 ~@7 f#4@2",
  AC: "f#4@2 ~@3 f#4@3 e4@2 ~ b3@2 e4@3, ~@2 d4@3 ~@11, ~@3 a3@5 ~@2 g#3@6",
  AD: "c4@2 ~ e4@2 c4@3 a3@2 ~ d4@2 a3@3, ~ g3@3 ~ f#3@3", AE: "~@2 d3!6 e3@2 ~ e3@3 ~ e3",
  AF: "f#3@2 f#3 b3@2 f#3@2 ~@5 e4@2 f#4@2, ~@8 e3@7 ~, ~@5 b3@2 ~", AG: "a4@3 a4@3 ~@5 b3@2 g4 ~@2, ~@6 g4@7 ~@3",
  AH: "[a3,c4]@5 g4 ~@2 [c4,e4]@4 [f#3,c4]@4", AI: "a4@3 a4@3 g4@7 e4@3, ~@13 g4 ~@2",
  AJ: "~@5 g4@3 d4@2 ~@3 d4@2 ~, ~ b3@3 ~ d3@3, ~@3 c4@5 ~@3 a3@4 ~",
  AK: "d4@2 ~ a3@2 d4@3 ~@5 d4@3, ~@2 d3@6 e4@5 ~@3, ~@10 e3@5 ~, ~@11 b3@5",
  AL: "[c4,d#4]@2 [a#3,d4]@2 g3@2 [f3,f4,a#4]@9 ~", AM: "~@2 d3!3 d3@2 d3 e3@3 b3@2 e3@3",
  AN: "f#3@3 ~@4 e3@4 ~@5, ~@3 b3@7 ~@6, ~@5 f#3@5 ~@6",
  AO: "~@2 f#3 ~@2 d4@2 g3 ~@3 a3@3 ~ a3, d4@3 g3@4 ~ e4@5 ~ e4@2",
  AP: "c4@2 ~ e4@2 c4@3 d4@2 ~ a3@2 d4@3, ~ g3@3 ~ f#3@3", AQ: "f#3@2 f#3 b3@2 f#3@2 ~ e3@7 ~",
  AR: "~@3 [a3,d4,f#4] ~@2 [b3,d4,g4]@3 ~@7", AS: "~@5 g4@2 ~ [c4,e4]@4 [d4,f#4]@4, ~ b3@3 ~@4, ~@3 c4@4 ~@9",
  AT: "e4@2 f#3 [d4,e4]@2 ~@2 e4@2 ~ e4@2 f#3@3 ~, ~@5 f#3@4 ~@7", // Dsus2
  AU: "~@5 g4@4 ~ d3 a3@2 d4@3, ~ b3@3 ~@4, ~@3 c4@5 ~@8", AV: "~@2 e3 g3@2 d4@5 e3 g#3@2 d4@3",
  AW: "~@3 [c4,d4,e4,g4] ~@2 [c4,d4,e4,g4]@9 ~", AX: "[g3,a#3,d#4]@3 ~@3 [g3,a#3,d#4]@7 ~@3",
  AY: "[[a3,d4,g4]@4 ~@2 [b3,d4]@10 [b3,d4]@2 ~@4 g4@5 ~@5, ~@6 g4@13 d4@12 ~, ~@21 b3@6 ~@5]/2", // Dsus4 Bm
  AZ: "[[c4,d#4,a4]@6 b3@6 b3@9 ~@4 b3 c#4@2 ~@4 [b4,e5]@11 ~@5, ~@6 [e4,g4]@15 ~@7 e4@15 ~@5, ~@30 b3@13 ~@5]/3", // Adim E5 Em
})).s("gm_acoustic_guitar_nylon").gain(0.25).pan(0.3)

// chords · pad warm
const pad_warm = note(`<
  ~ A@2 B@2 C@3 D E@3 F G@3 H@3 D E@3 F I@4 J@5 K L M C@3 D E@3 F N@4 J@5 K L M O@3 D E@3 F G@3 P@3 ~@7
>`.pickRestart({
  A: "[[c4,d#4,f#4,a4]@6 [b3,d4,e4,g4]@8 [e4,f#4,a4,d5]@15 ~@3]/2", // Cdim Em7 D
  B: "[[d#4,f#4,a4,c5]@3 [d4,e4,g4,b4]@4 [e4,f#4,a4,d5]@8 ~]/2", // D#dim Em7 D
  C: "[[c4,d#4,f#4,a4]@3 [b3,g4]@5 [c4,a4]@4 [c4,g#4]@4 d4@6 ~@2, ~@3 [d4,e4]@9 e4@10 ~@2, ~@4 a4 ~]/3", // Cdim Em F Fm Dsus2
  D: "b4 a4 c5 b4, [c4,e4] [d#4,f#4]", // C D#m
  E: "[[c4,d#4,f#4,a4]@3 g4@3 b4@2 [c4,g4]@4 f#4@4 [a3,d5]@4 [b3,e4,b4]@4, ~@3 e4@9 [d4,a4]@8 ~@4, ~@3 [b3,d4]@5 ~@16]/3", // Cdim C5 D5 E5 D5 Bm
  F: "[b3,c4,e4,g4,c5]", // Cmaj7
  G: "[[g3,d#4,g4]@6 [g3,d4,f4,a#4]@8 ~@2 [f#4,a4]@5 ~ [e4,g4]@10 [f#4,a4]@6 [e4,g4]@8 ~@2, c4]/3", // Cm Gm7 F#m Em F#m Em
  H: "[[d#4,f#4,a4]@3 [b3,d4,g4]@5 [c4,g4]@4 g#4@4 [d4,a4]@6 ~@2, c4@2 ~ c4@3, ~@3 e4@9 e4@10 ~@2]/3", // D#dim G C5 D5
  I: "[[g3,d#4,g4]@6 [g3,d4,f4,a#4]@8 ~@2 a4@6 b4@10 a4@6 b4@10 [e4,g4,c5]@8 [f#4,a4,d5]@7 ~, c4, ~ g4@2 ~]/4", // Cm Gm7 C D
  J: "[[e4,g4,c5]@4 [g#4,b4]@2 a4@2 [f#4,g4,b4,d5]@8 [f4,a4,c5,e5]@4 e5@2 d5@2 [g4,b4,d5,e5]@3 ~ [a4,d5]@2 [b4,d5]@2 [d5,f#5]@4 [g#4,b4,e5]@4, ~ c4@9, ~@2 e4@2 ~@6 [f4,b4]@2 ~@2 f#5@2 a5 ~@3]/5", // C G#m Gmaj7 Fmaj7 Em7 D5 Bm D …
  K: "[b4,c5,e5,g5] [a4,e5,f#5]", L: "[f#5,a5]@3 [e5,g5]@5, [g4,d5]", M: "[f#5,a5]@3 [e5,g5]@4 ~, [g4,d5]@7 ~",
  N: "[[g3,d#4,g4]@6 [g3,d4,f4,a#4]@8 ~@2 [f#4,a4]@5 ~ [e4,g4]@10 [f#4,a4]@6 [e4,g4]@8 ~@2 [e4,g4,c5]@8 [f#4,a4,d5]@7 ~, c4]/4", // Cm Gm7 F#m Em F#m Em C D
  O: "[[c4,d#4,f#4,a4]@3 [b3,g4]@5 [c4,g4]@4 [c4,g#4]@4 [d4,a4]@6 ~@2, ~@3 [d4,e4]@9 e4@10 ~@2]/3", // Cdim Em C5 Fm D5 Dsus2
  P: "[[d#4,f#4,a4]@3 [b3,d4,e4]@8 ~@5 e5@8, c4, ~@3 g4@5 ~@3 [b3,e4,g#4]@13]/3", // D#dim E7 E
})).s("gm_pad_warm").gain(0.1).pan(0.4)

// other · muted trumpet
const muted_trumpet = note("<~@25 A B ~@2 C D E ~@2 A B ~@9 A B ~@2 C D E ~@2 A B ~@9 A B ~@10>".pickRestart({
  A: "a4@5 ~ g4@7 ~ b4 ~", B: "a4@3 g4@4 ~", C: "~ e4 f#4 g4", D: "a4@3 b4", E: "g4 ~",
})).s("gm_muted_trumpet").gain(0.14).pan(0.4)

// chords · pad halo
const pad_halo = note(`<
  ~@4 A ~ B C D ~@3 E F G H ~ I J K ~@3 L F G H ~@10 I J K ~@3 L F G H ~@10 I J K ~@3 L F G H M N@2 ~@7
>`.pickRestart({
  A: "[g5,b5,e6]@6 [a5,c#6,f#6]@5 ~@5", B: "[a5,c6,g6] [c6,e6,g#6]", C: "a6 ~", D: "b5 a5 c6 ~",
  E: "~@2 b5@2 c6@2 [e6,g6]@9 ~", F: "~@2 d6@2 d#6@2 [f6,a#6]@9 ~", G: "[f#6,a6]@4 ~@2 [e6,g6]@6 ~@2 [g6,b6] ~",
  H: "[f#6,a6]@5 ~ [e6,g6]@8 ~@2", I: "[a5,c6,g6]@5 ~@3 [c6,e6,g#6]@8", J: "a6@5 ~@11", K: "b5@4 a5@4 c6@3 ~@5",
  L: "~@2 b5@2 c6@2 e6@9 ~, ~@6 g6@7 ~@3", M: "f#5@5 ~ e5@6 ~@4", N: "[[a4,d5,f#5]@2 ~ [b4,e5,g#5]@13]/2",
})).s("gm_pad_halo").gain(0.08).pan(0.3)

// other · acoustic guitar nylon
const acoustic_guitar_nylon_2 = note("<~@55 A B@3 C D E F G H I J ~@10>".pickRestart({
  A: "~@6 e4 f#4, ~@5 b3@2 ~",
  B: "[a4@2 a4@2 a4@2 g4@3 e4 f#4 g4 a4 b4 ~ b4@2 ~ b4 b4@2 ~ a4@8 ~ a4@3 a4@3 b4@2 ~ d4@5 b3 c4 d#4]/3",
  C: "e4 f#4 g4 a4 b4!3 a4 g4 ~ b3@2 e4@2 f#4@2, ~@9 f#4@2 ~@5",
  D: "[a4,c5]@2 [a4,c5]@2 [a4,c5]@2 g4@6 b4 c5 d5@2, ~@6 b4@5 ~@5", E: "d5@2 ~ c5@2 ~@2 b4@2 a4@4 b4 ~ c5",
  F: "c5@2 b4 b4@2 a4 ~ a4@2 g#4@4 a4@2 b4", G: "b4@2 c5 c5@11 ~@2", H: "~@3 a#3 d4 f4!4 g4 c4 a#3 f4@4, ~ g3 ~@6",
  I: "~ b3@2 d4@2 g4@3 ~ a4 [a4,a#4] a4!2 g4@3", J: "~ a4 g4 d4@2 b3@2 a3@2 g3@2 ~@5",
})).s("gm_acoustic_guitar_nylon").gain(0.37).pan(0.6)

// other · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_3 = note(`<
  ~@57
  [~@5 c5 ~@10]
  ~@3
  [~@2 c5 ~@2 b4@2 ~@9]
  ~@3
  [~@11 g4 ~@4]
  [~@11 e3@2 d3@3]
  ~@10
>`).s("gm_acoustic_guitar_nylon").gain(0.19).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~ A@3 B@11 A@3 B@2 A@2 B@4 A C@3 D C@19 D C@5 B E B@3 E B@4 A@4 ~@7>".pickRestart({
  A: "x", B: "x ~@14 x", C: "x ~@6 x!2 ~@7", D: "x!2", E: "x ~@7 x ~@6 x",
})).gain(0.48)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@16 A@2 ~@2 A@2 ~@5 A ~@2 B ~@16 A ~@2 B ~@6 C ~@3 C ~@5 A ~@9>".pickRestart({
  A: "~@15 x", B: "~@7 x ~@7 x", C: "~@7 x ~@8",
})).gain(0.29)

// drums · rim
const rim = s("rim").struct("<~@27 [~ x ~@2]!7 [~ x ~@3 x ~@2]!13 [~ x ~@2]!7 [~ x ~@3 x ~@2]!2 ~@11 [x!2 ~@14] ~@9>")
  .gain(0.38)

// drums · snare
const snare = s("sd").struct("<~@27 A@7 ~@2 B@2 C D B@4 E B F A@7 ~@23>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x!2 ~@6 x ~@3", D: "~@4 x ~@4 x ~@3 x ~ x", E: "~@4 x ~@8 x ~ x",
  F: "~@4 x ~@7 x!2 ~@2",
})).gain(0.24)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@16 A B C A@2 B C A D E A ~ F ~ G ~ H I J K A B C A@2 B C A D E A ~ F ~ G ~ H I J K A B C A@2 B C A D E A L ~@9
>`.pickRestart({
  A: "~@7 x ~@3 x ~@4", B: "x!2 ~@6 x!2 ~ x ~@3 x", C: "~@3 x ~@7 x ~@3 x", D: "~@7 x!2 ~@4 x ~@2", E: "~@3 x ~ x ~@10",
  F: "~@3 x", G: "~@11 x ~@4", H: "~@5 x ~@10", I: "~@9 x ~@6", J: "~ x", K: "~@3 x ~@4", L: "~ x ~ x ~@4 x ~@2 x ~@4",
})).gain(0.1)

// drums · open hat
const open_hat = s("oh").struct("<~@34 [~ x ~ x]!2 ~@18 [~ x ~ x]!2 ~@21>").gain(0.29)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@3 A ~@4 A ~@10 A ~ A ~@3 A ~@8 A ~@4 A ~ A ~@3 A ~@4 A ~@3 A ~@4 A ~ A ~ A ~@7
>`.pickRestart({
  A: "x",
})).gain(0.29)

// drums · ride
// … 68 more lines

More by Daniele