Strudelify

Io camminero

Leali

KeyC majorTempo72 bpm
0:00/0:00
// Io camminero — Leali
// 72 bpm, 2/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 166 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(72/2)

// 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(`<
  ~@37 A B ~@6 C D ~@4 E F G@2 H@2 I@2 J@2 K@2 L@4 M@2 N@2 O@2 J@2 P@2 Q@2 R@2 ~@21 S@4 T@6 U@4 V@8 W@2 X@6 Y@4 Z@4 AA@8
  AB@6 AC@5 ~@7
>`.pickRestart({
  A: "~@2 g#5 e6", B: "[a5,c6]", C: "~ e4 e5 b4", D: "c5@13 ~@3", E: "[g4,c5] e4 [g4,c5] e4",
  F: "[g4,c5]@2 e4@2 [g4,c5]@2 e4 ~", G: "[[e4,g4,c5]@15 ~]/2", H: "[[e4,g4,b4]@21 ~@3 [e4,g4,b4]@7 ~]/2",
  I: "[[c4,e4,a4]@15 ~]/2", J: "[[e4,g4,b4]@11 ~ [e4,g4,b4]@4]/2", K: "[[c4,f4,a4]@23 ~@9]/2",
  L: "[[f4,a4,d5]@22 ~@2 [f4,a4]@7 ~ [g4,b4]@30 ~@2, ~@24 d5@37 ~@3]/4", M: "[[g4,c5,e5]@31 ~]/2",
  N: "[[e4,g4,b4]@20 ~@4 [e4,g4,b4]@7 ~]/2", O: "[[c4,e4,a4]@31 ~]/2", P: "[[c4,f4,a4]@31 ~]/2",
  Q: "[[d4,a4], f4@29 ~@3]/2", R: "[d4@7 ~]/2", S: "[~@5 [e4,g4,c5]@30 ~@2 [e4,g4,b4]@22 ~@2 [e4,g4,b4]@3]/4",
  T: "[~@5 [e4,a4,c5]@31 ~ [e4,g4,b4]@23 ~ [e4,g4,b4]@7 ~ [c4,f4,a4]@27]/6", // Am Em F
  U: "[~@5 [f4,a4,d5]@30 ~@2 [g4,b4,d5]@27]/4", // Dm G
  V: "[~@5 [g4,a#4,d#5]@31 ~ [g4,a#4,d5]@22 ~@2 [g4,a#4,d5]@7 ~ [d#4,g4,c5]@30 ~@2 [g4,a#4,d5]@22 ~@2 [g4,a#4,d5]@3]/8", // D# Gm Cm Gm
  W: "[~@5 [d#4,g#4,c5]@27]/2", X: "[~@5 [g#4,c5,f5]@22 ~@2 [g#4,c5,f5]@7 ~ [f4,a#4,d5]@30 ~@2 [g4,a#4,d#5]@27]/6",
  Y: "[~@5 [g4,a#4,d5]@22 ~@2 [g4,a#4,d5]@7 ~ [g4,c5]@27]/4", // Gm C5
  Z: "[~@5 [g4,a#4,d5]@22 ~@2 [g4,a#4,d5]@7 ~ [d#4,g#4,c5]@27]/4", // Gm G#
  AA: "[~@5 [f4,g#4,c5]@23 ~ [g#4,c5,f5]@7 ~ [f4,a#4,d5]@30 ~@2 [g4,a#4,d#5]@31 ~ [g4,a#4,d5]@23 ~ [g4,a#4,d5]@3]/8", // Fm A# D# Gm
  AB: "[~@5 [d#4,g4,c5]@30 ~@2 [g4,a#4,d5]@22 ~@2 [g4,a#4,d5]@7 ~ [d#4,g#4,c5]@27]/6", // Cm Gm G#
  AC: "[~@5 [g#4,c5,f5]@31 ~ [f4,a#4,d5]@29 ~@14]/5", // Fm A#
})).s("gm_piano").gain(0.15).pan(0.6)

// bass · electric bass finger
const bass = note(`<
  ~@53 A@2 B C D E F C G H I J K L M N B C D O P C G H Q I R S T U V@4 ~@15 W X@4 Y@4 Z@4 AA@2 AB@4 AC@4 AD@6 AB@4 AE@4
  AF@2 AG@2 AH@2 AI@4 AJ@4 AK@4 AL AM@7 ~
>`.pickRestart({
  A: "c2@15 ~", B: "e1@15 ~", C: "e1", D: "a1@13 ~ a1 ~", E: "a1", F: "e1@13 ~ e1 ~", G: "f1@13 ~ f1 ~", H: "f1 e1",
  I: "d1@15 ~", J: "d1", K: "g1@13 ~ g1 ~", L: "g1", M: "c2@13 ~ c2 ~", N: "c2", O: "a1@15 ~", P: "e1@14 e1 ~",
  Q: "d1@14 d1 ~", R: "g1 ~@3 g1 ~@3 g1 ~@3 g1 ~@3", S: "g1 ~@3 g1 ~@3 g1 ~@3 g1@2 ~@2", T: "c2 b1", U: "a1@9 g1@7",
  V: "[~ f1@24 ~@7]/4", W: "~@5 c2@11", X: "[~@3 c2 ~ c2@16 e1@15 ~ e1@16 a1@11]/4",
  Y: "[~@3 a1 ~ a1@16 e1@14 e1 ~ e1@16 f1@11]/4", Z: "[~@3 f1 ~ f1@8 e1@8 d1@15 ~ d1@3 ~ d1@11 ~ g1@11]/4",
  AA: "[~@3 g1 ~ g1@16 d#2@11]/2", AB: "[~@3 a#1 ~ d#1@16 g1@15 ~ g1@16 c2@11]/4",
  AC: "[~@3 c2 ~ c2@16 g1@15 ~ g1@16 g#1@11]/4",
  AD: "[~@3 g#1 ~ g#1@8 g1@8 f1@15 ~ f1@3 ~ f1@12 a#1@15 ~ a#1@16 d#2@11]/6",
  AE: "[~@3 c2 ~ c2@16 g1@14 g1 ~ g1@16 g#1@11]/4", AF: "[~@3 g#1 ~ g#1@8 g1@8 f1@11]/2",
  AG: "[~@3 f1 ~ f1@3 ~ f1@11 ~ a#1@11]/2", AH: "[~@3 a#1 ~ a#1@16 d#2@11]/2",
  AI: "[~@3 a#1 ~ d#1@15 ~ g1@16 g1@16 c2@11]/4", AJ: "[~@3 c2 ~ c2@15 ~ g1@15 ~ g1@16 g#1@11]/4",
  AK: "[~@3 g#1 ~ g#1@8 g1@8 f1@16 f1@2 ~@2 f1@11 ~ a#1 ~@3 a#1 ~@3 a#1 ~@2]/4",
  AL: "~ a#1 ~@3 a#1 ~@3 a#1 ~@3 a#1 ~@2", AM: "[~ a#1 ~@3 d#2@8 d2@8 c2@9 a#1@10 g#1@70 ~@2]/7",
})).s("gm_electric_bass_finger").gain(0.29)

// chords · pad bowed
const pad_bowed = note("<A@4 B@2 C D@3 E@2 F G H I J K L@2 I ~@145>".pickRestart({
  A: "[f#2,f#3]/4", B: "[a#2@3 d3, f3]/2", C: "[d#3,f#3]", D: "[c#3 a#2 d#3, g#3@4 f#3 ~]/3", E: "f#2/2", F: "f2",
  G: "a#2", H: "d#2", I: "c#2", J: "a#1", K: "d#2@15 ~", L: "[a2@31 ~]/2",
})).s("gm_pad_bowed").gain(0.16).pan(0.4)

// chords · rock organ
const rock_organ = note(`<
  ~@53 A@8 B@4 C@8 D@8 E F G@3 ~@16 H@8 I@6 J@8 K@2 L@2 M@8 N@2 O@4 P@8 Q@8 R@7 ~
>`.pickRestart({
  A: "[c5 b4 [a4,c5] [g4,b4], e4@127 ~, g4@65 ~@63]/8", B: "[[f4,a4]@3 [e4,g4] [d4,f4]@4, c5]/4",
  C: "[b4 c5 b4 [a4,c5], g4@97 ~@31, ~ e4@3]/8", // Am
  D: "[[g4,b4]@16 [f4,a4]@12 [e4,g4]@4 f4@15 ~ [g4,b4]@15 ~, ~@32 c5@65 ~@31, ~@32 d4@31 ~]/8", // G F Em G
  E: "[g4,c5,e5]@8 [b4,d5]@7 ~", F: "[a4,c5]@9 [g4,b4]@7", G: "[~ [f4,a4]@18 ~@5]/3",
  H: "[~@5 c5@32 b4@32 [a4,c5]@32 [g4,b4]@27, ~@5 e5@123, ~@5 g4@64 ~@59]/8", // Am G
  I: "[~@5 [f4,a4]@24 [e4,g4]@8 f4@31 ~ [g4,b4]@27, ~@5 c5@64 ~@27, ~@37 d4@59]/6", // F Em G
  J: "[~@5 d#5@32 d5@32 [c5,d#5]@32 [a#4,d5]@27, ~@5 g5@123, ~@5 a#4@64 ~@59]/8", // Cm A#
  K: "[~@5 [g#4,c5]@23 ~ [g4,a#4]@3, ~@5 d#5@27]/2", L: "[~@5 [f4,g#4]@27]/2",
  M: "[~@5 d5@31 ~ d#5@32 d5@32 c5@27, ~@5 a#4@95 ~@28, ~@37 g5@91]/8", N: "[~@5 [a#4,d5]@27]/2",
  O: "[~@5 [g#4,c5]@22 ~@2 [g4,a#4]@8 [f4,g#4]@27, ~@5 d#5@59]/4", // G# Gm Fm
  P: "[~@5 d5@31 ~ d#5@32 d5@32 [c5,d#5]@27, ~@5 a#4@96 ~@27, ~@37 g5@91]/8", // Cm
  Q: "[~@5 [a#4,d5]@32 ~@24 [g4,a#4]@8 g#4@32 [a#4,d5]@27, ~@37 [g#4,c5]@23 ~@9 f4@59, ~@39 d#5@63 ~@26]/8", // A# Gm A# G#
  R: "[~@5 [d#5,g5]@8 [d5,f5]@8 [c5,d#5]@9 [a#4,d5]@8 ~@2 [g#4,c5]@57 ~@15, ~@5 a#4@15 ~@92]/7", // D# Dm Cm A# G#
})).s("gm_rock_organ").gain(0.07).pan(0.4)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@55 A@3 ~ B@2 ~@2 C@2 ~@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2 ~@23 K@3 ~ L@3 ~ M@3 ~ N@6 O@8 P@6 Q@4 R@8 S@8 T@2 ~@8
>`.pickRestart({
  A: "[~@4 d4@7 ~@5, ~@4 e3@29 ~@15, ~@8 g3@25 ~@15]/3", B: "[~@12 e4@19 ~, ~@4 g3@27 ~, ~@8 d4@9 ~@15]/2",
  C: "[~@12 f4@17 ~@3, ~@4 a3@25 ~@3, ~@8 c4@13 ~@11]/2", D: "[~@12 c4@19 ~, c3@29 ~@3, ~@2 e3@13 ~, ~@4 g3@11 ~]/2",
  E: "[~@12 d4@19 ~, ~ e3@7, ~ g3@3]/2", F: "[~@12 c4@19 ~, ~ e3@7, ~ a3@3]/2", G: "[~@3 d4@5, ~ e3@7, ~ g3@3]/2",
  H: "[~@3 c4@5, ~ f3@7, ~ g3@3]/2", I: "[~@12 f4@19 ~, ~ a3@7, ~@8 c4@23 ~]/2",
  J: "[~@6 d4@7 ~@3, ~@2 g3@11 ~@3, ~@4 b3@9 ~@3]/2", K: "[~@17 d4@21 ~@10, ~@9 e3@28 ~@11, ~@13 g3@24 ~@11]/3",
  L: "[~@17 e4@19 ~@12, ~@3 g3@9 ~@4, ~@13 d4@23 ~@12]/3", M: "[~@17 f4@19 ~@12, ~@3 a3@9 ~@4, ~@13 c4@23 ~@12]/3",
  N: "[~@17 d#4@22 ~@10 f4@21 ~@11 d#4@15, ~@5 d#3@12 ~@79, ~@9 g3@29 ~@3 g3@28 ~@4 g3@23, ~@13 a#3@25 ~@7 a#3@24 ~@8 c4@19]/6",
  O: "[~@17 f4@21 ~@11 d#4@19 ~@13 g#4@19 ~@13 f4@15, ~@9 g3@29 ~@3 g#3@27 ~@9 d#4@22 ~@10 d4@19, ~@13 a#3@25 ~@7 a#3@23 ~@5 c4@27 ~@5 a#3@23]/8",
  P: "[~@17 d#4@20 ~@12 f4@19 ~@13 d#4@15, ~@9 g3@29 ~@3 g3@28 ~@4 g3@23, ~@13 a#3@25 ~@7 a#3@24 ~@8 c4@19]/6",
  Q: "[~@17 f4@19 ~@13 d#4@13 ~@2, ~@9 g3@27 ~@5 g#3@8 ~@15, ~@13 a#3@23 ~@9 a#3@19]/4",
  R: "[~@9 c4@4 ~@4 g#4@18 ~@14 f4@18 ~@14 d#4@22 ~@10 f4@15, ~@13 d#4@22 ~@6 a#3@26 ~@6 g3@29 ~@3 g3@23, ~@45 d4@22 ~@10 a#3@26 ~@6 a#3@16 ~@3]/8",
  S: "[~@17 d#4@20 ~@12 f4@20 ~@12 d#4@19 ~@13 g#4@15, ~@9 g3@28 ~@4 g3@28 ~@4 g#3@26 ~@10 f4@19, ~@13 c4@24 ~@8 a#3@24 ~@8 a#3@22 ~@6 c4@23]/8",
  T: "[~@17 f4@12 ~@3, ~@9 a#3@20 ~@3, ~@13 d4@16 ~@3]/2",
})).s("gm_electric_guitar_clean").gain(0.33).pan(0.4)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@70 A@4 B@5 C@8 ~@18 D E@4 F@8 G H I ~@2 J K ~@8 L M ~@2 N O ~@8 P Q ~@2 R S ~ T@5 ~@7
>`.pickRestart({
  A: "[~ a4@2 ~@2 a4@2 ~ g5 [a4,a5]@2 b5 ~ a4@2 [b4,b5]@2 ~@47, g4@2 ~ b4@2 ~@2 b4@2 ~@2 b4@2 a5 ~@50, ~@2 g4 ~ g4 ~ g4@26, ~@6 g5 ~@25]/4", // A B
  B: "[~ a4@2 ~@2 a4@2 ~@2 [a4,a5]@2 ~@2 [a4,a5]@2 [b4,b5] ~@48 f5@4 e5@4 d5@4 c5@4, g4@3 b4@2 ~@2 b4@2 ~@2 [b4,b5]@2 ~@35 d4@32, ~ g4!2 g4@17, ~@8 g5@2 ~@2 g5@2 ~@46 a4@19 ~]/5", // A B
  C: "[[g3,b4]@31 ~@97, g4]/8", D: "~@3 a4 ~ a4 ~ [a4,a5], ~@5 g4@3 b4@2 ~@2 b4@2 ~@2, ~@9 g4@4 [g4,g5]@3",
  E: "[~@2 [a4,a5]@2 b5@2 ~@48 a4 ~@3 a4@2 ~@2 a5@2, [b4,b5]@3 ~ b4 ~@51 b4@2 ~@2 b4@2 a4 ~, ~ g4@52 g4@4 g4@4 [g4,g5]@3, ~ g5@2 ~@61]/4", // A B G
  F: "[b5 g5 [a4,a5]@2 [b4,b5]@2 ~@47 f5@4 e5@4 d5@4 c5@4 [g3,b4]@31 ~@28, b4@2 ~@35 d4@63 ~@28, ~ g4@127, ~@49 a4@20 ~@59]/8", // A B G
  G: "~@10 c5 ~@3 c5@2, ~@9 a#4@2 ~ d5@2 ~@2, ~@13 a#4@2 ~",
  H: "~ a#4 c5@2 d5 ~ [c5,c6] ~@3 [c5,c6]@2 ~@2 c5@2, d5@2 ~@3 [a#4,a#5]@2 ~ [d5,d6]@2 ~@2 [d5,d6]@2 c6 ~, ~@9 [a#4,a#5]@2 ~@2 [a#4,a#5]@2 ~", // C A# D A#
  I: "~ [c5,c6] [d5,d6] ~@5, [d5,d6] ~@7, ~ [a#4,a#5]@2 ~@13", // C D A#
  J: "~@6 c5 ~@3 c5 ~@2 [a#4,a#5] c5@2, ~@5 a#4@2 ~ d5@2 ~@2 d5@2 c6 ~, ~@9 a#4@2 ~@5", // A#
  K: "d6 ~ [c5,c6] ~ d5@2 ~@10, d5@2 ~@2 d6 ~@11, ~ [a#4,a#5]@2 ~@13", // C A#
  L: "~@6 c5 ~@3 c5 ~@3 c5@2, ~@5 a#4@2 ~ d5@2 ~@2 d5@2 c6 ~, ~@9 a#4@2 ~@2 [a#4,a#5]@2 ~", // A#
  M: "~ [a#4,a#5] [c5,c6]@2 d6@2 ~@10, [d5,d6]@2 ~@2 d5 ~@11", // A# C D
  N: "~@6 c5 ~@3 c5@2 ~ a#5 [c5,c6] ~, ~@5 a#4@2 ~ d5@2 ~@2 d5@2 ~@2, ~@9 a#4@2 ~@2 a#4@2 ~", // C
  O: "d6 [a#4,a#5] c6@2 d5@2 ~@10, d5@2 c5 ~ d6 ~@11", // A#
  P: "~@6 c5@2 ~@2 c5@2 ~@2 [c5,c6] ~, ~@5 a#4@2 ~ d5@2 ~@2 d5@2 ~@2, ~@9 a#4@2 ~@2 [a#4,a#5]@2 ~", // C A#
  Q: "d6 a#5 c6@2 [d5,d6] ~@11, d5@2 c5 ~@13, ~ a#4@2 ~@13", // D
  R: "~@6 c5@2 ~@2 c5 ~@3 [c5,c6] ~, ~@5 a#4@2 ~ d5@2 ~@2 d5@2 ~@2, ~@9 a#4@2 ~@2 [a#4,a#5]@2 ~", // C A#
  S: "~ a#5 [c5,c6] ~ d6@2 ~@10, [d5,d6]@2 ~@2 d5 ~@11, ~ a#4@2 ~@13", // C D
  T: "[~@21 g#5@4 g5@4 f5@4 d#5@4 [a#3,d5]@32 ~@11, ~@5 f4@64 ~@11, ~@17 c5@20 ~@43]/5", // A#
})).s("gm_string_ensemble_1").gain(0.24).pan(0.7)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@11 A B C D@2 E@2 F@5 G@6 H@7 I@2 J K L@6 M N@7 ~@31 O@7 P Q@5 R@7 ~@61
>`.pickRestart({
  A: "~@3 a#3", B: "c#4", C: "d4", D: "[d#4@5 c#4 f4 g#4]/2", E: "[a#4@31 ~]/2",
  F: "[[a1,a3]@8 ~@5 f4 g#4 a4 [f#2,f#3,f#4]@4, c#3@4 ~, ~@2 c#4@3, ~@2 [c#2,f3]@2 ~]/5", // A F# C#
  G: "[[e2,e3,e4]@16 [c#2,f4]@16 [f#2,f#4]@16 e5@20 d5@6 c#5@5 ~ [e2,g#4,b4]@16, g#4@2 a4@3 ~, ~ [c#3,c#5]@2 e4@3, ~@3 a2@2 ~]/6", // E C# F# E C#
  H: "[a4@8 g#4@8 [f#2,f#4,a4]@16 [e2,e3,e4]@16 [f2,f3,c#4]@16 [f#2,f#3,c#4,f#4,c#5]@15 ~ c5@19 ~ c5@4 b4@4 c5@4, f4, c#3@16 b4@16 ~@8 c3@5 ~@11, c#2 ~@4 [c2,g3,c4,e5]@2]/7", // F#m E C# F#5 C
  I: "[~ g#4, [e2,g#3,e4,b4]]/2", J: "[a2,a3,c4,c5]", K: "[g2,g3,b3,b4,d5]",
  L: "[[e2,g#3,g#4] [a2,c4] c3@2 [d4,b4,d5] [e2,g#3,e4,g#4,e5], [e4,e5]@2 b2, ~@16 c5@48 ~@16 f5 ~@15, ~@2 g3@3 ~]/6", // E Am G E
  M: "[a2,a3,c4,a4,c5]", N: "[[g2,d3,g3,b4,d5] [e2,g#3,g#4] [a2,a3,a4]@2 ~@3, b3@16 c4@33 ~@7, ~ e5@3 ~@3]/7",
  O: "[~@5 a2@32 e2@24 g#2@8 a2@16 g2@16 e2@11]/7", P: "~@9 c5@6 d5, ~@5 a2@11",
  Q: "[~@5 e5@20 b4@6 c5@6 [d4,d5]@16 e6@8 d6@8 [a2,a3,c4,c6]@11, ~@5 g3@48 [e2,g#3,e4]@16 ~@11, ~@5 e4@44 ~@31, ~@5 c3@32 b2@32 ~@11]/5", // D Am E
  R: "[~@5 [g2,d3,g3,d6]@16 [e2,g#3]@16 [a3,c4]@48 ~@27, ~@5 b3@32 a2@64 ~@11, ~@21 e6@82 ~@9]/7", // G5 E Am
})).s("gm_string_ensemble_2").gain(0.21).pan(0.6)

// chords · string ensemble 2 · soft notes
const string_ensemble_2_soft = note("<~@9 A@3 ~@14 B@2 C ~@6 C ~@2 D E ~ F ~@9 G@8 ~@107>".pickRestart({
  A: "[~@8 f#3@35 ~@5]/3", B: "a3/2", C: "e3", D: "~ e3@3, a4", E: "~ d3", F: "a3@15 ~",
  G: "[[c3,g3,c5]@17 ~@47, e4]/8", // C5
})).s("gm_string_ensemble_2").gain(0.08).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  ~@53 A@7 B A@5 C A@7 ~ A@5 C A@2 D ~@17 E F@7 ~ F@3 G F@13 G F H F@11 G F@9 ~ F@3 G F I F J K ~@5
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@4", C: "x!2 ~@2", D: "~ x ~@6", E: "~@11 x ~@4", F: "~@5 x ~@10", G: "~@5 x ~@3 x ~@6",
  H: "~@5 x ~ x ~@8", I: "~@5 x ~@5 x ~@4", J: "~@5 x ~@6 x ~@3", K: "~ x",
})).gain(0.5)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@53 A ~@3 A ~ A ~ A ~@3 A ~ A ~@3 A ~ A B A ~@3 A ~@23 C ~@3 C ~ C ~ C ~@3 C ~ C ~@3 C ~ C ~ C ~@5 C ~@3 C ~ D ~ C ~
  C ~ E ~ C ~@3 C ~ F ~ C ~ C ~ C ~@8
>`.pickRestart({
  A: "~@7 x", B: "x", C: "~@3 x ~@12", D: "~@3 x ~@5 x ~@6", E: "~@3 x ~@7 x ~@3 x", F: "~@7 x ~@8",
})).gain(0.25)

// drums · snare
const snare = s("sd").struct(`<
  ~@53 A@7 B A@5 C A@7 B A@7 D ~@18 E F@7 G F@5 E H F@12 I H F@6 J H F@5 K F@6 L F@7 M ~@6
>`.pickRestart({
  A: "~ x", B: "~ x ~@2 x ~@3", C: "~@3 x ~@4", D: "~@3 x ~@2 x ~ x!2 ~@6", E: "~@7 x ~@5 x ~@2", F: "~@13 x ~@2",
  G: "~@5 x ~@7 x ~@2", H: "~ x ~ x ~@9 x ~@2", I: "~@9 x ~@6", J: "~@7 x ~@3 x ~ x ~ x", K: "~ x ~@11 x ~@2",
  L: "~@9 x ~ x ~ x ~@2", M: "~@7 x",
})).gain(0.45)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@52 A ~@13 B ~@7 B ~@7 C ~@27 D ~@13 D ~@27 D ~@7 E ~@5>".pickRestart({
  A: "~ x", B: "~@3 x", C: "~@15 x", D: "~ x ~@14", E: "~@5 x ~@10",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@52 A ~@7 B ~@5 C ~@7 A ~@7 B ~@19 D ~@6 E ~@5 F ~@7 G ~@5 F ~@21 H ~@6 D ~ I ~@5
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@3 x", C: "~@5 x ~@2", D: "~ x ~@14", E: "~@15 x", F: "~@13 x ~@2", G: "~@11 x ~@4",
  H: "~@5 x ~@9 x", I: "~ x ~@6",
})).gain(0.4)
// … 87 more lines

More by Leali