Strudelify

Spiagge

Fiorello

KeyC majorTempo123 bpm
0:00/0:00
// Spiagge — Fiorello
// 123 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 "CHIT 2" slap bass 1 (copy of ch 5 "CHIT 1" electric guitar muted, 0.25 beats early)
// note: Full arrangement: all 139 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(123/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 · "Soft karaoke"
const piano = note(`<
  A B C D C E C F ~@33 C B G D H I J K ~@64 L M N O P Q R S T M N O P Q R S T M N O P Q R S U ~
>`.pickRestart({
  A: "[f3,f4]@2 [f4,a4,c5] ~@2 [f4,a4,c5] ~@2 [g3,g4,b4,d5]@3 [g4,b4,d5] ~@2 [g4,b4,d5] ~", // F G
  B: "[c4,c5]@2 [g4,c5,e5] ~@2 [g4,c5,e5] ~@2 [g4,c5,f5]@2 e5 ~ [g4,c5,d5] ~ [g4,c5,e5] ~", // C Csus4 Gsus4 C
  C: "[f3,f4]@2 [f4,a4,c5] ~@2 [f4,a4,c5] ~@2 [g3,g4,b4,d5]@2 ~ [g4,b4,d5] ~@2 [g4,b4,d5] ~", // F G
  D: "[c4,c5]@2 [g4,c5,e5] ~@2 [g4,c5,e5] ~@2 [g4,c5]@2 [g4,e5] ~ [g4,c5,d5] ~ [g4,c5,e5] ~, ~@8 f5 ~@7", // C C5 C Gsus4 C
  E: "[c4,c5]@2 [g4,c5,e5] ~@2 [g4,c5,e5] ~@2 [g4,c5,f5]@2 [g4,e5] ~ [g4,c5,d5] ~ [g4,c5,e5] ~", // C Csus4 C Gsus4 C
  F: "[c4,c5]@2 [g4,c5,e5] ~@2 [g4,c5,e5] ~@2 [g4,c5,f5] ~ [g4,c5,e5] ~ [g4,c5,d5] ~ [g4,c5,e5] ~", // C Csus4 C Gsus4 C
  G: "[f3,f4]@2 [f4,a4,c5] ~@2 [f4,a4,c5] ~@2 [g4,b4,d5]@2 ~ [g4,b4,d5] ~@2 [g4,b4,d5] ~, ~@8 g3 ~@7", // F G
  H: "f4@2 [f4,a4,c5] ~@2 [f4,a4,c5] ~@2 [g4,b4,d5]@2 ~ [g4,b4,d5] ~@2 [g4,b4,d5] ~, f3 ~@7 g3 ~@7", // F G
  I: "c5@2 [g4,c5,e5] ~@2 [g4,c5,e5] ~@2 [g4,c5,f5]@2 [g4,e5] ~ [g4,c5,d5] ~ [g4,c5,e5] ~, c4 ~@15", // C Csus4 C Gsus4 C
  J: "[f3,f4] ~ [f4,a4,c5] ~@2 [f4,a4,c5] ~@2 [g4,b4,d5]@2 ~ [g4,b4,d5] ~@2 [g4,b4,d5] ~, ~@8 g3 ~@7", // F G
  K: "[c4,c5] ~ [g4,c5,e5] ~@2 [g4,c5,e5] ~@2 [g4,c5,f5] ~ [g4,c5,e5] ~ [g4,c5,d5] ~ [g4,c5,e5] ~", // C Csus4 C Gsus4 C
  L: "~@8 [f3,f4]@2 [f4,a4,c5] ~@2 [f4,a4,c5] ~@2", // F
  M: "[g3,g4,b4,d5]@2 ~ [g4,b4,d5] ~@2 [g4,b4,d5] ~ [c4,c5]@2 [g4,c5,e5] ~@2 [g4,c5,e5] ~@2", // G C
  N: "[g4,c5,f5]@2 e5 ~ [g4,c5,d5] ~ [g4,c5,e5] ~ [f3,f4]@2 [f4,a4,c5] ~@2 [f4,a4,c5] ~@2", // Csus4 Gsus4 C F
  O: "[g4,b4,d5]@2 ~ [g4,b4,d5] ~@2 [g4,b4,d5] ~ [c4,c5]@2 [g4,c5,e5] ~@2 [g4,c5,e5] ~@2, g3 ~@15", // G C
  P: "[g4,c5]@2 [g4,e5] ~ [g4,c5,d5] ~ [g4,c5,e5] ~ f4@2 [f4,a4,c5] ~@2 [f4,a4,c5] ~@2, f5 ~@7 f3 ~@7", // C5 C Gsus4 C F
  Q: "[g4,b4,d5]@2 ~ [g4,b4,d5] ~@2 [g4,b4,d5] ~ c5@2 [g4,c5,e5] ~@2 [g4,c5,e5] ~@2, g3 ~@7 c4 ~@7", // G C
  R: "[g4,c5,f5]@2 [g4,e5] ~ [g4,c5,d5] ~ [g4,c5,e5] ~ [f3,f4] ~ [f4,a4,c5] ~@2 [f4,a4,c5] ~@2", // Csus4 C Gsus4 C F
  S: "[g4,b4,d5]@2 ~ [g4,b4,d5] ~@2 [g4,b4,d5] ~ [c4,c5] ~ [g4,c5,e5] ~@2 [g4,c5,e5] ~@2, g3 ~@15", // G C
  T: "[g4,c5,f5] ~ [g4,c5,e5] ~ [g4,c5,d5] ~ [g4,c5,e5] ~ [f3,f4]@2 [f4,a4,c5] ~@2 [f4,a4,c5] ~@2", // Csus4 C Gsus4 C F
  U: "[g4,c5,f5] ~ [g4,c5,e5] ~ [g4,c5,d5] ~ [g4,c5,e5] ~@9", // Csus4 C Gsus4 C
})).s("gm_piano").gain(0.64)

// bass · fretless bass · "BASSO"
const bass = note(`<
  A B C D C E C F G H G H G H G H I J K L M L M L N O P O P O Q R S T U T U T U T V A B C D C E C F W X Y Z AA Z AA AB
  AC AD AC AD AC AE AF AG G H G H G H G AH G H G H G H G AH ~@8 AC AD AC AD AC AE AF AG G H G H G H G AH G H G H G H G
  AH AI AJ AK AJ AL AJ AM AJ AN AJ AK AJ AL AJ AM AJ AN AJ AK AJ AL AJ AM AJ AO ~
>`.pickRestart({
  A: "f1@3 ~@3 f1@2 g1@2 ~@4 g1 a1", B: "c2@2 ~@4 c2@2 c2@2 ~@4 c2 g1", C: "f1@2 ~@4 f1@2 g1@2 ~@4 g1 a1",
  D: "c2@2 ~@4 c2@2 ~@2 c2 ~ c2 ~ c2 g1", E: "c2@2 ~@4 c2@2 ~@2 c2 ~ c2@2 ~ c2", F: "c2@2 ~@4 c2@2 ~@2 c2 ~ c2@2 ~@2",
  G: "d2 ~ d2 ~ d2 ~ d2!2 g1!3 ~ g1 ~ g1!2", H: "c2 ~ c2 ~ c2 ~ c2!2 f1!3 ~ f1 ~ f1!2", I: "~@8 d2 ~ d2 ~ d2@2 ~ d2",
  J: "g1 ~ g1@2 ~@2 g1 a1 c2 ~ c2 ~@2 c2 ~ c2", K: "a1 ~ a1@2 ~@2 a1 b1 d2 ~ d2 ~@3 d2!2",
  L: "g1 ~ g1 ~@3 g1 a1 c2 ~ c2 ~@2 c2 ~ c2", M: "a1 ~ a1 ~@3 a1 b1 d2 ~ d2 ~@2 d2 ~ d2",
  N: "a1 ~ a1 ~@3 a1 ~ a#1 ~ a#1 ~ a#1@2 a1 a#1", O: "~ a#1 a1 ~ a#1@2 a1@2 f1 ~ f1 ~ f1 ~ f1 c2",
  P: "~ c2!2 ~ c1@2 c2 ~ a#1 ~ a#1 ~ a#1@2 a1 a#1", Q: "~ c2!2 ~ c1@2 c2@2 c1 ~ a#1 ~ a#1@2 a1 a#1",
  R: "~ a#1 a1 ~ a#1@2 a1 ~ c2 ~ c2 ~ c2@2 a#1 c2", S: "~ c2 a#1 ~ c2@2 a#1 ~ d2 ~ d2 ~ d2 ~ d2!2",
  T: "g1!3 ~ g1 ~ g1!2 c2 ~ c2 ~ c2 ~ c2!2", U: "f1!3 ~ f1 ~ f1!2 d2 ~ d2 ~ d2 ~ d2!2", V: "f1!3 ~ f1 ~ f1 ~@9",
  W: "d2 ~ d2 ~ d2@2 ~ d2 g1 ~ g1@2 ~@2 g1 a1", X: "c2 ~ c2 ~@2 c2 ~ c2 a1 ~ a1@2 ~@2 a1 b1",
  Y: "d2 ~ d2 ~@3 d2!2 g1 ~ g1 ~@3 g1 a1", Z: "c2 ~ c2 ~@2 c2 ~ c2 a1 ~ a1 ~@3 a1 b1",
  AA: "d2 ~ d2 ~@2 d2 ~ d2 g1 ~ g1 ~@3 g1 a1", AB: "c2 ~ c2 ~@2 c2 ~ c2 a1 ~ a1 ~@3 a1 ~",
  AC: "a#1 ~ a#1 ~ a#1@2 a1 a#1 ~ a#1 a1 ~ a#1@2 a1@2", AD: "f1 ~ f1 ~ f1 ~ f1 c2 ~ c2!2 ~ c1@2 c2 ~",
  AE: "f1 ~ f1 ~ f1 ~ f1 c2 ~ c2!2 ~ c1@2 c2@2", AF: "c1 ~ a#1 ~ a#1@2 a1 a#1 ~ a#1 a1 ~ a#1@2 a1 ~",
  AG: "c2 ~ c2 ~ c2@2 a#1 c2 ~ c2 a#1 ~ c2@2 a#1 ~", AH: "c2 ~ c2 ~ c2 ~ c2!2 f1!3 ~ f1 ~ f1 ~",
  AI: "~@8 f1@3 ~@3 f1@2", AJ: "g1@2 ~@4 g1 a1 c2@2 ~@4 c2@2", AK: "c2@2 ~@4 c2 g1 f1@2 ~@4 f1@2",
  AL: "~@2 c2 ~ c2 ~ c2 g1 f1@2 ~@4 f1@2", AM: "~@2 c2 ~ c2@2 ~ c2 f1@2 ~@4 f1@2",
  AN: "~@2 c2 ~ c2@2 ~@2 f1@3 ~@3 f1@2", AO: "~@2 c2 ~ c2@2 ~@10",
})).s("gm_fretless_bass").gain(0.72)

// chords · electric guitar muted · "CHIT 1"
const electric_guitar_muted = note(`<
  A B A B A B A B C D E F G H C D I J K L M N O J P Q R S T U V W X Y Z Y Z Y Z Y AA A B A B A B A B AB F G H C D E F AC
  AD AE AF AG AH AI AJ AK AL AK AL AK AL AK AL AK AL AK AL AK AL AK AL ~@7 F AC AD AE AF AG AH AI AJ AK AL AK AL AK AL
  AK AL AK AL AK AL AK AL AK AL AM B AN B AN B AN B AN B AN B AN B AN B AN B AN B AN B AN B AO ~
>`.pickRestart({
  A: "f3!8 g3!8", B: "g3!16", C: "~@2 d4 ~@2 d4 ~@2 d4 ~@2 d4 ~@2 d4 ~", D: "~ c4 ~@2 c4 ~@2 c4 ~@2 c4 ~@2 c4 ~@2",
  E: "c4 ~@2 d4 ~@2 d4 ~@2 d4 ~@2 d4 ~@2 d4", F: "~@2 c4 ~@2 c4 ~@2 c4 ~@2 c4 ~@2 c4 ~",
  G: "~ d4 ~@2 d4 ~@2 d4 ~@2 d4 ~@2 d4 ~@2", H: "d4 ~@2 c4 ~@2 c4 ~@2 c4 ~@2 c4 ~@2 c4", I: "~@11 d4 ~@2 d4 ~",
  J: "~ d4 ~@2 d4 ~@2 d4 ~@2 c4 ~@2 c4 ~@2", K: "c4 ~@2 c4 ~@2 c4 ~@2 d4 ~@2 d4 ~@2 d4",
  L: "~@2 d4 ~@2 d4 ~@2 d4 ~@2 c4 ~@2 c4 ~", M: "~ c4 ~@2 c4 ~@2 c4 ~@2 d4 ~@2 d4 ~@2",
  N: "d4 ~@2 d4 ~@2 d4 ~@2 c4 ~@2 c4 ~@2 c4", O: "~@2 c4 ~@2 c4 ~@2 c4 ~@2 d4 ~@2 d4 ~",
  P: "c4 ~@2 c4 ~@2 c4 ~@2 [f4,a#4] ~@2 [f4,a#4] ~@2 [f4,a#4]", // A#5
  Q: "~@2 [f4,a#4] ~@2 [f4,a#4] ~@2 [f4,a#4] ~@2 [f4,a4] ~@2 [f4,a4] ~", // A#5 F
  R: "~ [f4,a4] ~@2 [f4,a4] ~@2 [f4,a4] ~@3 [f4,a#4] ~ [f4,a#4] ~@2", // F A#5
  S: "[f4,a#4] ~@2 [f4,a#4] ~@2 [f4,a#4] ~@2 [f4,a4] ~@2 [f4,a4] ~@2 [f4,a4]", // A#5 F
  T: "~@2 [f4,a4] ~@2 [f4,a4] ~@2 [f4,a4] ~@2 [f4,a#4] ~@2 [f4,a#4] ~", // F A#5
  U: "f4 [f4,a#4] ~@2 [f4,a#4] ~@2 [f4,a#4] ~@3 [f4,a4] ~@2 [f4,a4] ~", // A#5 F
  V: "~ [f4,a4] ~@2 [f4,a4] ~@2 [f4,a4] ~@2 [f4,a#4] ~@2 [f4,a#4] ~@2", // F A#5
  W: "[f4,a#4] ~@2 a#4 f4 ~@2 [f4,a#4] ~@3 [e4,g4] ~@2 [e4,g4] ~", // A#5 Em
  X: "~ [e4,g4] ~@2 [e4,g4] ~@2 [e4,g4] ~@3 [f4,a4] ~@2 [f4,a4] ~", // Em F
  Y: "~ [g4,b4] ~@2 [g4,b4] ~@2 [g4,b4] ~@3 [e4,g4] ~@2 [e4,g4] ~", // G Em
  Z: "~ [f4,a4] ~@2 [f4,a4] ~@2 [f4,a4] ~@3 [f4,a4] ~@2 [f4,a4] ~", AA: "~ [f4,a4] ~@2 [f4,a4] ~@2 [f4,a4] ~@8",
  AB: "~@3 d4 ~@2 d4 ~@2 d4 ~@2 d4 ~@2 d4", AC: "~ [f4,a#4] ~@2 [f4,a#4] ~@2 [f4,a#4] ~@2 [f4,a#4] ~@2 [f4,a#4] ~@2",
  AD: "[f4,a#4] ~@2 [f4,a4] ~@2 [f4,a4] ~@2 [f4,a4] ~@2 [f4,a4] ~@2 [f4,a4]", // A#5 F
  AE: "~@3 [f4,a#4] ~ [f4,a#4] ~@2 [f4,a#4] ~@2 [f4,a#4] ~@2 [f4,a#4] ~", // A#5
  AF: "~ [f4,a4] ~@2 [f4,a4] ~@2 [f4,a4] ~@2 [f4,a4] ~@2 [f4,a4] ~@2", // F
  AG: "[f4,a4] ~@2 [f4,a#4] ~@2 [f4,a#4] ~ f4 [f4,a#4] ~@2 [f4,a#4] ~@2 [f4,a#4]", // F A#5
  AH: "~@3 [f4,a4] ~@2 [f4,a4] ~@2 [f4,a4] ~@2 [f4,a4] ~@2 [f4,a4]", // F
  AI: "~@2 [f4,a#4] ~@2 [f4,a#4] ~@2 [f4,a#4] ~@2 a#4 f4 ~@2 [f4,a#4]", // A#5
  AJ: "~@3 [e4,g4] ~@2 [e4,g4] ~@2 [e4,g4] ~@2 [e4,g4] ~@2 [e4,g4]", // Em
  AK: "~@3 [f4,a4] ~@2 [f4,a4] ~@2 [g4,b4] ~@2 [g4,b4] ~@2 [g4,b4]", // F G
  AL: "~@3 [e4,g4] ~@2 [e4,g4] ~@2 [f4,a4] ~@2 [f4,a4] ~@2 [f4,a4]", AM: "~@8 f3!8", AN: "g3!8 f3!8", AO: "g3!8 ~@8",
})).s("gm_electric_guitar_muted").gain(0.36).pan(0.3)

// chords · string ensemble 1 · "VIOLINI"
const string_ensemble_1 = note(`<
  ~@8 A B C D E F G H ~@16 I J K L K M N J O ~@24 P B C D E F G H P B C D E F G H ~@16 P B C D E F G H P B C D E F G H
  ~@26
>`.pickRestart({
  A: "[a4,d5,f5]@2 ~ [a4,d5,f5] ~ [a4,f5] [a4,d5,f5] ~ [g4,b4,d5]@2 ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5]", // Dm G
  B: "[g4,c5,e5]@2 ~ [g4,c5,e5] ~@2 [g4,c5,e5]!2 [f4,a4,c5]@2 ~ [f4,a4,c5] ~@2 [f4,a4,c5]!2", // C F
  C: "[a4,d5,f5]@2 ~ [a4,d5,f5] ~ [a4,d5,f5] ~ [a4,d5,f5] [g4,b4,d5]@2 ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5]", // Dm G
  D: "[g4,c5,e5]@2 ~ [g4,c5,e5] ~ [c5,e5] g4 [g4,c5,e5] [f4,a4,c5]@2 ~ [f4,a4,c5] ~@2 [f4,a4,c5]!2", // C F
  E: "[a4,d5,f5]@2 ~ [a4,d5,f5] ~ [a4,d5,f5] ~ [a4,d5,f5] [g4,b4,d5]@2 ~ [g4,b4,d5] ~@2 [g4,b4,d5]!2", // Dm G
  F: "[g4,c5,e5]@2 ~ [g4,c5,e5] ~ c5 [g4,e5] [g4,c5,e5] [f4,a4,c5]@2 ~ [f4,a4,c5] ~@2 [f4,a4,c5] [a4,b4,c5]", // C F Am
  G: "[a4,d5,f5]@2 ~ [a4,d5,f5] ~ [a4,d5,f5] [d5,f5] a4 [g4,b4,d5]@2 ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5], g5 ~@15", // Dm G
  H: "[g4,c5,e5]@2 ~ [g4,c5,e5] ~@2 [g4,c5,e5]!2 [f4,a4,c5]@2 ~ [f4,a4,c5] ~ [f4,a4,c5] ~@2", // C F
  I: "~@11 [a4,d5,f5] ~ [a4,f5] [a4,d5,f5] ~", // Dm
  J: "[g4,b4,d5]@2 ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] [g4,c5,e5]@2 ~ [g4,c5,e5] ~@2 [g4,c5,e5]!2", // G C
  K: "[f4,a4,c5]@2 ~ [f4,a4,c5] ~@2 [f4,a4,c5]!2 [a4,d5,f5]@2 ~ [a4,d5,f5] ~ [a4,d5,f5] ~ [a4,d5,f5]", // F Dm
  L: "[g4,b4,d5]@2 ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] [g4,c5,e5]@2 ~ [g4,c5,e5] ~ [c5,e5] g4 [g4,c5,e5]", // G C
  M: "[g4,b4,d5]@2 ~ [g4,b4,d5] ~@2 [g4,b4,d5]!2 [g4,c5,e5]@2 ~ [g4,c5,e5] ~ c5 [g4,e5] [g4,c5,e5]", // G C
  N: "[f4,a4,c5]@2 ~ [f4,a4,c5] ~@2 [f4,a4,c5] [a4,b4,c5] [a4,d5,f5]@2 ~ [a4,d5,f5] ~ [a4,d5,f5] [d5,f5] a4, ~@8 g5 ~@7", // F Am Dm
  O: "[f4,a4,c5]@2 ~ [f4,a4,c5] ~ [f4,a4,c5] ~@10", // F
  P: "~@3 [a4,d5,f5] ~ [a4,f5] [a4,d5,f5] ~ [g4,b4,d5]@2 ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5]", // Dm G
})).s("gm_string_ensemble_1").gain(0.28)

// chords · distortion guitar · "SINT GLISS"
const distortion_guitar = note("<~@19 A@2 ~@31 B ~@86>".pickRestart({
  A: "[~@7 [g5,a5,c6]@4 ~@5, ~@14 c4@5 ~@13]/2", B: "~@3 [g5,a5,c6]@4 ~, ~@6 c4@5 ~@5",
})).s("gm_distortion_guitar").gain(0.46)

// other · lead 2 sawtooth · "SYNTH 2"
const lead_2_sawtooth = note("<~@27 A B ~@31 C@2 ~@30 C@2 ~@45>".pickRestart({
  A: "~@5 c5 f5 e5", B: "~ d5 c5 d5@2 ~@3", C: "[~@2 c5@2 f5@2 e5@3 ~ d5@2 c5@2 d5@4 ~@14]/2",
})).s("gm_lead_2_sawtooth").gain(0.45)

// other · pan flute · "FLAUTO"
const pan_flute = note("<~@23 A B ~@31 C D ~@30 C D ~@49>".pickRestart({
  A: "~@8 c4 g4 e4 c5 g4!2 e4 g4", B: "a4!2 c5!2 b4!2 c5 d5 a#4!5 ~ a#4 ~",
  C: "c4 g4 e4 c5 g4!2 e4 g4 a4!2 c5!2 b4!2 c5 d5", D: "a#4!5 ~ a#4 ~@9",
})).s("gm_pan_flute").gain(0.64)

// other · pan flute · "FLAUTO" · soft notes
const pan_flute_soft = note("<~@24 [~@13 a#4 ~ a#4] ~@32 [~@5 a#4 ~ a#4 ~@8] ~@31 [~@5 a#4 ~ a#4 ~@8] ~@49>")
  .s("gm_pan_flute").gain(0.4)

// drums · kick
const kick = s("bd").struct("<A@16 B A@7 C A@15 D A@15 E A@31 E A@24 B A@23 D ~>".pickRestart({
  A: "x!4", B: "~@2 x!2", C: "x ~@3 x!5 ~@3 x ~@3", D: "x!2 ~@2", E: "x ~@3 x ~@3 x ~@3 x!4",
})).gain(0.8)

// drums · rim
const rim = s("rim").struct("<A@16 B C@23 D A@72 B C@23 D ~>".pickRestart({
  A: "~@2 x ~ x!2 ~@2 x ~@2 x ~@2 x ~", B: "~@10 x ~ x!2 ~@2", C: "x ~@2 x ~@2 x ~@3 x ~ x!2 ~@2",
  D: "x ~@2 x ~@2 x ~@9",
})).gain(0.48)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@3 A ~@3 B ~@3 A ~@3 B ~@3 C D ~@3 E ~@2 C D ~@3 E ~@2 C D ~@3 E ~@3 A ~@3 B ~@3 A ~@3 B ~@3 A ~@3 B ~@3 A ~@3 B ~@3
  A ~@3 B ~@3 A ~@3 B ~@3 A ~@3 B ~@3 A ~@3 B ~@3 A ~@3 B ~@3 C D ~@3 E ~@2 C D ~@3 E ~@2 C D ~@3 E ~
>`.pickRestart({
  A: "~@7 x ~@2 x ~@5", B: "~@9 x ~@6", C: "~@15 x", D: "~ x ~@6", E: "~ x ~@14",
})).gain(0.24)

// drums · clap
const clap = s("cp").struct("<A@16 B A@23 C A@72 B A@23 C ~>".pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~ x ~@2",
})).gain(0.48)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  A B@5 C@2 A B@5 C@2 D E F@5 G H I@7 J E F@5 G@2 A B@5 C@2 A B@5 C@2 I@8 A B@5 C@2 A B@5 C@2 A B@5 C@2 I@8 A B@5 C@2 A
  B@5 C@2 D E F@5 G K E F@5 G K E F@5 G@2 ~
>`.pickRestart({
  A: "~@7 x ~ x ~@6", B: "~@9 x ~ x ~@4", C: "~@9 x ~ x ~ x ~@2", D: "~@15 x", E: "~ x ~@14", F: "~ x ~ x ~@12",
  G: "~ x ~ x ~ x ~@10", H: "~ x ~ x ~ x ~@4 x ~@3 x ~", I: "~ x ~ x ~ x ~ x", J: "~@2 x ~@3 x ~@8 x",
  K: "~ x ~ x ~ x ~@9 x",
})).gain(0.56)

// drums · crash
const crash = s("cr").struct(`<
  A ~@3 B ~@3 A ~@7 C ~@7 C ~@3 B ~@3 C ~@3 D ~@4 A ~@7 A ~@7 A ~@2 D ~@4 A ~@3 B ~@3 A ~@3 B ~@3 A ~@7 A ~@2 D ~@4 A
  ~@3 B ~@3 A ~@3 B ~@3 C ~@7 C ~@7 C ~@9
>`.pickRestart({
// … 12 more lines

More by Fiorello