Strudelify

Parole sante, zia Lucia

Cocciante

KeyF majorTempo109 bpm
0:00/0:00
// Parole sante, zia Lucia — Cocciante
// 109 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: Full arrangement: all 118 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(109/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(`<
  ~@15 A@4 B@2 C@2 B@2 D@2 E@2 F@2 C@2 G@2 H I H@2 J K@2 J L M@2 N O P@2 Q O R S T@7 U V W@2 X@2 Y@2 Z@3 ~@16 AA AB@2 AC
  AD AE@2 AF AG@4 AH@7 AI AJ AK@2 AL AM@4 AN@2
>`.pickRestart({
  A: "[c2@31 ~]/2", B: "[c2@63 ~]/2", C: "d2/2", D: "[f2@31 ~]/2", E: "[d2@63 ~]/2", F: "[f2@63 ~]/2", G: "[g1@31 ~]/2",
  H: "c2@10 ~@2 c2@3 ~", I: "c2@27 ~@5", J: "c2@22 ~@2 c2@7 ~", K: "d2@11 ~ d2@4", L: "c2@11 ~ c2@4", M: "f2@11 ~ f2@4",
  N: "d2@21 ~@3 d2@8", O: "d2@23 ~ d2@8", P: "f2@22 ~@2 f2@7 ~", Q: "d2@22 ~@2 d2@7 ~", R: "g1@21 ~@3 g1@7 ~",
  S: "g1@11 ~ g1@4",
  T: "[c2@11 ~@4 c2@14 ~ c2@11 ~@4 c2@3 ~ c2@4 ~@4 c2@2 ~@2 c2@13 ~@2 c2@14 ~ c2@10 ~ c2@2 ~@2 c2@3 ~ c2@4 ~@4 c2@2 ~ c2@13 ~@2 c2@14 ~@2 c2@11 ~@4 c2@3 ~ c2@4 ~@3 c2@2 ~@2 c2@13 ~@2 c2@14 ~ c2@7 ~@5]/7",
  U: "c2@2 ~ c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ f2@11 ~@2", V: "~@2 f2@14 ~ f2@11 ~@4",
  W: "[f2@3 ~ f2@4 ~@4 f2@2 ~ d2@13 ~@2 d2@14 ~@2 d2@10 ~ d2@2 ~@2 d2@3]/2",
  X: "[~ d2@4 ~@3 d2@2 ~@2 f2@11 ~@4 f2@14 ~ f2@11 ~@4 f2@3 ~ f2@3]/2",
  Y: "[~@5 f2@2 ~@2 d2@13 ~@2 d2@14 ~ d2@10 ~ d2@2 ~@2 d2@3 ~ d2@4 ~@2]/2", Z: "[~ d2@2 ~@2 d2@76 ~@15]/3",
  AA: "~@4 f2@10 ~@4 f2@13 ~", AB: "[f2@10 ~@4 f2@3 ~ f2@4 ~@3 f2@2 ~@2 f2@12 ~@2 f2@13 ~ f2@7]/2",
  AC: "~@4 f2@2 ~ f2@3 ~ f2@4 ~@3 f2@2 ~ f2@11", AD: "~@4 f2@13 ~ f2@10 ~@4",
  AE: "[f2@3 f2@4 ~@3 f2@2 ~@2 f2@12 ~@2 f2@13 ~ f2@7 ~@4 f2@2 ~@2 f2@3 f2@3 ~]/2", AF: "f2@3 f2@3 ~ f2@10 ~@4 f2@11",
  AG: "[~@3 f2@10 ~@4 f2@3 ~ f2@4 ~@3 f2@2 ~ f2@12 ~@3 f2@13 ~ f2@9 ~ f2@2 ~@2 f2@3 ~ f2@4 ~@3 f2@2 ~ f2@12 ~@2 f2@13 ~@2 f2@10 ~]/4",
  AH: "[~@3 f2@3 f2@4 ~@3 f2@2 ~@2 f2@12 ~@2 f2@13 ~ f2@7 ~@4 f2@2 ~ f2@3 ~ f2@3 ~ f2@3 f2@3 ~ f2@10 ~@4 f2@13 ~ f2@10 ~@4 f2@3 ~ f2@4 ~@3 f2@2 ~ f2@12 ~@3 f2@13 ~ f2@9 ~ f2@2 ~@2 f2@3 f2@4 ~@4 f2@2 ~ f2@12 ~@2 f2@13 ~ f2@9]/7",
  AI: "~@6 f2@3 f2@4 ~@3 f2@2 ~@2 f2@12", AJ: "~@2 f2@13 ~ f2@7 ~@4 f2@2 ~ f2@2",
  AK: "[~@2 f2@3 f2@3 ~ f2@3 f2@10 ~@5 f2@13 ~ f2@10 ~@4 f2@3 ~ f2@4 ~]/2", AL: "~@2 f2@2 ~ f2@12 ~@2 f2@13",
  AM: "[~@2 f2@9 ~ f2@2 ~@2 f2@3 f2@4 ~@3 f2@2 ~@2 f2@12 ~@2 f2@13 ~ f2@10 ~@4 f2@3 ~ f2@4 ~@3 f2@2 ~@2 f2@12 ~@2 f2@13 ~ f2@7 ~@4 f2@2]/4",
  AN: "[~ f2@3 ~ f2@3 f2@3 ~ f2@3 f2@21 ~@28]/2",
})).s("gm_fretless_bass").gain(0.46)

// other · lead 3 calliope
const lead_3_calliope = note(`<
  ~@15 A B C D E F G H I J K ~ L M N ~ L M O P B C Q E F G H I J K ~ L M N ~ L M O P R S@2 T@2 U@3 ~ V@2 W@2 X Y ~@19
  Z@4 AA AB@2 AC AD AE@2 AF AG AH ~ AI AJ AK ~@2 AL ~@9
>`.pickRestart({
  A: "~@11 g4@4 ~@2 e5@2 ~@2 d5@2 ~@3 e5@2 d5@3 ~", B: "~ e5@7 ~@19 e5@3 ~@2",
  C: "~ e5@4 ~ d5@3 ~ d5@3 ~ c5@2 ~ c5@3 ~ b4@3 ~ b4@3 ~ a4@3",
  D: "~ a4@3 ~ g4@2 ~@2 g4@3 f4@2 ~@2 f4@4 e4@3 ~ e4@3 ~ d4@4", E: "~@3 d4@9 ~ a4@3 ~@2 a4@9 ~@5", F: "~@7 d4",
  G: "~ d4@6 ~@2 a4@4 ~ a4@16 ~@2", H: "~@27 g4@5", I: "~ g4@10 ~ c5@14 ~@6", J: "~@28 e5@3 ~", K: "d5@5 ~ c5@11 ~@15",
  L: "~@4 d5@3 ~ d5@2 ~ d5@3 ~ e5@6 ~@2 d5@3 ~ c5@5", M: "~@3 d5@10 ~@19", N: "~@11 e5@3 ~@2 d5@14 ~@2",
  O: "~@12 e5@3 ~ e5@4 d5@4 ~@8", P: "~@19 g4@4 ~ e5@3 ~ d5@3 ~",
  Q: "~ a4@4 g4@2 ~@2 g4@3 f4@2 ~@2 f4@4 e4@3 ~ e4@3 ~ d4@4", R: "e5@8 ~@19 g4@5",
  S: "[gb4@7 ~@18 f4@4 ~ d5@5 ~ d5@14 ~@2 d5@3 e5@3 ~@2 d5@4]/2", T: "[~@2 c5@12 ~@11 e5@10 ~@17 g4@4 ~ gb4@7]/2",
  U: "[~@18 f4@4 ~ d5@5 d5@10 ~ d5@7 ~ e5@4 ~ d5@6 ~ c5@9 ~@11 e5@3 ~ d5@5 c5@8]/3",
  V: "[~@19 d5@3 ~ d5@2 ~ d5@3 ~ e5@6 ~ d5@3 ~ c5@7 ~ d5@9 ~@6]/2", W: "[~@23 e5@3 ~ d5@14 ~@23]/2",
  X: "~@12 d5@3 ~ d5@2 ~ d5@3 ~ e5@6 ~ d5@2", Y: "~@2 c5@7 ~ a4@9 ~@13",
  Z: "[~@4 a5@8 ~@17 c5@5 b4@7 ~@16 bb4@4 ~ g5@5 g5@13 ~@2 g5@2 ~ a5@3 ~@2 g5@5 f5@11 ~@11 a5@9 ~@2]/4",
  AA: "~@14 c5@4 ~ b4@9 ~@4", AB: "[~@11 bb4@3 ~ g5@4 ~ g5@9 ~ g5@7 ~ a5@4 g5@5 ~ f5@8 ~@8]/2", AC: "~@7 a5@8 ~@17",
  AD: "c5@5 b4@7 ~@16 bb4@4", AE: "[g5@5 ~ g5@13 ~@2 g5@2 ~ a5@3 ~@2 g5@5 f5@11 ~@11 a5@8]/2", AF: "~@17 c5@4 ~ b4@9 ~",
  AG: "~@13 bb4@3 ~@2 g5@4 ~ g5@9", AH: "~ g5@7 ~ a5@4 g5@5 ~ f5@8 ~@5", AI: "~@3 c5@5 b4@7 ~@17", AJ: "~@27 a5@3 ~@2",
  AK: "g5@5 f5@11 ~@16", AL: "~@12 a4@4 g4@5 ~ f4@8 ~@2",
})).s("gm_lead_3_calliope").gain(0.4)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  ~@44 A B ~@3 C D ~@3 E F G@2 H I J K ~@26 L M N O P Q R S T U@2 V W X Y Z AA AB AC AD AE@2 AF AG AH ~@5
>`.pickRestart({
  A: "~@14 e5 ~", B: "e5@3 ~ d5@3 ~ d5@3 ~ d5 ~@3 c5@12 ~@4", C: "~@8 e5@2 ~@2 e5@7 ~ d5@4 d5@7 ~", D: "c5@5 ~@11",
  E: "~@8 [c4,e4,g4] ~@14 [c4,e4,g4] ~@8", // C
  F: "~@2 [a3,d4,gb4]@3 ~ [a3,d4,gb4] ~@7 [d4,gb4]@7 [a3,d4,gb4] ~@10, ~@13 a3@7 ~@12", // D
  G: "[~@4 [d4,f4] a3 ~@14 [a3,d4] ~@10 [g3,c4,e4]@3 ~ [g3,c4,e4] ~@6 [g3,c4,e4]@7 ~ [g3,c4,e4] ~@13, ~@19 f4@2 ~@43]/2", // Dm D5 C
  H: "~ [c4,e4,g4] ~@14 [c4,e4,g4] ~@11 [a3,d4]@3 [a3,d4], ~@27 gb4@3 ~@2", // C D5
  I: "gb4 ~@6 [a3,d4,gb4]@7 gb4 [a3,d4] ~@14 [a3,d4,f4] ~", J: "~@13 [a3,d4,f4] ~@10 [g3,c4,e4]@3 ~ [g3,c4,e4] ~@3",
  K: "~@4 [c4,e4]@7 [g3,c4,e4] ~@20, ~@3 g3@7 ~@22", L: "~@11 [f4,a4,c5] ~@13 [f4,a4,c5] ~@6",
  M: "~@4 [d4,g4,b4]@3 [d4,g4] b4 ~@6 [g4,b4]@6 ~ [d4,g4,b4] ~@9, ~@7 d4@3 ~@6", // G G5 G
  N: "~@4 [d4,g4,bb4] ~@13 [d4,g4,bb4] ~@10 [c4,f4,a4]@3", // Gm F
  O: "[c4,f4,a4] ~@6 [c4,f4,a4]@6 ~ [f4,a4] c4 ~@12 c5 [f4,a4] ~@2", // F
  P: "~@11 [f4,a4,c5] ~@10 d4@3 [d4,g4,b4] ~@6, ~@21 [g4,b4]@3 ~@8", // F G
  Q: "[d4,g4,b4]@6 ~ [d4,g4,b4] ~@13 [d4,g4,bb4] ~@10", // G Gm
  R: "~@3 [g4,bb4] d4 ~@9 [c4,f4,a4]@3 c4 [f4,a4] ~@6 [c4,f4,a4]@6 ~", // Gm F
  S: "[c4,f4,a4] ~@13 [f4,a4,c5] ~@13 [f4,a4,c5] ~@3", // F
  T: "~@7 [d4,g4,b4]@3 [d4,g4] b4 ~@6 b4@6 [g4,b4] d4 ~@6, ~@17 [d4,g4]@6 ~@9", // G G5 G G5
  U: "[~@7 [d4,g4,bb4] ~@13 [d4,g4,bb4] ~@10 c4@3 [c4,f4,a4] ~@6 [c4,f4,a4]@6 ~ [c4,f4,a4] ~@13 [a4,c5], ~@31 [f4,a4]@3 ~@30]/2", // Gm F Am F
  V: "f4 ~@12 c5 [f4,a4] ~@9 [d4,g4,b4]@3 ~ [d4,g4,b4] ~@3", W: "~@3 [d4,g4,b4]@6 ~ [d4,g4,b4] ~@13 [d4,g4,bb4] ~@7",
  X: "~@6 [g4,bb4] d4 ~@9 [c4,f4,a4]@3 [c4,f4] a4 ~@6 [f4,a4]@4, ~@27 c4@5", // Gm F F5 F
  Y: "~@3 [c4,f4,a4] ~@13 [f4,a4,c5] ~@13 [f4,a4,c5]", // F
  Z: "~@10 [d4,g4,b4]@3 [d4,g4,b4] ~@6 [d4,g4,b4]@6 ~ [g4,b4] d4 ~@3", AA: "~@9 bb4 [d4,g4] ~@13 [d4,g4,bb4] ~@7",
  AB: "~@3 c4@3 [c4,f4,a4] ~@6 [c4,f4,a4]@6 ~ [c4,f4,a4] ~@11, ~@2 [f4,a4]@3 ~@27", // F
  AC: "~@2 [f4,a4,c5] ~@13 [a4,c5] f4 ~@9 [d4,g4,b4]@3 d4 [g4,b4]", // F Am G
  AD: "~@6 [d4,g4,b4]@6 ~ [d4,g4,b4] ~@13 [d4,g4,bb4] ~@4", // G Gm
  AE: "[~@9 [d4,g4,bb4] ~@10 [c4,f4,a4]@3 [c4,f4] a4 ~@6 a4@6 [f4,a4] c4 ~@13 [f4,a4,c5] ~@11, ~@15 [c4,f4]@3 ~@14]/2", // Gm F F5 F F5
  AF: "~@2 [f4,a4,c5] ~@10 d4@3 [d4,g4,b4] ~@6 [d4,g4,b4]@6 ~ [d4,g4,b4] ~, ~@12 [g4,b4]@3 ~@17", // F G
  AG: "~@12 [g4,bb4] d4 ~@12 bb4 [d4,g4] ~@4", AH: "~@5 [c4,f4,a4]@3 ~ [c4,f4,a4] ~@6 [c4,f4,a4]@6 ~ [c4,f4,a4] ~@8",
})).s("gm_electric_guitar_muted").gain(0.35)

// chords · rock organ
const rock_organ = note("<~@33 A@3 ~@82>".pickRestart({
  A: "[[d4,g4,b4]@65 ~@31]/3", // G
})).s("gm_rock_organ").gain(0.29).pan(0.3)

// other · acoustic guitar steel
const acoustic_guitar_steel = note("<~@4 A B C D E F G ~@2 F H ~@73 I J@6 K@7 L@5 M@3 N O P@5 ~>".pickRestart({
  A: "~@6 e4 ~", B: "~@3 c4 ~@4", C: "gb4@5 ~@7 gb4@4 ~@16", D: "gb4 e4 gb4 ~@5", E: "c4 ~@7", F: "~@2 e4 ~@5",
  G: "f4@4 ~@8 f4@5 ~@3 f4@5 ~@7", H: "~@4 e4 ~@2 e4", I: "~@4 c3@7 f3@7 a3@7 c3@7",
  J: "[b2@4 d3@7 b3@7 g3@4 d3@3 b2@4 bb2@7 d3@7 g3@7 bb2@7 a2@4 c3@7 f3@7 a2@3 bb2@4 b2@3 c3@7 f3@7 ~ a3@7 c3@7 ~@3 d3@7 b3@7 d3@4 b2@7 bb2@7 d3@7 g3@7 bb2@7 a2@4 c3@6 ~ f3@7 c3@4, ~@114 b2@5 ~@73]/6",
  K: "[a2@2 ~@5 c3@7 f3@7 a3@7 c3@7 b2@4 d3@7 b3@7 g3@3 d3@3 ~ b2@3 bb2@7 ~ d3@7 g3@7 bb2@7 a2@3 c3@7 f3@7 ~ a2@3 bb2@4 b2@3 c3@7 f3@7 a3@7 c3@7 ~@4 d3@7 g3@7 d3@4 b2@7 bb2@7 d3@7 g3@7 bb2@7 a2@4 c3@6 ~ f3@7 c3, ~@149 b2@5 ~@70]/7",
  L: "[~@3 a2@4 ~@3 c3@7 f3@7 a3@7 c3@7 b2@4 d3@7 b3@7 g3@3 d3@3 ~ b2@3 bb2@7 d3@8 g3@7 bb2@7 a2@3 c3@7 f3@7 a2@4 bb2@4 b2@3 c3@7 f3@7 a3@7 c3@7 b2@4 d3@5]/5",
  M: "[~@2 g3@7 d3@4 b2@7 bb2@7 d3@7 g3@7 bb2@7 a2@4 c3@6 ~ f3@7 c3@3 ~@7 c3@8 f3@7 a3@5, ~@69 a2@10 ~@17]/3",
  N: "~@2 c3@7 ~@3 d3@7 b3@8 g3@3 d3@2, ~@9 b2@5 ~@18", O: "~@2 b2@3 bb2@7 d3@7 g3@7 bb2@6",
  P: "[~@2 a2@3 c3@7 f3@7 a2@4 bb2@3 b2@4 c3@7 f3@7 a3@7 c3@7 b2@4 d3@7 g3@7 d3@4 b2@7 bb2@7 d3@7 g3@7 bb2@7 a2@4 c3@6 ~ f3@7 c3@3 a2@8 ~@16]/5",
})).s("gm_acoustic_guitar_steel").gain(0.44).pan(0.7)

// other · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note("<~@4 A B C D E F G H I J K ~@103>".pickRestart({
  A: "~@7 d4", B: "c4 d4 e4 ~ d4 e4!2 d4", C: "~ e4 c4 ~ d4 e4 gb4 c4", D: "~@3 gb4 c4 gb4 e4 gb4",
  E: "~ e4!2 d4 c4 e4 d4 c4", F: "e4@4 d4@5 ~@3 e4@4 d4@4 e4@4 f4@4 e4@4", G: "~ f4 e4 ~ c4 ~ e4 c4",
  H: "f4 e4 c4@2 d4 e4 f4 e4", I: "f4 e4@2 c4 f4 e4 d4 f4", J: "e4 d4 ~ e4!2 d4 e4@2",
  K: "e4@4 e4@4 e4@4 c4@5 ~@3 d4@4 c4@4 ~@4",
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0.7)

// other · oboe
const oboe = note("<~@19 A@2 B ~ C D ~@93>".pickRestart({
  A: "[gb4@18 ~@2 g4@3 ~ gb4@23 ~ a3@11 ~ a3@3 ~]/2", B: "a3@7 ~", C: "~@19 g4@2 ~@3 g4@2 ~@2 e4@2 ~@2, g3@11 ~@5",
  D: "e4@5 ~@3",
})).s("gm_oboe").gain(0.35).pan(0.2)

// other · synth brass 2
const synth_brass_2 = note("<~@25 A B C ~ A B C ~@86>".pickRestart({
  A: "~@15 a4@16 ~", B: "g4 e4", C: "d4",
})).s("gm_synth_brass_2").gain(0.46).pan(0.7)

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

// drums · rim
const rim = s("rim").struct("<~@97 [~@7 x] ~@14 [~ x ~@14] ~@5>").gain(0.46)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@53 [~@4 x ~@2 x] ~@41 [~@3 x ~ x ~@26] ~@13 [~@9 x ~ x ~@20] ~@8>").gain(0.46)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@54 A B C ~@2 D E F G H I J K L M ~@19 N O P Q ~ R K S T O ~@2 U J L V T W ~ X Y J Z AA ~@2 AB E AC ~
>`.pickRestart({
  A: "~@15 x ~@16", B: "~@13 x ~@18", C: "~@3 x ~@4", D: "~@7 x ~@24", E: "~@5 x ~@26", F: "~@3 x ~@28", G: "~ x ~@14",
  H: "x ~@14 x", I: "~@29 x ~@2", J: "~@27 x ~@4", K: "~@25 x ~@6", L: "~@3 x", M: "~@11 x ~@4", N: "~@9 x ~@6",
  O: "~@7 x ~@8", P: "~@11 x ~@17 x ~@2", Q: "~@4 x ~@6 x ~@6 x ~@13", R: "x ~@6 x", S: "~@21 x ~@10", T: "~@17 x ~@14",
  U: "~@3 x ~@27 x", V: "~@5 x ~@2", W: "~@2 x ~@6 x ~@6 x ~@7 x ~@7", X: "~@3 x ~@12", Y: "~ x ~@13 x",
  Z: "~@23 x ~@8", AA: "~@19 x ~@12", AB: "~ x ~@2", AC: "~ x ~@30",
})).gain(0.23)
// … 18 more lines

More by Cocciante