Strudelify

Settembre

Alberto Fortis

KeyC majorTempo102 bpm
0:00/0:00
// Settembre — Alberto Fortis
// 102 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(102/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.

// other · overdriven guitar
const overdriven_guitar = note("<~@76 A@3 B@5 C D E@2 F@2 G H@2 I J@5 K@4 B@5 C L>".pickRestart({
  A: "[~@13 d4@15 g3@2 c4 d4@2 e4 g4@2 a4 c5 ~@6 g4@2 c5 d5]/3",
  B: "[c5@5 g4@2 c5@7 ~ e5@5 d5 ~ c#5 c5 ~ a4 ~ g4 ~ f4 ~ d4@2 g4 a4 g4@4 d4@2 g4 a4 g4@3 ~ d5@4 c5@2 d5 ~ e5 ~ g5@11 ~ f5@2 e5 f5 e5 c5 g4@4 ~]/5",
  C: "d5@3 c5@2 g4@3 d5@3 c5@2 g4 f4@2", D: "d4@5 f4 g4 c5@6 d5 e5!2",
  E: "[~ e5@3 d5 ~ c5@2 e5 ~ d5@2 d5 c5 a4 c5@3 c5@6 ~ g5@4 a5@2 ~]/2",
  F: "[e5@2 g5 d5@2 e5@2 c5@2 d5@2 a4@2 g4@11 [e4,f4,f#4] [c4,c#4,d4,d#4] b3 ~@5]/2",
  G: "[e4,g4]!7 e4!2 e4@2 d4@5, ~@7 g4@3 ~@6", H: "[c4@3 g3@4 ~ g3 a3 c4@8 g3 a3 c4@4 g3 a3 c4@2 g3 a3 c4@2]/2",
  I: "d4@2 g4@3 g4 a4 c5@3 a4 ~@5",
  J: "[g4@2 ~ c5 ~ a4 ~ e5 ~ e5@2 d5 ~ c5 ~ c5@6 g4@2 c5@3 a4 ~@2 g4@2 c5@2 d5@2 c5@2 g5 c5@2 g5@3 e5 ~ d5 ~ d5@8 e5@3 c5 g4@3 ~ c5@2 b4 ~ a4 ~ g4 ~ f4 ~ e4 ~ d4 ~ c4 ~@2]/5",
  K: "[c4 a3 c4 e4@3 d4 f4 ~ e4 ~ d4 ~ c4 ~ g4@4 f4 ~ e4 ~ d4@4 c4 ~ d4@15 g3@2 c4 d4@2 e4 g4@2 a4 c5 ~@6 g4@2 c5 d5]/4",
  L: "e4 c4@2 [a3,a#3,b3] [f3,f#3,g3,g#3] e3 ~@10",
})).s("gm_overdriven_guitar").gain(0.64).pan(0.4)

// bass · electric bass finger
const bass = note(`<
  ~ A@4 B C B D E F G H B C B I E F J K L C B I E M J K L C B I N M J O P Q P Q P Q R S P Q P Q P Q R S T U V W X Y V Z
  T U V W X Y V O P Q P Q P Q R S P Q P Q P Q R S P Q P Q P Q R S P Q P Q P Q R S P Q P Q P Q R S AA
>`.pickRestart({
  A: "c1@15 ~", B: "c1@6 ~@2 e1@5 ~@3", C: "f1@6 ~@2 g1@5 ~@3", D: "f1@6 ~@2 c1@6 g1 ~", E: "a1@6 ~@2 e1@5 ~ e1 ~",
  F: "f1@5 ~ f1 ~ g1@5 ~@3", G: "c1@5 ~ c1 ~ e1@5 ~@3", H: "f1@3 ~ g1@4 c1@8", I: "f1@6 ~@2 c1@3 ~ c2 ~ b1 ~",
  J: "c1@5 ~ c1 ~ e1@5 ~ e1 ~", K: "f1@3 ~ g1@4 c1@5 ~ c1 ~", L: "c1@6 ~@2 e1@5 ~ e1 ~", M: "f1@5 ~ f1 ~ g1@5 ~ g1 ~",
  N: "a1@6 ~@2 e1@5 e1!2 ~", O: "f1@3 f1 g1@3 c1@2 ~ g1 ~ a1 ~ b1 ~", P: "c1 ~ c1@2 ~ c1@2 c1 g1@2 ~ g1 ~ g1 e1 g1",
  Q: "a1 ~ a1@3 a1@2 a1 f1@3 f1 ~ f1 g1 f1", R: "c1 ~ c1@2 ~ c1@2 c1 e1@2 ~ e1 ~ e1 d1 e1",
  S: "f1 f1@2 f1 ~ f1@2 f1 g1 g1@2 g1 ~ g1@2 ~", T: "c1@7 ~ e1@6 ~@2", U: "f1@7 ~ g1@3 ~ a1@4", V: "c1@7 ~ e1@7 ~",
  W: "f1@2 c1 b1", X: "a1@7 ~ e1@7 ~", Y: "f1@7 ~ g1@7 ~", Z: "f1@3 f1 g1@3 ~ c2@4 g1@4", AA: "c1 ~@7",
})).s("gm_electric_bass_finger").gain(0.64)

// bass · electric bass finger · soft notes
const bass_soft = note(`<
  ~ A@4 B C B D E F G H B C B I E F J H K C B I E L J H K C B I M L J N ~@16 O P O ~ Q R O S O P O ~ Q R O N ~@41
>`.pickRestart({
  A: "~@15 c1", B: "~@7 c1 ~@6 e1 ~", C: "~@7 f1 ~@6 g1 ~", D: "~@7 f1 ~@8", E: "~@7 a1 ~@5 e1 ~@2",
  F: "~@5 f1 ~@8 g1 ~", G: "~@5 c1 ~@7 e1!2 ~", H: "~@3 f1 ~@12", I: "~@7 f1 ~@3 c1 ~@4", J: "~@5 c1 ~@7 e1 ~@2",
  K: "~@7 c1 ~@8", L: "~@5 f1 ~@10", M: "~@7 a1 ~@8", N: "~@9 g1 ~@6", O: "~@7 c1 ~@7 e1", P: "~@7 f1 ~@3 g1 ~@4",
  Q: "~@7 a1 ~@7 e1", R: "~@7 f1 ~@7 g1", S: "~@7 g1 ~@8",
})).s("gm_electric_bass_finger").gain(0.32)

// other · electric guitar muted
const electric_guitar_muted = note("<~@37 A@7 B A@7 B ~@16 A@7 B A@7 B A@7 B A@7 B A@7 B C>".pickRestart({
  A: "~@2 g3 ~@2 g3 ~@2 g3 ~@2 g3 ~@2 g3 ~", B: "~@2 g3 ~@2 g3 ~@2 g3 ~@2 g3 ~ g3 ~@2", C: "c4!2 ~@14",
})).s("gm_electric_guitar_muted").gain(0.69).pan(0)

// other · electric guitar jazz
const electric_guitar_jazz = note("<~@22 A B@2 C@2 D E ~@2 F G H I J K ~@16 L@2 M@4 N@2 O@2 ~ P@4 Q ~@41>".pickRestart({
  A: "~@13 g3 a3 ~", B: "[a3@2 g3@19 ~@11]/2", C: "[g3@21 ~@9 a3 ~]/2", D: "g3 g3@7", E: "f3@4 e3@3 c3@8 ~",
  F: "g3@3 g3@3 ~ g3 ~@2 g3 ~@3 a3 ~", G: "c4@4 g3@3 g3@8 ~", H: "g3@2 ~ c4@3 g3@3 ~ g3@4 a3 ~",
  I: "c4@4 g3@3 g3@5 ~@4", J: "~@7 e3", K: "f3@4 g3@3 c4 ~@8", L: "[~@13 a3 c4 c4@4 c4 ~@5 c5@3 a4 ~ g4 ~]/2",
  M: "[d4@12 ~ a3 c4 c4@4 a3 ~@5 d4@3 d4 g3 a3 c4@6 ~@7 d4@2 c4 c4@8 ~@6 g4@3]/4", N: "[g4@8 ~@4 e4@3 c4@15 ~@2]/2",
  O: "[~@3 c6@5 ~@7 e4@5 d4 ~ c4 g3@9]/2",
  P: "[~@10 c4 ~ c4 a3 g3 c4@7 ~ b3@4 ~ b3@2 a3 a3@7 ~ g3@2 e4 ~ c4 d4 c4 a3 c4@8 b3@8 ~, ~@21 d4 ~@10]/4",
  Q: "a3@4 b3@3 c4 ~@8",
})).s("gm_electric_guitar_jazz").gain(0.47).pan(0.1)

// chords · pad warm
const pad_warm = note(`<
  ~@13 A B@2 C@2 D@2 E A B@2 C@2 D@2 E A B@2 C@2 D@2 F G H G H G H A I G H G H G H A I A B@2 C@2 D@2 E A B@2 C@2 D@2 F G
  H G H G H A I G H G H G H A I G H G H G H A I G H G H G H A I G H G H G H A I ~
>`.pickRestart({
  A: "[e4,g4]", B: "[f4 ~ g4@2, c4 ~, ~ e4@3]/2", C: "[f4 ~@2 b3, c4@3 ~, ~ e4@3]/2", D: "[f4 ~ e4@2, c4 ~, ~ g4@3]/2",
  E: "f4 e4, c4", F: "[c4,f4]@4 [d4,g4]@3 [c4,e4]@2 ~@7", G: "e4 d4, g4", H: "e4 f4, c4", I: "[c4,f4] [d4,g4]",
})).s("gm_pad_warm").gain(0.29)

// chords · piano
const piano = note(`<
  A@2 B@4 C D E@2 F G H I J K L@2 M@2 N I J K L@2 O@2 P@2 Q@2 R@2 S@2 T U V W X Y Z AA AB U V W X Y Z AA AB I J K L@2
  O@2 AC@2 Q@2 R@2 S@2 T U V W X Y AD AE AB U V W X Y AD AE AB U V W X Y AD AE AB U V W X Y AD AE AB U V W X Y Z AE AB
  AF
>`.pickRestart({
  A: "[~@9 c3@2 c3@2 c3@2 [a3,c4,f4], ~@15 g3@12 ~@5, ~@4 [c4,e4]@3 ~, ~@4 c2 ~@3]/2", // F C
  B: "[[a3,c4,f4] ~ c3@4 c3@3 ~@2 a3 [c4,f4] ~ [a3,c4,f4] ~@3 c3@3 ~@8 [g3,c4,e4] [a3,f4] ~ f4 [g3,e4]@2 [g3,c4,e4]@6 [g3,c4,e4]@2 ~ [c4,f4] ~ [a3,c4,f4] ~ c2@6 [c4,e4,g4] ~@7 d4@2, c2@15 c3@2 ~@15 c4@3 ~@20 [e4,g4]@9, ~ [g3,c4,e4]@8 ~ c3@4 ~ [g3,c4,e4]@14 ~@2 a3@2 ~@10 a3@2 ~@2 [g3,c4,e4]@8 d4@6 g3@3, ~@16 c2@6 c2@9 ~ c2@15 ~@9 e2@8]/4", // F F5 F C Dm C F5 F …
  C: "[f2,a3,c4,f4]@6 [c4,f4,a4] ~@7 c4@2, ~@7 g4@9, ~@7 [c4,e4]@5 ~ [c3,g3]@3, ~ g2", // F C C5
  D: "g3@4 ~ c3@2 b3@6 [g3,b3,e4]@3, [c2,c4,e4]@7 [e2,d4,g4]@9", // Em C Em7
  E: "[[a3,c4,f4]@4 [a3,c4,f4]@3 ~@5 [g3,e4]@2 [g3,d4] ~@7 [a3,c4] ~@6 e3@3, f2@7 c4@8 e3@3 ~@3 e3@5 ~@6, ~@7 [g3,e4]@5 ~@3 [a3,c4]@5 [a3,c4]@2 ~ [g3,b3,d4]@5 d4@4, ~@8 c2@7 ~ a2@7 ~ e2@8]/2", // F C G5 Am C Am G
  F: "[a3,c4,e4]@4 [a3,c4,e4]@3 g3@5 ~@2 c4@2, f2@7 [g2,e4,g4]@9, ~@7 c4@7 ~@2, ~@3 g3", // Am C
  G: "[g3,c4,e4]@4 ~@2 g3 [b3,d4,e4,g4]@5 ~@2 e3@2, c2@7 e2@9, ~@4 c4@3 ~@5 [g3,b3,d4,e4]@4, ~@5 c3@2 ~@9", // C Em7
  H: "[f2,f3,a3,c4,f4]@4 [g2,g3,b3,f4]@3 ~@6 e4@3, ~@7 c4@9, ~@7 [g3,e4]@5 g3@4, ~ c2", // F G7 C
  I: "c3@5 ~ [c4,e4,g4] ~@7 d4@2, [c2,c4,e4,g4]@7 d4@6 g3@3, ~@5 c3@2 [b3,e4,g4]@9, ~ e2", // C Em
  J: "[f2,a3,c4,f4]@6 [c4,f4,a4] ~@5 g3 ~ [a3,c4,f4]@2, ~@7 g4@9, ~@7 [c4,e4]@5 e4@4, ~ g2, ~@12 c4 [c3,g3]@3", // F C C5
  K: "g3@4 ~@2 [g3,c4] ~@3 e3@3 [e3,g3,b3]@3, [c2,c4,e4]@7 [e2,d4,g4]@9, ~@2 g3 e4@5, ~@5 c3@2 b3@6 ~@3", // C5 Em C Em7
  L: "[[a3,c4,f4]@4 [a3,c4,f4]@2 f3 ~@7 [g3,d4] ~@7 [a3,c4] ~@6 e3@3, f2@7 c4@8 ~@13 d4@4, ~@7 [g3,e4]@5 [g3,e4]@3 [a3,c4]@5 [a3,c4]@2 ~ [g3,b3,d4]@5 ~@4, ~@8 c2@7 ~ a2@7 ~ e2@8, ~@13 c3@2 e3@3 ~@3 e3@5 ~@6]/2", // F G5 Am C Am G
  M: "[[a3,c4,e4]@4 [a3,c4,e4]@3 [g2,g3,c4,e4,g4]@3 [g3,c4,e4] ~ [d3,a3,c#4,d4,f4] ~ [d3,a3,d4,f4] ~@7 g3 [b3,d4,e4,g4]@5 ~@2 e3@2, f2@7 ~@3 c3@2 ~@3 [c3,g3,c4,e4]@5 c4@3 ~@5 d4@4, ~@16 c2@7 e2@9, ~@21 c3@2 ~@9]/2", // Am C Dm Em7 C
  N: "[f2,f3,a3,c4,f4]@4 [g2,g3,b3,g4]@3 ~@6 e4@3, ~@7 c4@9, ~@7 [g3,e4]@5 g3@4, ~ c2", // F G C
  O: "[[a3,c4,f4]@4 [a3,c4,f4]@3 [c2,g3,c4,e4]@3 [g3,c4,e4] ~@2 [g3,c4,e4] [d3,a3,c4,f4] ~@7 g3 [b3,d4,e4,g4]@5 ~@2 e3@2, f2@7 ~@5 g2@2 ~ [c3,g3,c4,e4]@5 c4@3 ~@5 d4@4, ~@16 c2@7 e2@9, ~@21 c3@2 ~@9]/2", // F C Dm7 Em7 C
  P: "[[f2,f3,a3,c4,f4]@4 [g2,g3,b3,f4]@3 ~@3 [c4,e4,g4] ~ [a3,c4,g4]@2 [a3,c4,f4] ~ c2@6 [c4,e4,g4] ~@7 d4@2, ~@7 [g3,c4,e4]@4 ~@4 [g3,c4,e4]@8 [e4,g4]@9, ~@8 c2@8 ~@7 d4@6 g3@3, ~@3 e2]/2", // F G7 C Am7 F C Em
  Q: "[[f2,a3,c4,f4]@6 [c4,f4,a4] ~@3 [g3,c4,e4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~@6 c3@2 b3@6 [g3,b3,e4]@3, ~@7 [c4,e4,g4]@3 ~@3 c3@2 g3@5 ~@12, ~@8 g2@7 [c4,e4]@7 ~@10, ~@16 c2@7 [e2,d4,g4]@9]/2", // F C F Em C Em7
  R: "[[a3,c4,f4]@4 [a3,c4,f4]@3 ~@3 [c3,g3,e4]@2 [g3,e4]@2 [g3,d4] ~@7 [a3,c4] ~@6 e3@3, f2@7 [g3,c4,e4]@3 c4@5 [a3,c4]@5 [a3,c4]@2 ~ [g3,b3,d4]@5 d4@4, ~@8 c2@7 e3@3 ~@3 e3@5 ~@6, ~@16 a2@7 ~ e2@8]/2", // F C G5 Am C Am G
  S: "[[a3,c4,e4]@4 [a3,c4,e4]@3 [g3,c4,e4,g4]@3 [g3,c4,e4] ~ [a3,c4,f4] f2 [a3,c4,f4] ~@7 g3 [b3,d4,e4,g4]@5 ~@2 e3@2, f2@7 g2@6 ~@2 [g3,c4,e4]@5 c4@3 ~@5 [g3,b3,d4,e4]@4, ~@16 c2@7 e2@9, ~@21 c3@2 ~@9]/2", // Am C F Em7 C Em7
  T: "[f2,f3,a3,c4,f4]@4 [g2,b3,d4,g4]@3 [c2,g3,c4,e4]@2 [g1,b3,d4,g4]@3 [c4,a4] ~ [d4,b4] ~, ~@6 a1 b1", // F G C G F G
  U: "c3@2 [c4,e4,g4]@2 ~ [c4,e4,g4]@2 ~ [b3,g4]@2 g2 [b3,d4,g4]@2 ~ [b3,d4,g4] ~, c2@7 ~ g1@7 ~, ~@4 c3@2 ~@2 g2 ~@4 g2@2 ~", // C Em G
  V: "a2@2 [c4,e4,g4]@2 a2 ~ a2 ~ [f1,f2,a3,f4]@3 f3 [g1,b3,d4,g4]@2 g2 ~, a1@7 ~@9, ~@5 [c4,e4,g4]@2 c4@4 ~@5", // C F G C
  W: "~@2 [c4,e4,g4]@2 ~ [c4,e4,g4]@2 d4 [b3,d4,g4]@2 g2 [b3,d4,g4]@2 ~ [b3,g4] ~, c2@7 ~ g1@6 d4@2, ~@4 c3@2 ~@7 g2@2 ~", // C G Em
  X: "a2@2 [c4,e4,g4]@2 a2 ~ a2 ~ [f1,a3,c4,f4]@2 f2@2 [g1,b3,d4,g4]@2 g2 ~, a1@7 ~@9, ~@5 [c4,e4,g4]@2 ~@9", // C F G C
  Y: "~@2 [c4,e4,g4]@2 c3 ~ c3 ~ [b3,d4,g4]@2 g2 [b3,d4,g4]@2 ~ [b3,d4,g4]@2, c2@7 ~ g1@6 ~@2, ~@5 [c4,e4,g4]@2 ~@6 g2@2 ~", // C G C
  Z: "a2@2 [c4,e4,g4]@2 a2 g4 a2 ~ [f1,a3,c4,f4]@2 f2@2 g1@2 g2 ~, a1@7 ~ g1 ~@7, ~@5 [c4,e4]@2 ~@5 [b3,d4,g4]@4", // C F C G
  AA: "~@2 [c4,e4,g4]@2 ~@2 c3 ~ [b3,d4,e4,g4]@2 ~ [b3,d4,e4,g4]@2 ~ [b3,d4,e4,g4] ~, c2@7 ~ e1@6 ~@2, c3@4 ~ [c4,e4,g4]@2 ~ f1 ~@4 e2@2 ~", // C Em7 C
  AB: "~ [a3,c4,f4] ~ [a3,c4,f4] f2 ~ f2@2 b3 ~ b3 [b3,d4,g4] ~ [b3,d4,g4]@2 ~, f1@7 ~ g1@7 ~, f2@3 ~@2 [a3,c4,f4]@2 ~ [d4,g4]@2 ~@6, ~@9 g2@6 ~", // F G F G5
  AC: "[[f2,f3,a3,c4,f4]@4 [g2,g3,b3,f4]@3 ~@3 [g3,c4,e4] ~ [a3,c4,f4]@2 [a3,c4,f4] ~ c2@6 [c4,e4,g4] ~@7 d4@2, ~@7 [g3,c4,e4]@3 ~@5 [g3,c4,e4]@8 [e4,g4]@9, ~@8 c2@8 ~@7 d4@6 g3@3, ~@3 e2]/2", // F G7 C F C Em
  AD: "a2@2 [c4,e4,g4]@2 a2 g4 a2 ~ [f1,a3,c4,f4]@2 f2@2 g1@2 g2 ~, a1@7 ~@9, ~@5 [c4,e4]@2 ~@5 [b3,d4,g4]@4", // C F C G
  AE: "~@2 [c4,e4,g4]@2 ~@2 c3 ~ [b3,d4,e4,g4]@2 e2 [b3,d4,e4,g4]@2 ~ [b3,d4,e4,g4] ~, c2@7 ~ e1@6 ~@2, c3@4 ~ [c4,e4,g4]@2 ~@6 e2@2 ~", // C Em7 C
  AF: "c2 c1@3 ~@12",
})).s("gm_piano").gain(0.54)

// chords · piano · soft notes
const piano_soft = note(`<
  ~ A B C D@2 E F G H I J K L M N O H I P K L M N O H I P Q R S F T H I J ~ U ~ V ~ W ~ X Y U ~ V ~ W ~ X Y L M N O H I
  P Q R S F T H I J ~ U ~ V ~ W ~@2 Y U ~ V ~ W ~@2 Y U ~ V ~ W ~@2 Y U ~ V ~ W ~@2 Y U ~ V ~ W ~@2 Y ~
>`.pickRestart({
  A: "~@4 c2@4 ~@5 [g3,c4,e4] c3@2, ~@8 c2@7 ~", B: "~@9 [g3,c4,e4]@2 ~@5", C: "~@10 c3@3 ~ c3@2, ~@14 c4 ~",
  D: "[~@2 c3@3 ~ c3@3 ~ c3@3 ~ c3@7 c3@2 ~@5 e3@4, ~@23 b3@9]/2", E: "~@4 f3@3 ~@3 c3@2 e4@4, ~@6 c4 ~, ~@12 g3 ~@3",
  F: "~@2 c3@2 g3@2 [g3,c4] ~@3 e3@6, ~@6 e4@7 ~@3", G: "~@2 f3@4 f3 ~@3 c3@3 c3@2 ~",
  H: "~@2 e3@3 ~@5 e3@2 [g3,b3]@2 ~ b3, ~@7 g3", I: "~@2 f3@4 f3 ~@9", J: "~@2 c3@2 [g3,e4]@2 e4 ~@3 e3@2 ~@4",
  K: "~@2 c3@2 ~@2 d3 ~@3 c3@4 c3@2", L: "~@3 e3", M: "~@4 f3@3 ~@3 c3@3 ~@3", N: "~@2 c3@3 ~@11",
  O: "~@2 f3@4 ~@4 c3@3 ~@3", P: "~@4 [g3,e4]@2 e4 ~@3 e3@2 [g3,b3,e4]@4", Q: "~@2 c3@2 ~@2 d3 ~@9",
  R: "~@5 c3@2 ~@5 e3@4, ~@7 b3@9", S: "~@4 f3@3 ~@9", T: "~@2 f3@4 f3 ~@6 c3@2 ~", U: "[c4,e4,g4] ~@6 d4@3 ~@6",
  V: "[c4,e4,g4] ~@15", W: "[c4,e4,g4] ~@6 d4 ~@8", X: "~@10 e2 ~@5", Y: "[a3,c4,f4] ~@15",
})).s("gm_piano").gain(0.3)

// other · pad metallic
const pad_metallic = note("<~@3 A B C@4 ~@101>".pickRestart({
  A: "g4", B: "c5", C: "c6/4",
})).s("gm_pad_metallic").gain(0.41).pan(0.1)

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

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

// drums · rim
const rim = s("rim").struct("<~ [~ x ~ x]!35 ~@17 [~ x ~ x]!15 ~@42>").gain(0.56)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@44 A ~@7 A ~@23 A ~@7 B ~@7 B ~@7 B ~@7 B ~>".pickRestart({
  A: "x!2 ~ x!2 ~@3 x!2 ~ x!2 ~@3", B: "~ x ~@14",
})).gain(0.32)

// drums · clap
const clap = s("cp").struct("<~@37 A@7 ~ A@7 ~@17 A@7 ~ A@6 B ~ A@7 ~ A@6 B ~ A@6 B ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 C A@3 C A@3 ~ D E@3 D E@2 F D E@3 D E@2 F G H@2 I G H@2 I G H@2 I G H@2 ~ D
  E@3 D E@2 F D E@3 D E@2 J D E@3 D E@2 J D E@3 D E@2 J D E@3 D E@2 J ~
>`.pickRestart({
  A: "x!2 ~ x ~ x!3", B: "x ~ x ~@3 x ~@3 x ~ x!2 ~@2", C: "x!2 ~ x ~@2 x ~", D: "~ x!7", E: "x!8",
  F: "x ~ x!2 ~@2 x ~", G: "x ~ x ~@3 x!3 ~ x ~ x ~ x ~", H: "x ~ x ~@3 x!2 ~@2 x ~ x ~ x ~",
  I: "x ~ x ~@3 x!2 ~@4 x ~@3", J: "x ~@2 x ~@4",
})).gain(0.56)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~ A@35 ~@17 B A@3 B A@3 B A@3 B A@2 ~@42>".pickRestart({
  A: "~ x!2 ~", B: "~ x ~@2",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@44 [~@15 x] ~@31 [~@15 x] ~@33>").gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@44 [~@7 x ~@6 x ~] ~@7 [~@7 x ~@8] ~@23 [~@7 x ~@6 x ~] ~@33>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 B ~@3 C ~@11 D ~@7 D ~@3 B ~@3 B ~@3 B ~@11 D ~@33
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~ x", C: "~@10 x ~@3 x!2", D: "~@3 x ~ x ~@5 x ~ x ~@2",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@44 [~@3 x ~@4] ~@7 [~@3 x ~@4] ~@23 [~@3 x ~@4] ~@33>").gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@36 A B ~@3 B ~@3 B ~@3 B ~@18 A B ~@3 B ~@3 B ~@3 B ~@2 C B ~@3 B ~@2 C B ~@3 B ~@2 C B ~@3 B ~@2 C B
// … 12 more lines

More by Alberto Fortis