Strudelify
Libera nos a malo cover art

Lambrusco coltelli rose & popcorn

Libera nos a malo

LIGABUE

KeyG majorTempo143 bpm
0:00/0:00
// Libera nos a malo — LIGABUE
// 143 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 140 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(143/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 · lead 2 sawtooth
const lead_2_sawtooth = note("<~@97 A@3 B@5 ~@35>".pickRestart({
  A: "[~@2 c#5, c5@2 ~, ~ e5@2]/3", B: "[d5 ~@2 d5 c#5, f5@2 e5@3, ~ c5@2 ~@2]/5",
})).s("gm_lead_2_sawtooth").gain(0.32)

// bass · electric bass finger
const bass = note(`<
  ~@3 A B C D E F G H I F G H I J K L M N K L I J O P M Q K R K J O P M Q K S T J O P M Q K S T F G H I F G H I J K L M
  N K L I J O P M Q K R K J O P M Q K S T J O P M Q K S T F G H I F G H I U V W X U V Y Z@2 AA AB ~ AC AD AE@2 AF AG K
  AH AI AG K AH AJ J O P M Q K S T J O P M Q K S T AK AL AM
>`.pickRestart({
  A: "~@3 a1", B: "d2", C: "a1", D: "g1", E: "c2@7 ~", F: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2 a1 ~ a1 ~",
  G: "a1 ~ a1@2 a1 ~ a1@2 a1 ~ a1@2 a1 ~ a1@2", H: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1@2 c2 ~ c2 ~",
  I: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", J: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2 a1 ~",
  K: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", L: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ c2 ~",
  M: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ a1@2 c2@2", N: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ a1 ~",
  O: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ g1@2", P: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1@2 c2 ~",
  Q: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ a1@2", R: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ a1 ~",
  S: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ f1 ~", T: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~", U: "d2 ~ d2@14",
  V: "f2 ~ f2@14", W: "c2 ~ c2@14", X: "a1 ~ a1@12 c2@2", Y: "[c2,d2] ~ c2@14", Z: "[a1@7 ~]/2", AA: "d2@3 ~@11 a1@2",
  AB: "~@7 g1", AC: "~@2 c2@4 c2 ~ c2 ~ c2 ~ c2 ~ c2@2", AD: "d2@3 ~@11 a1@2, c2 ~@15", AE: "[~@7 g1@2 ~@7]/2",
  AF: "~@2 c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@2", AG: "d2@2 d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ a1@2",
  AH: "g1@2 g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ c2@2", AI: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ a1 ~",
  AJ: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~@3", AK: "d2@2 d2@2 ~@2 d2@2 d2@2 ~@2 a1 ~ a1@2", AL: "~@3 g1 c2 g1 c2@2",
  AM: "d2 ~@7",
})).s("gm_electric_bass_finger").gain(0.33)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 D E F G D E F G H I@2 J H K@3 H I@2 J H L@3 H I@2 J H L@3 A@2 B@2 A@2 C@2 D E M G D E
  M G H I@2 J H N@3 H I@2 J H L@3 H I@2 J H O@3 P Q R@2 S T U V ~@9 W@3 X W@3 Y Z@3 AA AB@4 H I@2 J H AC@3 H I@2 J H
  AC@3 AD AE AF
>`.pickRestart({
  A: "[a4@2 a4@3 ~ d4 ~ d4@4 c5 ~ c5@4 b4@2 a4@2 g4@2 a4@2 b4@2 a4@4]/2",
  B: "[a4 ~ a4@4 d4 ~ d4@3 ~ c5 ~ c5@4 b4@2 a4@2 g4@2 a4@2 b4@2 a4@2 ~@2]/2", C: "[a4 ~ a4@4 d4 ~ d4@3 ~ c5 ~ c5@18]/2",
  D: "a4@2 d4 ~ a4@2 d4 ~ a4@2 d4 ~ d4 ~ e4@2", E: "a3 ~ a3 ~ [a3,e4]@2 a3 ~ e4@2 a3 ~ e4@2 a3 ~",
  F: "d4@2 g3 ~ d4@2 g3 ~ d4@2 g3 ~ [g3,d4] ~ g4@2", G: "c4 ~ c4 ~ g4@2 c4 ~ g4@2 c4 ~ g4@2 c4 ~", H: "[d3,a3]",
  I: "[[a2,e3]@7 [g2,d3]@9, ~@7 g3@8 ~]/2", J: "c3, g3@7 ~",
  K: "[[a2,e3]@14 [g2,d3]@15 ~ e3@6 e3@2 e3 ~ e3@2 e3@2 e3@2 ~@2, ~@30 [a2,a3]@17 ~]/3", // A5 G5 A
  L: "[[a2,e3]@14 [g2,d3]@15 ~ c3@6 c3@2 c3 ~ c3@2 c3 ~ c3@2 ~@2, ~@30 [f2,f3]@17 ~]/3", // A5 G5 F
  M: "~ g3 ~@2 [g3,d4]@2 g3 ~ d4@2 g3 ~ [g3,d4] ~ g4@2, [g3,d4] ~@7", // G5
  N: "[[a2,e3]@14 [g2,d3]@15 ~ e3@6 e3@2 e3 ~ e3@2 e3 ~ e3@2 ~@2, ~@30 [a2,a3]@17 ~]/3", // A5 G5 A
  O: "[[a2,e3]@14 [g2,d3]@15 ~ c3@6 c3@2 c3 ~ c3@2 a3@2 [c3,c4]@2 d4@2, ~@14 e3 ~@15 [f2,f3]@17 ~, ~@42 c3 ~@5]/3", // A5 G5 C F
  P: "f4 d4@4 a3 c4 d4, c4@5 ~@3", Q: "[c4,f4]@5 a3 c4 d4",
  R: "[[c4,f4]@2 d4@2 [c4,f4]@2 ~@2 c4 c4@3 [d4,g4]@20, ~@3 d4@2 ~@11]/2", // F5 G5
  S: "f5 d5 c5 d5 c5 a4 c5 a4 g4 a4 g4 ~ g4 f4 d4 f4, ~@11 f4@2 ~@3", T: "d4 c4 d4 c4 b3 c4 a3 f3 d3@6 ~@2",
  U: "f5 d4 d5 d4 c5 d4 a4 d4 g4 a3 f4 a3 e4 a3 d4 a3", V: "c4 d3 a3 d3 g3 d3 f3@10",
  W: "[[d3,a3]@3 ~@11 [a2,e3]@4 ~@12 [g2,d3]@4 ~@14]/3", X: "~ g3@4 g3@2 c3, ~@2 c3@11 ~@3",
  Y: "~ [c3,g3]@2 [c3,g3] c3 [c3,g3]!3", Z: "[[d3,a3]@3 [d3,a3] [d3,a3]@3 [a2,e3]@8 [g2,d3]@9, ~@14 d2 ~@33]/3",
  AA: "~ [c3,g3]!3 g3!2 [c3,g3]@2, ~@2 c3 ~", // C5
  AB: "[[d3,a3]@14 [a2,e3]@16 [g2,d3]@19 ~ c3@4 c3@2 [c3,g3]@2 [c3,g3]@2 [c3,g3]@3 ~, ~@30 f2 ~@19 g3@6 ~@8]/4", // D5 A5 G5 C5
  AC: "[[a2,e3]@14 [g2,d3]@15 ~ [f2,c3,f3]@6 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@2]/3", // A5 G5 F5
  AD: "[d3,a3,d4] ~ [d3,a3,d4]@2 ~@2 [d3,a3,d4] ~ [d3,a3,d4]@2 ~@2 [a2,e3,a3]@2 [a2,e3,a3]@2", // D5 A5
  AE: "~@3 [g2,g3] [c3,c4] [g2,g3] [c3,g3,c4]@2", AF: "[d3,a3,d4] ~@7",
})).s("gm_overdriven_guitar").gain(0.24).pan(0.4)

// chords · overdriven guitar
const overdriven_guitar_2 = note(`<
  ~@4 A B C D E@2 F@2 G@2 H@2 ~@16 I ~@2 J I ~@3 I ~@2 J ~@4 E@2 F@2 G@2 H@2 ~@16 I ~@2 J I ~@3 I ~@2 J ~@4 E@2 F@2 G@2
  H@2 ~@25 I ~@2 J I ~@3 I ~@2 J I ~@6
>`.pickRestart({
  A: "[d3,a3]", B: "[a2,e3]", C: "[g2,d3]", D: "[c3,g3]",
  E: "[[d3,a3]@3 ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [a2,e3]@4 ~@2 [a2,e3] ~ e3 ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~]/2", // D5 A5
  F: "[[g2,d3]@4 [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3]@2 [c3,g3]@6 ~@2 [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~]/2", // G5 C5
  G: "[[d3,a3]@4 [d3,a3] ~ [d3,a3] ~ d3 ~ [d3,a3] ~ [d3,a3] ~ [a2,e3]@4 ~@10 [a2,e3] ~ [a2,e3] ~]/2", // D5 A5
  H: "[[g2,d3]@3 ~ [g2,d3] ~ d3 ~ d3 ~ [g2,d3] ~ [g2,d3] ~ [c3,g3]@18]/2", I: "~@3 f#4 g4 f#4 d4@2",
  J: "~ [f3,f4] [e3,e4] [c3,c4] [f3,f4] [e3,e4] [c3,c4] [d3,d4]", // F E C F E C D
})).s("gm_overdriven_guitar").gain(0.32)

// chords · overdriven guitar · soft notes
const overdriven_guitar_soft = note("<~@9 A ~ B ~ C D ~@34 A ~ B ~ C D ~@34 A ~ B ~ C D ~@45>".pickRestart({
  A: "~@6 a2 ~@9", B: "~@4 [c3,g3] ~@11", C: "~@4 [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~@5", D: "~@6 g2 ~@9",
})).s("gm_overdriven_guitar").gain(0.21)

// other · lead 5 charang
const lead_5_charang = note(`<
  ~@56 A B C@2 D E F G H@2 I J K@2 L M N@2 O@2 P@2 Q@2 R@2 S@2 T U V W ~@33 X@2 ~@2 Y@2 ~@2 Z@2 ~@2 Y@2 ~@5
>`.pickRestart({
  A: "c4@3 ~ c4 ~ a3 ~ c4@2 a3 ~@5", B: "~@2 c4 ~ c4@2 a3 ~ c4@2 a3 ~@5",
  C: "[~@2 b3 ~ b3 ~ b3 ~ b3@2 a3 ~ b3 ~ c4@4 b3 ~ a3 ~ g3 ~ b3@4 a3@2 ~@2]/2", D: "d4@2 ~@2 d4@2 a3 ~ d4@2 a3 ~@5",
  E: "~@2 c4 ~ c4@2 a3 ~ c4@2 d4 ~@5", F: "~@2 d4 ~ d4 ~ d4 ~ e4 ~ d4 ~@3 f4@2",
  G: "~@2 f4 ~ f4@2 d4 ~ e4@3 ~ d4@2 ~@2", H: "[a4@4 g4 ~ f#4 ~ g4@2 f#4 ~ a4 ~ a4@11 ~@7]/2",
  I: "~@2 c5 ~ c5 ~ c5 ~ b4@4 a4@3 ~", J: "~@2 d5 ~ d5 ~ d5 ~ d5@4 a4 ~@3",
  K: "[a4@4 g4 ~ f#4 ~ g4 ~ f#4 ~ a4 ~ a4@9 ~@9, g#4 ~@31]/2", L: "~@2 c5 ~ c5 ~ c5@2 b4@4 a4@3 ~",
  M: "~@2 d5 ~ d5@2 c5 ~ d5@3 ~ d5@2 ~@2, ~@8 d#5 ~@7", N: "[d5 ~ d5 ~ d5 ~ d5@6 a4@2 c5@8 b4@6 ~@4]/2",
  O: "[~@2 g4 ~ g4 ~ g4@2 c5@2 b4@2 a4@2 d4@6 ~@12]/2", P: "[d5 ~ d5 ~ d5 ~ d5@6 a4@2 c5@8 b4@4 ~@6]/2",
  Q: "[~@4 g4 ~ g4@2 c5@2 b4@4 a4@15 a#4 b4 c5]/2", R: "[d5 ~ d5 ~ d5 ~ d5@6 a4 ~ c5@8 b4@4 ~ [c4,d4,e4] ~@4]/2",
  S: "[~@2 g4 ~ g4 ~ g4 ~ c5@2 b4@2 a4 ~ d4@7 c4 [a3,b3] [f3,g3] ~@8]/2", T: "a4 ~ a4 ~ a4 ~ g4 ~ g4 ~ f#4 ~ b4 ~ b4 ~",
  U: "a4 ~ a4 ~ a4 ~ g4 ~ g4 ~ g4@2 f#4@2 b4 ~", V: "a4@3 ~@7 a4@2 c5@2 b4@2", W: "a4@5 ~@3",
  X: "[~@2 d5 ~ d5 ~ d5@6 a4@2 c5@8 b4@8 ~@2]/2", Y: "[[c#5,d5] ~ d5 ~ d5 ~ d5@6 a4@2 c5@8 b4@8 ~@2]/2",
  Z: "[d5 ~ d5 ~ d5 ~ d5@6 a4@2 c5@8 b4@8 ~@2]/2",
})).s("gm_lead_5_charang").gain(0.39)

// chords · overdriven guitar
const overdriven_guitar_3 = note(`<
  A B C B D B C B D B C B D B C E@2 F G H I F G H J@7 K@8 L@8 M@2 B C B D B C E@2 F N H I F N H J@7 K@8 O@8 P@2 Q R S@4
  T@2 ~@8 U V W X@2 V W Y Z@4 AA@4 AB@7 AC AD@7 AC AE AF AG
>`.pickRestart({
  A: "~@4 a4@2 a4@3 ~ d4 ~ d4@4", B: "c5 ~ c5@4 b4@2 a4@2 g4@2 a4@2 b4@2", C: "a4@4 a4 ~ a4@4 d4 ~ d4@3 ~",
  D: "a4@2 ~@2 a4@2 a4@3 ~ d4 ~ d4@4", E: "[c5 ~ c5@18 a4@2 d4 ~ a4@2 d4 ~ a4@2 d4 ~]/2",
  F: "d4 ~ e4@2 a3 ~ a3 ~ [a3,e4]@2 a3 ~ e4@2 a3 ~", G: "e4@2 a3 ~ d4@2 g3 ~ d4@2 g3 ~ d4@2 g3 ~",
  H: "[g3,d4] ~ g4@2 c4 ~ c4 ~ g4@2 c4 ~ g4@2 c4 ~", I: "g4@2 c4 ~ a4@2 d4 ~ a4@2 d4 ~ a4@2 d4 ~",
  J: "[g4@2 c4 ~ [d3,a3]@16 [a2,e3]@14 [g2,d3]@18 c3@16 [d3,a3]@16 [a2,e3]@14 [g2,d3]@14, ~@17 g3@8 ~ g3@7 ~@23]/7", // D5 A5 G5 D5 A5 G5
  K: "[~@2 e3@6 e3@2 e3 ~ e3@2 e3@2 e3@2 ~@2 [d3,a3]@16 [a2,e3]@14 [g2,d3]@18 c3@16 [d3,a3]@16 [a2,e3]@14 [g2,d3]@14, ~@2 [a2,a3]@17 ~@31 g3@16 ~@2 g3@14 ~@46]/8", // D5 A5 G5 D5 A5 G5 A
  L: "[~@2 c3@6 c3@2 c3 ~ c3@2 c3 ~ c3@2 ~@2 [d3,a3]@16 [a2,e3]@14 [g2,d3]@18 c3@16 [d3,a3]@16 [a2,e3]@14 [g2,d3]@14, ~@2 [f2,f3]@17 ~@31 g3@16 ~@2 g3@14 ~@46]/8", // D5 A5 G5 D5 A5 G5 F
  M: "[~@2 c3@6 c3@2 c3 ~ c3@2 c3 ~ c3@2 ~@2 a4@2 a4@3 ~ d4 ~ d4@4, ~@2 [f2,f3]@17 ~@13]/2", // F
  N: "e4@2 a3 ~@2 g3 ~@2 [g3,d4]@2 g3 ~ d4@2 g3 ~, ~@2 [g3,d4] ~@5", // G5
  O: "[~@2 c3@6 c3@2 c3 ~ c3@2 c3@2 c3@2 ~@2 [d3,a3]@16 [a2,e3]@14 [g2,d3]@18 c3@16 [d3,a3]@16 [a2,e3]@14 [g2,d3]@14, ~@2 [f2,f3]@17 ~@31 g3@16 ~@2 g3@14 ~@32 e3 ~@13]/8", // D5 A5 G5 D5 A5 G5 F
  P: "[~@2 c3@6 c3@2 c3 ~ c3@2 a3@2 [c3,c4]@2 d4@2 f4@2 d4@8 a3@2, ~@2 [f2,f3]@17 ~@13, ~@14 c3 ~@5 c4@10 ~@2]/2", // C F
  Q: "c4 d4 [c4,f4]@5 a3", R: "c4@2 d4@2 [c4,f4]@2 d4@2 [c4,f4]@2 ~@2 c4 c4@3, ~@5 d4@2 ~",
  S: "[[d4,g4]@20 f5 d5 c5 d5 c5 a4 c5 a4 g4 a4 g4 ~ g4 f4 d4 f4 d4 c4 d4 c4 b3 c4 a3 f3 d3@6 ~@2 f5 d4 d5 d4 c5 d4 a4 d4 g4 a3 f4 a3, ~@31 f4@2 ~@31]/4", // G5
  T: "[e4 a3 d4 a3 c4 d3 a3 d3 g3 d3 f3@10 ~@12]/2", U: "~@4 [d3,a3]@3 ~@9", V: "~ [a2,e3]@2 ~@5", W: "~ [g2,d3]@2 ~@5",
  X: "[~@6 g3@8 g3@4 c3@2 [d3,a3]@3 ~@9, ~@6 c3@11 ~@15]/2", Y: "~@3 [c3,g3]@2 c3!2 [c3,g3], ~@5 g3@2 ~",
  Z: "[[c3,g3]!2 [d3,a3]@3 [d3,a3] [d3,a3]@3 [a2,e3]@8 [g2,d3]@9 ~ [c3,g3]!3 g3!2, ~@18 d2 ~@41 c3@4]/4", // C5 D5 A5 G5 C5
  AA: "[[c3,g3]@4 [d3,a3]@14 [a2,e3]@16 [g2,d3]@19 ~ c3@4 c3@2 [c3,g3]@2 [c3,g3]@2, ~@34 f2 ~@19 g3@6 ~@4]/4", // C5 D5 A5 G5 C5
  AB: "[[c3,g3]@3 ~ [d3,a3]@16 [a2,e3]@14 [g2,d3]@18 c3@16 [d3,a3]@16 [a2,e3]@14 [g2,d3]@14, ~@17 g3@8 ~ g3@7 ~@23]/7", // C5 D5 A5 G5 D5 A5 G5
  AC: "~ [f2,c3,f3]@3 [f2,c3,f3]!4", // F5
  AD: "[[f2,c3,f3]!2 [d3,a3]@8 [a2,e3]@7 [g2,d3]@9 c3@8 [d3,a3]@8 [a2,e3]@7 [g2,d3]@7, ~@17 g3@8 ~ g3@7 ~@23]/7", // F5 D5 A5 G5 D5 A5 G5
  AE: "[f2,c3,f3]@2 [f2,c3,f3]@2 [d3,a3,d4] ~ [d3,a3,d4]@2 ~@2 [d3,a3,d4] ~ [d3,a3,d4]@2 ~@2", // F5 D5
  AF: "[a2,e3,a3]!2 ~@3 [g2,g3] [c3,c4] [g2,g3]", AG: "[c3,g3,c4]@2 [d3,a3,d4] ~@5",
})).s("gm_overdriven_guitar").gain(0.08).pan(0.8)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@15 A ~@39 A ~@48 B ~@6 C ~@8 C ~@15 D ~@3>".pickRestart({
  A: "~@5 x ~@2", B: "~@13 x ~@2", C: "~@15 x", D: "~@7 x",
})).gain(0.54)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@16 A B C ~ A ~@3 A B C ~ A ~@2 B A B C ~ A ~@2 B A B C ~ A ~@2 B ~@8 A B C ~ A ~@3 A B C ~ A ~@2 B A B C ~ A ~@2 B A
  B C ~ A ~@2 B ~@15 D ~@8 D ~@27
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@5 x ~@2", C: "~@5 x ~ x", D: "~@7 x",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@104 A ~@6 B ~@8 B ~@15 C ~@3>".pickRestart({
  A: "~@11 x!2 ~@3", B: "~@7 x", C: "~@13 x ~@2",
})).gain(0.42)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A B A B A B A C ~@3 D ~@3 D ~@3 D ~@7 D ~@7 D ~@4 A B A B A B A C ~@3 D ~@3 D ~@3 D ~@7 D ~@7 D ~@4 A B@7 ~@8 D E
  D ~ F E D ~ G H I J I@3 J K H I J@2 L I J M H I J@2 L I J M N ~ O
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x!2 ~@2", D: "~@7 x", E: "x ~@6 x", F: "~ x ~@2 x ~ x ~", G: "~ x ~@2", H: "~@2 x!6",
  I: "x!7 ~", J: "x!8", K: "x!5 ~ x ~", L: "~ x!7", M: "x!4 ~ x ~ x", N: "x!2 ~ x!2 ~ x!2", O: "x",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@120 [~@13 x ~@2] ~@19>").gain(0.48)

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

More by LIGABUE