Strudelify

Acqua

Berte

KeyF majorTempo92 bpm
0:00/0:00
// Acqua — Berte
// 92 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 74 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(92/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.

// bass · fretless bass
const bass = note("<~@24 A@7 B@3 C@4 D@7 E@2 F@2 G H I J K L M N O P Q@7 R S T U@5>".pickRestart({
  A: "[d2@12 ~@6 d2@2 ~@4 d2@13 ~@5 g1@2 ~ ab1@2 a1@14 ~@4 a1@2 ~@4 a1@17 ~@7 a1@5 ~ c2@5 ~ f1@6 a1@6 c2@6 d2@4 ~@2 g2@11 f2@17 ~@7 f2@7 ~@5 a1@11 ~ d2@13 ~@5 d2@3 ~@3 d2@14 ~@3 g1@3 ab1@2 ~ a1@14 ~@4 a1@2 ~@4 a1@19 ~@5 bb1@11 ~ a1@12 g1@12 c2@11 ~@4]/7",
  B: "[~@2 f1@17 ~ a1@6 c2@6 e2@6 g2@6 d2@12 ~@6 d2@2 ~@4 d2@13 ~@4 g1@2 ~ ab1@2 ~ a1@14 ~@4 a1@2 ~@4 a1@17 ~@7 a1@5]/3",
  C: "[~ c2@5 ~ f1@6 a1@6 c2@6 d2@4 ~ g2@11 ~ f2@17 ~@7 f2@7 ~@5 a1@11 ~ d2@13 ~@5 d2@3 ~@3 d2@14 ~@3 g1@3 ab1@2 ~ a1@14 ~@4 a1@2 ~@4 a1@19 ~@5 bb1@7]/4",
  D: "[~@5 a1@12 g1@11 c2@11 ~@7 d2@41 ~ eb2@47 f1@14 ~@4 f1@6 c2@19 ~@5 f1@16 ~@2 f1@5 c2@19 ~@5 f1@14 ~@4 f1@6 c2@11 ~ bb1@17 c3@10 bb2@8 f2@12 bb1@6 c2@5 ~ d2@11]/7",
  E: "[~@7 d2@2 ~@4 d2@14 ~ a1@3 d2@6 c2@15 ~@2 c2@4 ~@2 c2@23 ~ f1@12]/2",
  F: "[~@6 f1@4 ~@2 f1@24 c2@16 ~ c2@5 ~ c2@20 ~@4 f1@13]/2", G: "~@5 f1@6 c2@19 ~@5 f1@13",
  H: "~@4 f1@6 c2@19 ~@5 f1@14", I: "~@4 f1@6 c2@11 ~ bb1@17 c3@9", J: "~ bb2@8 f2@12 bb1@6 c2@5 ~ d2@13 ~@2",
  K: "~@3 d2@2 ~@4 d2@14 ~ a1@3 d2@6 c2@15", L: "~@2 c2@29 ~ f1@15 ~", M: "~@2 f1@4 ~@2 f1@23 c2@16 ~",
  N: "~ c2@5 ~ c2@20 ~@4 f1@14 ~@3", O: "~ f1@6 c2@19 ~@4 f1@16 ~@2", P: "f1@6 c2@19 ~@5 f1@14 ~@4",
  Q: "[f1@6 c2@11 ~ bb1@17 c3@10 bb2@8 f2@12 bb1@6 c2@5 ~ d2@13 ~@5 d2@2 ~@4 d2@14 a1@3 d2@6 c2@15 ~@3 c2@4 ~@2 c2@23 ~ f1@15 ~@3 f1@4 ~@2 f1@23 c2@16 ~@2 c2@5 ~ c2@20 ~@4 f1@14 ~@4 f1@6 c2@19 ~@4 f1@16 ~@2 f1@4]/7",
  R: "~@2 c2@19 ~@5 f1@14 ~@4 f1@4", S: "~@2 c2@11 bb1@17 ~ c3@9 bb2@8", T: "~ f2@12 bb1@6 c2@5 ~ d2@13 ~@5 d2@2 ~@3",
  U: "[~ d2@14 a1@3 d2@6 c2@15 ~@3 c2@29 ~ f1@15 ~@3 f1@4 ~ f1@24 c2@16 ~@2 c2@5 ~ c2@20 ~@4 f1@47 ~@26]/5",
})).s("gm_fretless_bass").gain(0.51)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@24 A@4 B@3 C@3 D@2 E@2 F@2 G@2 H@6 I@8 J@8 K@4 L@6>".pickRestart({
  A: "[~@18 c4@28 ~@19 c4@25 ~@5 [bb3,d4,f4]@5 ~@7 [a3,c4,f4]@5 ~@7 [bb3,c4,f4]@4 ~@8 [f3,bb3,c4]@5 ~@7 a3@42 ~@7, ~@6 d3@40 ~ a2@43 ~@52 f3@39 ~@11, ~@12 e4@34 ~@13 g4@31 ~@53 c4@38 ~@11]/4", // Bb F Bbsus2 Fsus4
  B: "[~@16 c4@28 ~@19 c4@25 ~@5 [bb3,d4,f4]@5 ~@7 [a3,c4,f4]@5 ~@7 [bb3,c4,f4]@4 ~@8 [f3,bb3,c4]@5 ~@10, ~@4 d3@40 ~ a2@43 ~@56, ~@10 e4@34 ~@13 g4@31 ~@56]/3", // Bb F Bbsus2 Fsus4
  C: "[~@2 [a3,c4,f4]@17 ~@19 e4@5 ~@19 c4@28 ~@19 c4@25 ~@5 [bb3,d4,f4]@5, ~@20 a2@17 ~@7 d3@45 ~@2 a2@43 ~@10, ~@26 g3@13 ~@17 e4@34 ~@13 g4@31 ~@10, ~@32 bb3@11 ~@7 a3@40 ~@54]/3", // F Bb
  D: "[~@7 [a3,c4,f4]@5 ~@7 [bb3,c4,f4]@4 ~@7 [f3,bb3,c4]@5 ~@8 a3@42 ~@11, ~@14 f3@13 ~@5, ~@43 c4@38 ~@15]/2", // F Bbsus2 Fsus4
  E: "[~@12 c4@28 ~@19 c4@25 ~@5 [bb3,d4,f4]@5 ~@2, d3@40 ~ a2@43 ~@12, ~@6 e4@34 ~@13 g4@31 ~@12]/2", // Bb
  F: "[~@5 [a3,c4,f4]@5 ~@7 [bb3,c4,f4]@4 ~@7 [f3,bb3,c4]@5 ~@13 [a3,f4,a4,d5]@41 ~@9]/2", // F Bbsus2 Fsus4 Dm
  G: "[~@57 c4@30 f3 ~@8, ~@15 f3@13 ~@4, ~@17 f4@15]/2",
  H: "[~@9 c4@29 ~@18 c4@17 ~@13 f4@42 ~@51 c3 ~ f4@43 ~@22 c4@26 ~@10 [bb3,c4,f4]@6, ~@3 f4@35 f3@35 ~ bb3@56 ~@3 d3@42 ~@53 f3@43 ~@17, ~@50 f4@23 ~@72 e4@31 ~@4 bb3@45 ~@63, ~@151 c4@75 ~@14 f4@27 ~@21]/6", // Bbsus2
  I: "[~@17 d4@6 c4@10 ~@20 c4@30 f3 ~@16 c4@30 ~@18 c4@18 ~@12 f4@42 ~@51 c3 ~ f4@43 ~@22 c4@26 ~@9 [bb3,c4,f4]@11, ~@5 g3@29 ~@7 f3@39 ~@50 f3@36 bb3@56 ~@3 d3@42 ~@53 f3@43 ~@21, ~@11 g4@22 ~@14 f4@47 f4@35 ~@13 f4@25 ~@70 e4@31 ~@4 bb3@45 ~@67, ~@243 c4@75 ~@14 f4@27 ~@25]/8", // Bbsus2
  J: "[~@13 d4@6 c4@10 ~@20 c4@29 f3 ~@17 c4@30 ~@18 c4@18 ~@11 f4@42 ~@52 c3 ~ f4@43 ~@22 c4@26 ~@9 [bb3,c4,f4]@12 g3@3, ~ g3@29 ~@7 f3@39 ~@50 f3@36 bb3@56 ~@3 d3@42 ~@53 f3@43 ~@25, ~@7 g4@22 ~@14 f4@47 f4@35 ~@13 f4@25 ~@70 e4@31 ~@4 bb3@45 ~@71, ~@239 c4@75 ~@14 f4@27 ~@29]/8", // Bbsus2
  K: "[~@9 d4@6 c4@10 ~@20 c4@29 f3 ~@17 c4@30 ~@18 c4@17 ~@12 f4@23, ~@3 g4@22 ~@8 f3@39 ~@50 f3@35 bb3@35, ~@39 f4@47 f4@35 ~@13 f4@25 ~@33]/4",
  L: "[~@71 c3 ~ f4@43 ~@22 c4@26 ~@9 [bb3,c4,f4]@12 ~@12 d4@6 c4@10 ~@3 f4@47 ~@25, ~@25 d3@42 ~@53 f3@43 ~@22 g3@30 ~@73, ~@37 e4@31 ~@4 bb3@45 ~@96 f3@48 ~@27, ~@43 c4@75 ~@14 f4@27 ~@32 g4@23 [a3,c4]@48 ~@26]/6", // Bbsus2 Am
})).s("gm_electric_guitar_clean").gain(0.31).pan(0.7)

// other · french horn
const french_horn = note("<~@40 A@2 B@8 C@8 D@7 E F@8>".pickRestart({
  A: "[~@13 c4@8 d4@8 c4@3]/2", B: "[~@14 d4@24 c4@36 d4@59 c4@47 ~ d4@47 c4@47 ~ d4@46 ~ c4@24 d4@24 c4@13]/8",
  C: "[~@10 d4@24 c4@36 d4@59 c4@47 ~ d4@47 c4@47 d4@46 ~@2 c4@24 d4@23 c4@18]/8",
  D: "[~@6 d4@24 c4@36 d4@59 c4@47 d4@47 ~ c4@47 d4@46 ~@2 c4@21]/7", E: "~@3 d4@23 c4@22",
  F: "[~@2 d4@24 c4@35 d4@59 ~ c4@47 d4@47 ~ c4@47 d4@47 ~ f4@47 ~@26]/8",
})).s("gm_french_horn").gain(0.2).pan(0.3)

// other · french horn · soft notes
const french_horn_soft = note("<~@40 A@2 B@8 C@8 D@7 E F@8>".pickRestart({
  A: "[~@13 c5@8 d5@8 c5@3]/2", B: "[~@14 d5@24 c5@36 d5@59 c5@47 ~ d5@47 c5@47 ~ d5@46 ~ c5@24 d5@24 c5@13]/8",
  C: "[~@10 d5@24 c5@36 d5@59 c5@47 ~ d5@47 c5@47 d5@46 ~@2 c5@24 d5@23 c5@18]/8",
  D: "[~@6 d5@24 c5@36 d5@59 c5@47 d5@47 ~ c5@47 d5@46 ~@2 c5@21]/7", E: "~@3 d5@23 c5@22",
  F: "[~@2 d5@24 c5@35 d5@59 ~ c5@47 d5@47 ~ c5@47 d5@47 ~ f5@47 ~@26]/8",
})).s("gm_french_horn").gain(0.15).pan(0.3)

// other · pad poly
const pad_poly = note("<~@45 A@4 ~@4 B@4 ~@4 C@4 ~@4 D@5>".pickRestart({
  A: "[~@37 c2@47 f1@47 ~ c2@50 ~@10]/4", B: "[~@33 c2@47 f1@47 c2@50 ~@15]/4", C: "[~@28 c2@47 ~ f1@47 c2@50 ~@19]/4",
  D: "[~@24 c2@47 ~ f1@47 c2@47 ~ f1@47 ~@26]/5",
})).s("gm_pad_poly").gain(0.46)

// other · pad poly · soft notes
const pad_poly_soft = note("<~@40 A@6 ~@2 B@6 ~@2 C@6 ~@2 D@6 ~@4>".pickRestart({
  A: "[~@39 f1@131 bb1@59 d2@46 ~@13]/6", B: "[~@35 f1@131 bb1@59 d2@46 ~@17]/6",
  C: "[~@31 f1@131 bb1@59 d2@46 ~@21]/6", D: "[~@27 f1@130 bb1@59 ~ d2@46 ~@25]/6",
})).s("gm_pad_poly").gain(0.3)

// chords · synth strings 2
const synth_strings_2 = note("<~@13 A@5 B@4 ~@52>".pickRestart({
  A: "[~@47 [bb1,c4]@33 [b1,b3]@31 [c2,c4]@32 [db2,e4]@40 [d2,f4]@35 [c2,e4]@22, ~@47 f4@97 ~@96, ~@47 d4@63 ~ a4@129]/5", // Bbsus2 B C Dbm Dm C
  B: "[~@13 [b1,d4,g4]@70 ~@44 [c2,bb3]@50 ~@15, ~@83 f4@95 ~@14, ~@83 [bb1,c4]@50 ~@59]/4", // G C7 Bbsus2
})).s("gm_synth_strings_2").gain(0.3)

// chords · pad poly
const pad_poly_2 = note("<~@21 A@2 B C@7 D@7 E@2 F@7 G@8 H@8 I@4 J@7>".pickRestart({
  A: "[~@47 [f2,f3,a3,c4]@18 ~ [db2,f3,ab3,c4,db4]@29 ~]/2", // F Dbmaj7
  B: "[f2,f3,a3,c4,e4]@23 ~ [a2,g3,db4,f4]@11 ~ [a2,g3,db4,f4]@9 ~@3", // Fmaj7 Aaug
  C: "[[a3,c4,f4]@34 ~ [a3,c4,f4]@11 ~ [a2,g3,c4,e4]@45 ~@2 [bb2,bb3,d4,f4]@12 [f2,a3,c4,f4]@12 [g2,bb3,c4,f4]@12 [c2,f3,bb3,c4]@11 ~ [f2,a3,c4,f4]@31 ~@5 [a2,db4,e4,bb4]@11 [d3,c4,f4,a4]@47 ~ [a2,c4,e4,g4]@45 ~@2 [bb2,bb3,d4,f4]@12 [a2,a3,c4,f4]@12 [g2,bb3,c4,f4]@11 ~ [c2,f3,bb3,c4]@15 ~, d3@47 ~@289]/7", // F Am7 Bb F Gm7 Fsus4 F A …
  D: "[~@2 [f2,a3,c4,f4]@17 ~ [a2,g3,bb3,db4,e4]@23 [a3,c4,f4]@34 ~@2 [a3,c4,f4]@11 ~ [a2,g3,c4,e4]@45 ~@2 [bb2,bb3,d4,f4]@12 [f2,a3,c4,f4]@12 [g2,bb3,c4,f4]@12 [c2,f3,bb3,c4]@11 ~ [f2,a3,c4,f4]@31 ~@4 [a2,db4,e4,bb4]@12 [d3,c4,f4,a4]@47 ~ [a2,c4,e4,g4]@45 ~@2 [bb2,bb3,d4,f4]@8, ~@43 d3@47 ~@246]/7", // F A7 F Am7 Bb F Gm7 Fsus4 …
  E: "[~@4 [a2,a3,c4,f4]@12 [g2,bb3,c4,f4,bb4]@11 ~ [c2,f3,bb3,c4,c5]@15 ~@3 [d2,d3,a3,c4,f4,a4,d5]@41 [eb2,f3,a3,c4,f4,a4]@9]/2", // F Gm7 Fsus4 Dm7 F7
  F: "[~@15 [eb3,g3,d4,g4,bb4]@24 c3@23 d3@24 c3@24 d3@24 c3@34 ~ [bb1,bb2,d4]@59 ~ [d2,d3,c4]@47 [c2,c3,f3,g3,bb3,d4]@47 ~ [f1,f2,f3,a3,c4]@12, ~@39 [f1,f2,f3,a3,c4,f4,a4]@130 [a3,f4]@107 ~@60]/7", // Ebmaj7 Bb D7 Gm7 F Dm
  G: "[~@35 [c2,c3,f3,g3,bb3,d4]@47 ~ c3@23 d3@24 c3@24 d3@24 c3@34 ~ [bb1,bb2,d4]@59 ~ [d2,d3,c4]@47 [c2,c3,f3,g3,bb3,d4]@47 ~ [f1,f2,f3,a3,c4]@16, ~@83 [f1,f2,f3,a3,c4,f4,a4]@130 [a3,f4]@107 ~@64]/8", // Gm7 Bb D7 Gm7 F Dm
  H: "[~@31 [c2,c3,f3,g3,bb3,d4]@47 c3@24 d3@24 c3@24 d3@23 c3@34 ~@2 [bb1,bb2,d4]@59 [d2,d3,c4]@47 ~ [c2,c3,f3,g3,bb3,d4]@47 [f1,f2,f3,a3,c4]@21, ~@78 [f1,f2,f3,a3,c4,f4,a4]@130 ~ [a3,f4]@107 ~@68]/8", // Gm7 Bb D7 Gm7 F Dm
  I: "[~@27 [c2,c3,f3,g3,bb3,d4]@47 c3@24 d3@24 c3@23 ~ d3@23 c3@23, ~@37 [f1,f2,f3,a3,c4,f4,a4]@59]/4", // Gm7 F
  J: "[~@13 [bb1,bb2,d4]@59 [d2,d3,c4]@47 ~ [c2,c3,f3,g3,bb3,d4]@47 [f1,f2,f3,a3,c4]@47 ~ [c2,c3,f3,g3,bb3,d4]@47 [f1,f2,f3,a3,c4,f4]@47 ~@27, ~@13 [a3,f4]@107 ~@216]/7", // Bb D7 Gm7 F Gm7 F Dm
})).s("gm_pad_poly").gain(0.26)

// drums · kick
const kick = s("bd").struct(`<
  ~@24 A B C D E F G H I J K L M N O P Q R S@2 T@2 U V W X Y@2 Z@2 AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR
  AS ~
>`.pickRestart({
  A: "x ~@17 x ~@5 x ~@22 x", B: "~@17 x ~@5 x ~@23 x", C: "~@5 x ~@17 x ~@5 x ~@16 x ~", D: "~@8 x ~@14 x",
  E: "~@16 x ~@5 x ~@22 x ~@2", F: "~@5 x ~ x ~@7 x", G: "~@3 x ~@17 x ~@5 x ~@16 x ~@3", H: "~@11 x",
  I: "~@14 x ~@5 x ~@22 x ~@4", J: "~@13 x ~@5 x ~@23 x ~@4", K: "~ x ~@17 x ~@5 x ~@16 x ~@5", L: "~@2 x ~@4 x",
  M: "~@12 x ~@5 x ~@22 x ~@6", N: "~@11 x ~@5 x ~@23 x ~@5 x", O: "~@17 x ~@4 x ~@17 x ~@7", P: "~@5 x",
  Q: "~@13 x ~@2", R: "~@5 x ~ x ~@5 x ~@2", S: "~@7 x ~@2 x ~@8 x ~@4", T: "~@13 x ~@5 x ~@17 x ~@10",
  U: "~@2 x!2 ~@2 x ~", V: "~@12 x ~@5 x ~@14 x ~@13 x", W: "~@11 x ~@11 x ~@11 x ~@12", X: "~@11 x ~@5 x ~@17 x ~@12",
  Y: "~@5 x ~@2 x ~@8 x ~@6", Z: "~@3 x ~ x ~@5 x ~@4", AA: "~ x ~@5 x ~@8 x ~@7", AB: "~@2 x ~@5 x ~@8 x ~@8 x ~@21",
  AC: "~@31 x ~@16", AD: "~@7 x ~@5 x ~@16 x ~@17", AE: "~ x!2 ~@2 x ~@2", AF: "~@6 x ~@5 x ~@16 x ~@18",
  AG: "~@5 x ~@5 x ~@17 x ~@18", AH: "~@5 x ~@5 x ~@16 x ~@19", AI: "~@2 x ~@2 x ~@8 x ~@9",
  AJ: "~@4 x ~@5 x ~@13 x ~@14 x ~@8", AK: "~ x ~@3 x ~@3 x ~@6", AL: "~@3 x ~@5 x ~@16 x ~@21",
  AM: "~ x ~@2 x ~@8 x ~@10", AN: "~@2 x ~@4 x ~@17 x ~@22", AO: "~ x ~@5 x ~@17 x ~@22",
  AP: "~ x ~@4 x ~@17 x ~@17 x ~@5", AQ: "~@6 x ~@17 x ~@17 x ~@4 x", AR: "~@8 x ~@8 x ~@30", AS: "~@23 x ~@24",
})).gain(0.6)

// drums · snare
const snare = s("sd").struct(`<
  ~@23 A B C@2 D E F@2 G H I J K L M N O ~ P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN@2 AO@2 AP B
  AQ ~@2
>`.pickRestart({
  A: "~ x ~@2", B: "~ x ~ x", C: "~@11 x ~@23 x ~@12", D: "~@10 x ~@11 x ~@2 x ~@22", E: "~@5 x ~@11 x ~@6",
  F: "~@3 x ~@7 x ~@4", G: "~ x ~@22", H: "~@8 x ~@22 x ~@16", I: "~@7 x ~@23 x ~@16", J: "~@7 x ~@22 x ~@17",
  K: "~@2 x ~@3 x!2 ~@8", L: "~@6 x ~@22 x ~@18", M: "~@5 x ~@23 x ~@18", N: "~@5 x ~@22 x ~@17 x ~", O: "~@23 x",
  P: "~ x ~@7 x ~@6", Q: "~@3 x ~@22 x ~@21", R: "~ x ~@11 x ~@10", S: "~@2 x ~@22 x ~@22", T: "~ x ~@23 x ~@22",
  U: "~ x ~@22 x ~@23", V: "x ~@23 x ~@10 x!2 ~@11", W: "~@47 x", X: "~@23 x ~@22 x ~", Y: "~@11 x ~@11 x",
  Z: "~@22 x ~@22 x ~@2", AA: "~@7 x ~@7 x", AB: "~@21 x ~@5 x ~@2 x ~@13 x ~@3", AC: "~@5 x ~@5 x",
  AD: "~@20 x ~@10 x ~@2 x ~@13", AE: "~@43 x ~@4", AF: "~@19 x ~@22 x ~@5", AG: "~@3 x ~@3 x", AH: "~@18 x ~@22 x ~@6",
  AI: "~@17 x ~@23 x ~@6", AJ: "~@17 x ~@22 x ~@7", AK: "~@2 x ~@2 x", AL: "~@5 x ~@3 x ~@6", AM: "~@13 x ~@2",
  AN: "~@7 x ~@11 x ~@4", AO: "~@13 x ~@23 x ~@10", AP: "~@4 x ~ x!2 ~@4 x ~@3", AQ: "~@11 x ~@11 x ~@2 x ~@21",
})).gain(0.6)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@24 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT
  AU AV ~@2
>`.pickRestart({
  A: "~@6 x ~@5 x ~@11 x ~@11 x ~@10 x", B: "~@5 x ~@5 x ~@5 x ~@5 x ~@11 x ~@11 x", C: "~@11 x ~@11 x ~@24",
  D: "~ x ~@2 x ~@7", E: "~@10 x ~@11 x ~@11 x ~@10 x ~@2", F: "~@3 x ~@3 x ~@3 x ~@3 x",
  G: "~@9 x ~@11 x ~@11 x ~@4 x ~@9", H: "~@5 x ~@2 x ~@3", I: "~@2 x ~@5 x ~@11 x ~@10 x ~@11 x ~@4",
  J: "~ x ~@5 x ~@5 x ~@5 x ~@11 x ~@11 x ~@4", K: "~@7 x ~@11 x ~@28", L: "x!2 ~@2",
  M: "~@6 x ~@11 x ~@10 x ~@11 x ~@6", N: "~@5 x ~@11 x ~@11 x ~@11 x ~@6", O: "~@5 x ~@11 x ~@4 x ~@5 x ~@5 x ~@13",
  P: "~@4 x ~@2 x ~@4", Q: "~@4 x ~@10 x ~@11 x ~@17 x ~@2", R: "~@5 x ~ x ~ x ~@3 x ~ x",
  S: "~@3 x ~@5 x ~@4 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@3", T: "~ x ~@2 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~",
  U: "~@2 x ~@4 x ~@5 x ~@5 x ~@5 x ~@17 x ~@4", V: "~ x ~@5 x ~@5 x ~@5 x ~@5 x ~@17 x ~@4",
  W: "~ x ~@4 x ~@5 x ~@5 x ~@5 x ~@5 x ~@2 x ~@8 x ~@5", X: "x!6 ~@2", Y: "~@41 x ~@5 x",
  Z: "~@5 x ~@5 x ~@5 x ~@5 x ~@11 x ~@5 x ~@4 x ~", AA: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x",
  AB: "~@4 x ~@5 x ~@5 x ~@17 x ~@4 x ~@5 x ~@2", AC: "~ x ~ x ~ x ~ x ~ x ~@3 x ~ x",
  AD: "~@3 x ~@5 x ~@5 x ~@28 x ~@3", AE: "~@8 x ~@5 x ~@5 x ~@5 x ~@2 x ~@8 x ~@5 x ~@3",
  AF: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@10", AG: "~@37 x ~@10", AH: "~@7 x ~@5 x ~@5 x ~@10 x ~@5 x ~@5 x ~@5", AI: "x!8",
  AJ: "x ~@5 x ~@5 x ~@10 x ~@5 x ~@5 x ~@5 x ~@5 x", AK: "~@5 x ~@5 x ~@5 x ~@17 x ~@5 x ~@5 x",
  AL: "~@5 x ~@5 x ~@5 x ~@16 x ~@5 x ~@5 x ~", AM: "~@4 x ~@5 x ~@5 x ~@5 x ~@2 x ~@8 x ~@5 x ~@5 x ~",
  AN: "~@4 x ~@5 x ~@4 x ~@5 x ~@26", AO: "~@11 x ~ x ~ x", AP: "~@3 x ~@5 x ~@4 x ~@11 x ~@5 x ~@5 x ~@5 x ~@3",
  AQ: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", AR: "~@2 x ~@4 x ~@17 x ~@5 x ~@5 x ~@5 x ~@4",
  AS: "~ x ~@5 x ~@5 x ~@5 x ~@11 x ~@5 x ~@5 x ~@4", AT: "~ x ~@4 x ~@29 x ~@11",
  AU: "x ~@5 x ~@5 x ~@5 x ~@2 x ~@8 x ~@5 x ~@5 x ~@4 x", AV: "~@5 x ~@5 x ~@5 x ~@30",
})).gain(0.42)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@24 A B C ~ D E F ~ G H I ~ J K L ~@2 M ~@7 N ~ O ~@5 P ~@7 Q ~ R ~@6
>`.pickRestart({
  A: "~@3 x ~ x ~ x", B: "~@29 x ~@11 x ~@6", C: "~@5 x ~@11 x ~@11 x ~@18", D: "~@4 x ~@11 x ~@11 x ~@10 x ~@8",
  E: "~ x ~@3 x ~@3 x ~@3 x ~@2", F: "~ x ~@3 x ~@3 x ~@6", G: "~@14 x ~@11 x ~@10 x ~@10", H: "~@25 x ~@11 x ~@10",
  I: "~ x ~@11 x ~@11 x ~@22", J: "x ~@11 x ~@10 x ~@11 x ~@11 x", K: "~@11 x ~@11 x ~@11 x ~@11 x", L: "~@11 x ~@36",
  M: "~@11 x ~@4", N: "~@29 x ~@18", O: "~@7 x ~@4", P: "~@25 x ~@22", Q: "~@5 x ~@6", R: "~@19 x ~@28",
})).gain(0.18)

// drums · low tom
const low_tom = s("lt").struct("<~@23 A ~@3 B ~@3 C ~@3 D ~@3 E F ~@7 G ~@7 H ~@7 I ~@7 J ~>".pickRestart({
  A: "~@14 x!2", B: "~@40 x ~@2 x ~@4", C: "~@32 x ~@5 x ~@2 x ~@6", D: "~@12 x!2 ~@2", E: "~@17 x!2 ~@5",
  F: "~@5 x ~@3 x ~ x!2 ~@3", G: "~@23 x ~@2 x ~@2 x ~@18", H: "~@19 x ~@2 x ~@2 x ~@22", I: "~@5 x!3 ~@8",
  J: "~@11 x ~@2 x ~@2 x ~@30",
})).gain(0.6)

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 A ~@3 B ~@3 C ~@3 D ~@3 E F ~@6 G H ~@6 I J ~@6 K L ~@6 M N ~>".pickRestart({
  A: "~@6 x ~ x ~ x!3 ~@3", B: "~@28 x ~@2 x ~@2 x ~@13", C: "~@10 x ~@2 x ~@10", D: "~@8 x!3 ~@5",
  E: "~@10 x ~@5 x ~@5 x ~@4 x ~@20", F: "~@8 x ~@2 x ~@12", G: "~@41 x ~@6", H: "~@2 x ~@9 x ~@4 x!2 ~@29",
  I: "~@37 x ~@9 x", J: "~@7 x!2 ~@4 x!2 ~@33", K: "~@11 x ~@2 x ~", L: "~ x ~ x ~@12", M: "~@29 x ~@9 x ~@7 x",
  N: "~@5 x ~@42",
})).gain(0.6)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@31 [~@11 x ~@14 x ~@21] ~@7 [~@4 x ~@16 x ~@26] [~@2 x ~@4 x ~@8] ~@33>")
  .gain(0.36)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@27 A ~@2 B ~@4 C ~@2 D ~@2 E ~@2 F@2 ~@6 G H ~@3 I ~@2 J K ~@6 L M ~@4
>`.pickRestart({
  A: "~@5 x ~@18", B: "~@11 x", C: "~ x ~@6", D: "~@5 x", E: "~@3 x ~@12", F: "~@31 x ~@16", G: "~@11 x ~@4",
  H: "~@7 x ~@8", I: "~ x ~@46", J: "~@23 x ~@24", K: "~@11 x ~@12", L: "~@25 x ~@22", M: "~ x ~@2",
})).gain(0.54)

// drums · high tom
const high_tom = s("ht").struct("<~@31 A ~@7 B C ~@6 D E ~@6 F ~@7 G ~@7 H ~@2>".pickRestart({
  A: "~@11 x ~@2 x ~@33", B: "~@2 x ~@2 x ~@18", C: "~@7 x ~@40", D: "~@7 x", E: "~ x ~@14", F: "~@38 x ~@8 x",
  G: "~@17 x ~@3 x ~@2", H: "~@10 x ~@2 x ~@2",
})).gain(0.6)

// drums · crash
const crash = s("cr").struct(`<
  ~@24 A ~ B C ~@3 D ~@2 E F ~@2 C G H I ~ J K@2 L ~ M ~@2 N ~ O P ~ Q ~@2 R S T@2 ~ U ~@2 V ~ W X ~ Y ~
>`.pickRestart({
// … 10 more lines

More by Berte