Strudelify

Venus As A Boy

Bjork

KeyF minorTempo109 bpm
0:00/0:00
// Venus As A Boy — Bjork
// 109 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 2 "piano2" epiano2 (copy of ch 15 "piano1" epiano1)
// note: Full arrangement: all 103 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 · "bass"
const bass = note(`<
  ~@4 A@5 B C D E F G@2 H@2 I@2 J B K@2 D L M D N B O P Q R S@2 T U V D W X Y Z@2 AA@2 AB AC AD AE AB AF AG AH AI@2 AJ
  AK AL@2 AM AN AO@3 AP AQ AR@2 AS AT@2 B AU AV@2 AW@2 AX@2 U AY AZ BA X BB D BC U BD BE BF AU BG BE BH BI BJ BK BL BM@2
>`.pickRestart({
  A: "[~@31 gb1@65 ab1@56 ~@8]/5", B: "f1@31 ~", C: "f1@3 ~@2 f1@26 ~", D: "bb1@31 ~", E: "bb1@23 ~ c2@8",
  F: "f1@13 ~ f1@2", G: "[ab1@11 ~ c2@18 ~ bb1@31 ~@2]/2", H: "[bb1@31 ab1@32 ~]/2", I: "[~ c2@13 eb2@17 db2@31 ~@2]/2",
  J: "db2@11 ~ eb2@12 db2@7 ~", K: "[f1@12 c2@19 bb1@31 ~@2]/2", L: "ab1@31 ~", M: "ab1", N: "bb1@12 db2@12 c2@7 ~",
  O: "f1@11 ~ ab1@20", P: "bb1@15 ~", Q: "bb1@12 ~ c2@11 db2@8", R: "gb1@28 ~ gb1 ~@2",
  S: "[~ gb1@2 ~@2 gb1@11 bb1@15 gb1@29 ~@2 gb1 ~]/2", T: "gb1@3 ~@2 gb1@10 ~ bb1@15 ~", U: "f1@28 ~ f1 ~@2",
  V: "f1@9 ~@2 f1@20 ~", W: "bb1@10 ~ c2@5", X: "f1@27 ~@2 f1 ~@2", Y: "f1@23 ~ f1@8",
  Z: "[bb1@27 ~ bb1 ~@2 bb1@13 ~ bb1@17 ~@2]/2", AA: "[f1@27 ~ f1 ~@2 f1@2 ~@3 f1@26 ~@2]/2", AB: "bb1@28 ~ bb1@2 ~",
  AC: "bb1@22 ~@2 bb1@7 ~", AD: "f1@7 ~", AE: "f1@10 ~ f1@20 ~", AF: "bb1@22 ~ bb1@9", AG: "f2@28 ~ f2 ~@2",
  AH: "f2@5 c2@9 ~@2 ab1@15 ~", AI: "[bb1@28 bb1@2 ~ bb1@4 ~ ab1@10 ~ bb1@8 ~ c2@7 ~]/2", AJ: "f1@27 ~@5",
  AK: "f1@4 ~ ab1@18 ~ c2@7 ~", AL: "[bb1@37 ~@2 bb1@5 eb2@18 ~@2]/2", AM: "ab1@28 ~ ab1 ~@2",
  AN: "ab1@4 c2@19 ~ eb2@8", AO: "[db2@24 db2@5 ~@2 db2@4 ~ c2@11 db2@7 ~ c2@8 f2@31 ~@2]/3",
  AP: "f2@4 ~ eb2@10 ~ c2@15 ~", AQ: "db2@11 ~ bb1@18 ~@2", AR: "[bb1@11 ~ ab1@11 bb1@7 ~ ab1@31 ~@2]/2", AS: "g1@15 ~",
  AT: "eb1@31 ~", AU: "f1", AV: "[bb1@35 ~@2 bb1@3 ab1@5 bb1@10 ~ ab1@7 ~]/2", AW: "[gb1@63 ~]/2", AX: "[gb1@7 ~]/2",
  AY: "f1@5 c2@2 ~ eb2@4 ~ f2@11 ab2@8", AZ: "bb1@7 ~", BA: "bb1@4 ~ bb2@6 ab2@12 ~ f2@8",
  BB: "f1@5 f2@3 eb2@4 f2@11 bb2@8 ~", BC: "bb1@5 bb2@2 ~ ab2@4 f2@11 ~ ab2@7 ~",
  BD: "f1@5 f2@2 ~ ab2@2 ~@2 ab2@8 ~ c3@11", BE: "bb2@12 bb1@15 ~@2 bb1 ~@2", BF: "bb1@5 f2@2 ~ ab2@4 bb2@19 ~",
  BG: "f2@5 eb2@4 ~@2 eb2@4 f2@4 ~@3 f2@10", BH: "bb1@3 ~@2 bb1@2 ~ f2@4 eb2@19 ~", BI: "c2@31 ~", BJ: "c2@28 ~ bb1@3",
  BK: "c2@15 ~", BL: "c2@11 ~@2 c2@17 ~@2", BM: "[c2@31 ~]/2",
})).s("gm_fretless_bass").gain(0.32)

// chords · epiano1 · "piano1"
const epiano1 = note(`<
  ~@9 A@2 B@4 C@2 D ~ E F G@4 H I J@2 K@3 L M N@3 O@2 P@2 Q@2 R@2 S@6 T U V@2 W X@2 Y Z@2 AA@2 AB@2 AC@2 AD@2 AE AF AG
  AH AI AJ@2 AK AL@2 AM@2 AN@2 AO@2 AP AQ AR@2 AS AT AU AV AW@2 AX AY@2 AZ BA BB BC@2
>`.pickRestart({
  A: "[[c4,eb4,f4,ab4,c5]@53 ~@11]/2", // Fm7
  B: "[[f4,bb4]@14 ~@2 [f4,ab4]@2 ~@3 [f4,bb4]@2 ~@6 db4@30 ~@5 [c4,eb4]@30 ~@27 [f4,bb4] ~@6, db4@25 ~@3 [f4,bb4]@31 ~@4 ab4@34 ~@31, ~@32 f4@17 ~@15]/4", // Bb5 Fm Bb5 Cm Bb5
  C: "[f4@7 ~ f4@5 ~@3 bb3 ~@4 [bb3,eb4]@2 ~@6 [bb3,eb4,f4]@30 ~@5, bb3@7 ~@25]/2", D: "[ab3,c4,eb4,g4]",
  E: "[ab3,c4,f4]@29 ~@3", F: "~ ab3@4 ~ [ab3,db4,f4]@4 ~@2 [ab3,c4,eb4]@17 ~@3, [c4,eb4] ~@7",
  G: "[[c4,eb4,f4]@16 ~@4 [c4,eb4,g4] ~@7 [c4,eb4,g4]@20 ~@16 bb3@13 db4@2 ~ [bb3,db4,eb4]@3 ~@2 [bb3,db4,f4]@3 ~@4 [bb3,db4,f4]@28 ~@8, [f3,ab3]@13 ~@3 [f3,ab3]@7 ~@4 f3@14 ~@22 db4@9 ~@56, ~@28 ab3@14 ~@21 f4@12 ~@53]/4", // F7 Cm Eb7 Bbm Fm
  H: "[ab3,c4,f4]@12 ~ ab3@3 [c4,f4]@3 ~@2 [c4,ab4]@3 ~@8, ~@21 f4 ~@10", // Fm F5 Fm
  I: "~ g4@10 ~@2 [c4,f4]@15 ~@4, [c4,f4]@11 ~@21", // F5
  J: "[[bb3,eb4,g4]@12 [bb3,c4,f4]@17 ~@3 [bb3,eb4]@11 ~ [bb3,c4,f4]@18 ~@2, ~@31 g4@11 ~@22]/2", // Eb Bbsus2 Eb5 Bbsus2
  K: "[~@6 db4@3 ~@3 [c4,eb4]@3 ~ [c4,eb4]@31 ~@5 [c4,eb4]@4 ~@7 [ab3,bb3,f4]@29 ~@2 db4 ~, ab3@9 ~@7 [f3,ab3]@29 ~@2 [f3,ab3]@9 ~@7 db4@25 ~@8]/3", // Cm Bb7 Fm
  L: "[ab3,bb3,db4,g4]@11 ~ [ab3,bb3,db4,f4]@14 ~@6", M: "[gb3,bb3]@15 ~, [db4,gb4]@11 ~@5",
  N: "[~@25 bb4@5 ~@3 [gb3,bb3,bb4]@47 ~@5 db5@3 bb4@4 ~@4, ~@11 db5@4 gb4@24 ~@9]/3", // Gb
  O: "[[f4,ab4]@45 ~@19, [c4,eb4]@33 ~@31]/2", // Fm Cm
  P: "[~@15 bb3 ab3 ~@4 ab3@2 ~@5 [ab3,db4,f4]@31 ~@5, ~@15 [db4,f4]@2 ~@3 [bb3,db4,f4]@2 ~@6 bb3@27 ~@9]/2", // Db Bbm
  Q: "[[c4,eb4,f4]@14 ~@2 [c4,eb4,f4] ~@5 [eb4,f4]@23 ~@19, [f3,ab3]@9 ~@5 ab3@5 ~@3 c4 ~@41]/2", // F7 Ebsus2 Fm
  R: "[~@12 db4@3 ~ f4@2 ~@3 [f4,ab4,bb4]@2 ~@5 [f4,ab4,bb4]@17 db4@3 [f4,ab4,bb4]@2 ~@3 [f4,ab4,bb4]@4 ~@7, ~@15 [ab4,bb4]@2 ~@47]/2", // Bb7 Absus2
  S: "[[f4,ab4]@16 ~@5 [f4,ab4] ~@7 [f4,ab4]@40 ~@11 [f4,bb4]@3 ~@2 [f4,bb4]@3 ~@7 [f4,bb4]@4 ~@4 [f4,ab4]@2 ~@3 [f4,bb4]@16 ~@3 [c4,f4,ab4]@14 ~@2 [f4,ab4]@2 ~@4 [f4,ab4]@38 ~@5, [c4,eb4]@13 ~@3 [c4,eb4]@9 ~@53 [bb3,db4]@4 ~@10 [bb3,db4]@5 ~@44 c4@11 ~@40]/6", // Fm Bb5 Fm Bb5 Fm Cm Bbm
  T: "~ ab3@12 ~@3 [ab3,bb3]@5 [f4,ab4,bb4]@3 ~@8, [f4,bb4] ~, bb3@3 ~@5", // Absus2 Bb7 Bb5
  U: "~@8 [ab3,bb3]@5 [f4,c5]@10 ~ [f4,bb4]@3 ~@5", // Absus2 F5 Bb5
  V: "[[f4,ab4]@17 ~@6 c5@2 ~@4 f3@32 ~@3, [f3,ab3]@25 ~@3 [ab3,c4,f4,ab4]@33 ~@3, ~@17 c4@8 ~@39, ~@19 f4@7 ~@38, ~@21 ab4@5 ~@38]/2", // Fm
  W: "~ [f3,ab3,bb3,db4]@29 ~@2", // Bbm7
  X: "[~@5 [db4,eb4]@2 ~@5 [db4,f4]@14 ~@6 [c4,eb4,g4]@10 ~@2 [c4,f4]@17 ~@3, [ab3,bb3]@25 ~@6 ab3@30 ~@3, ~@32 f3@29 ~@3]/2", // Dbsus2 Db Cm F5 Absus2
  Y: "[f3,ab3,c4,eb4]@5 ~ [ab3,c4,f4]@8 ~@2, ~@3 f3@3 ~@2", // Fm7 Fm
  Z: "[[ab3,bb3]@39 ~@6 db4@2 ~@5 [db4,eb4]@5 ~@7, db4@40 [ab3,bb3]@17 ~@7]/2", // Absus2 Dbsus2 Absus2
  AA: "[[ab3,c4,eb4,g4]@21 ~@3 [c4,f4]@3 ~@2 [ab3,c4,eb4]@23 ~@4 [c4,eb4]@2 ~@6, ~@21 ab3@6 ~@26 ab3@5 ~@6]/2", // Abmaj7 F5 Ab Cm
  AB: "[[f3,ab3,c4,f4]@11 ~@41 eb4@7 ~@5, ~@6 c4@15 ~ ab3@7 ~@3, ~@12 [f3,ab3]@24 ~@3 f3@18 ~@7, ~@13 eb4@29 ~@5 c4@11 ~@6]/2", // Fm
  AC: "[[ab3,c4,eb4,g4]@11 ~@2 ab3@33 ~@10 eb4@2 ~@6, ~@12 [c4,f4]@34 ~@2 ab3@9 ~@7, ~@53 c4@6 ~@5]/2", // Abmaj7 F5
  AD: "[[c4,f4,bb4]@4 ~@4 [eb4,f4,ab4]@3 ~@5 [eb4,f4,bb4]@4 ~ [eb4,f4] ~@7 f4@19 ~@8 ab4@3 ~@5, ~@21 ab4@2 ~@6 bb4@23 ~ f4@6 ~@5, ~@48 eb4@11 ~@5]/2", // Fsus4 Fm7 Ebsus2
  AE: "~@13 f4@14 ~@5, g4@13 ~@19, ~ c4@28 ~@3, ~@8 eb4@21 ~@3",
  AF: "[c4,eb4,g4]@12 ~ [c4,eb4,g4]@15 ~@4, ~@12 c5@15 ~@5", AG: "[eb4,g4,bb4]@28 ~ g4@2 ~",
  AH: "~ g4@3 ~ [eb4,g4,bb4,d5]@2 ~@5 [eb4,g4,bb4,eb5]@9 ~@3 [eb4,g4,bb4] ~@7, [eb4,bb4]@4 ~@19 d5@2 ~@7", // Ebmaj7 Eb Eb5
  AI: "c4@9 ~@4 [f4,bb4]@3 ~@5 [f4,ab4]@11, [f4,ab4,c5]@3 ~@5, ~@9 [c4,eb4]@20 ~@3", // Bb5 Fm Cm
  AJ: "[~@8 f4@2 ~@3 [f4,ab4,c5]@13 ~@6 eb4@3 ~@5 [eb4,f4,ab4]@2 ~@3 [eb4,f4,bb4]@16 ~@3, c4@3 ~@5, ~@5 eb4@19 ~@7 [f4,bb4]@3 ~@30]/2", // Fm Fm7 Ebsus2 Bb5
  AK: "[db4,eb4,ab4,bb4]@4 ~ [db4,eb4,ab4,bb4]@2 ~@5 [db4,eb4,ab4,bb4]@15 ~@5", // Dbsus2
  AL: "[[db4,bb4]@45 ~@4 ab4@5 bb4@2 ~@8, f4@42 ~@3 f4@11 ~@8]/2", // Gb
  AM: "[[f4,bb4]@44 ~@4 bb4@5 ab4 ~@10, [gb3,db4]@25 ~@7, ~@45 f4@10 ~@9]/2", AN: "[[f3,ab3,c4]@49 ~@15]/2",
  AO: "[[db4,f4]@41 ~@23, [f3,bb3]@35 ~@29]/2", AP: "[f3,ab3]@27 ~@5, [c4,eb4]@21 ~@11", AQ: "~@23 [eb4,ab4]@2 ~@7",
  AR: "[[ab3,bb3,db4,f4]@23 ~@5 [ab3,bb3,db4,f4] ~@3]/2", AS: "[f3,ab3]@28 ~ ab4@2 ~, [c4,eb4]@9 ~@5 f4 ~",
  AT: "[f4,ab4]@3 ~@2 [f4,ab4,c5]@2 ~@25", AU: "[db4,f4]@31 ~, [ab3,bb3]@7 ~",
  AV: "[ab3,bb3]@5 [db4,f4]@2 ~@5 [db4,f4]@18 ~@2", // Absus2 Db
  AW: "[[c4,eb4]@10 ~@14 c5@4 ~ [f4,ab4]@21 ~@14, [f3,ab3]@26 ~@3 f3 ~@34, ~@4 f4@3 ~@9, ~@21 ab4@7 ~@36]/2", // Cm Fm
  AX: "~ [f3,ab3]@28 ~@3, [db4,f4]@31 ~, bb3@27 ~@5", // Fm Db
  AY: "[~@8 db4@4 [db4,f4]@8 ~@11 [f4,ab4,c5]@20 ~@13, f3@5 ~@11, ~@5 ab3@16 ~@10 [c4,eb4]@26 ~@7]/2", // Db Fm Cm
  AZ: "[eb5,g5]@6 f5@2 ~@4 [f4,ab4]@12 [c5,f5] ~@7, c5@9 ~@3 [c5,eb5]@10 ~@10", BA: "[f4,ab4,c5]@23 ~@9",
  BB: "~ [c5,eb5]@4 f5 ~@7 [c5,eb5]@9 ~@2 c5@2 ~@6, g5@5 ~@19 f5 ~@7", BC: "[~ [f4,ab4]@40 ~@23, [c5,eb5]@41 ~@23]/2",
})).s("gm_epiano1").gain(0.16).pan(0.2)

// chords · pad warm · "warmpad"
const pad_warm = note("<A@8 ~ B@3 C@7 D@7 E@7 F@3 G@8 H@3 I@8 ~@21 J@4 K@3 L@7 M@5 N@8>".pickRestart({
  A: "[~@31 bb4@64 ~@63 bb4@63 ~@2 ab4@33, ~@31 [db4,f4]@225, ~@95 ab4@66 ~@95]/8", B: "[~@31 bb4@17, ~ g4@94 ~]/3",
  C: "[~@30 c5@65 bb4@64 g4@65, ~@2 ab4@90 ~@3 eb4@129]/7",
  D: "[~@11 c5@51 ~ [c4,eb4,ab4]@63 ~ db4@63 ~ c6@31 ab5@2, f4@95 ~@17, ab4@62 ~@65 bb4@48 ~@49]/7", // Ab
  E: "[~@63 c6@28 ~@4 db6@15 c6@46 ~@2 [db5,bb5]@59 ~@7, ~@31 [f5,bb5]@61 ~@3 f5@63 f5@56 ~@10, ~@31 eb5@38 ~@26 ab5@60 ~@69]/7", // Gb Bb5
  F: "gb6/3",
  G: "[~@30 [f4,ab4,c5,eb5]@63 ~ [f4,db5]@64 ~ c5@64 ~ eb5@32, ~@94 bb4@61 ~@4 eb5@55 ~@9 [f5,bb5]@33, ~@94 ab4@18 ~@47 ab4@60 ~@37]/8", // Fm7 Db Bb5
  H: "[~@29 [c5,eb5]@54 ~@13, ~@29 ab5@60 ~@7]/3", // Cm
  I: "[[f4,bb4]@60 ~@3 [c4,eb4]@57 ~@7 [bb3,db4]@57 ~@7 c4@61 ~@4, db5@63 ab4@63 ~ f4@126 ~@3]/8", // Bb5 Cm Bbm
  J: "[~@32 [gb4,bb4,db5]@63 ~ db5@32, ~@31 f5@63 ~ [f5,bb5]@33]/4", K: "[gb5@24 ~@7 [f5,ab5,c6]@64 bb5]/3",
  L: "[eb5@16 db5@41 ~@6 ab5@59 ~@37 bb5@31 ~ [f5,ab5,c6]@33, f5@126 ~ [f5,ab5,db6]@64 ~@33, c5@13 ~@50 c6@55 ~@106]/7", // Fm Db
  M: "[~@31 [db5,f5,bb5]@62 ~@2 [c5,f5]@65, ~@94 [ab5,c6]@65 ~, ~@95 b4 ~@64]/5", // Bbm F5 Ab
  N: "[bb5@63 ~@110 c6@69 ~@14, db5@57 ~@199, f5@51 ~@12 [f5,f6]@180 ~@13]/8", // F
})).s("gm_pad_warm").gain(0.32).pan(0.4)

// chords · pad warm · "warmpad" · soft notes
const pad_warm_soft = note("<~@9 A@7 B@3 ~@5 C@3 ~@2 D ~@22 E@3 ~@48>".pickRestart({
  A: "[f4, c5@61 ~@163]/7", B: "[~@31 c4@64 ~]/3", C: "[~@31 f5@62 ~@3]/3", D: "~@15 d6@2 ~@15",
  E: "[~@31 f3@60 ~@5]/3",
})).s("gm_pad_warm").gain(0.24).pan(0.4)

// other · piccolo · "flute2"
const piccolo = note("<~@37 A B C D@2 E F G@2 ~@3 H I@2 J@2 ~@27 A B C K@2 L M N O P@2 Q R S T U V ~@5>".pickRestart({
  A: "~@16 eb5@11 ~ c5@3 ~", B: "eb5@10 ~@3 eb5@11 f5@8", C: "c5@5 bb4@20 ~@4 bb4@3",
  D: "[c5@5 eb5@7 ~ c5@10 bb4@7 ~ c5@13 ~@4 eb5@11 ~ c5@3 ~]/2", E: "eb5@5 ~@2 eb5@2 ~ eb5@2 f5@4",
  F: "c5@4 bb4@10 ~@14 db5@3 ~", G: "[eb5@11 ~@4 eb5@3 ~@2 f5@5 ~ gb5@4 ~ f5@10 ~@23]/2", H: "~@15 eb5@11 ~ c5@3 ~@2",
  I: "[eb5@10 ~@2 eb5@11 f5@8 c5@5 ~ bb4@14 ~@9 c5@3 ~]/2", J: "[db5@12 ~@4 eb5@3 ~@2 f5@9 eb5@20 ~@14]/2",
  K: "[c5@5 eb5@7 c5@11 bb4@7 ~ c5@13 ~@4 eb5@11 ~@2 c5@3]/2", L: "~ eb5@4 f5@7 ~ eb5@14 ~ c5@3 ~",
  M: "c5@4 db5@19 ~@5 c5@3 ~", N: "eb5@4 ~ f5@7 bb5@7 ~ ab5@3 ~ ab5@7 ~", O: "f5@15 ~ c5@11 ~@2 bb4@2 ~",
  P: "[c5@11 ~ eb5@6 ~ eb5@4 f5@8 c5@4 ~@2 bb4@15 ~@9 bb4@2 ~]/2", Q: "c5@4 eb5@3 f5@3 ~@2 eb5@11 c5@8 ~",
  R: "c5@15 ~ eb5@12 ~ f5@2 ~", S: "eb5@4 ~ c5@6 ~ bb4@15 ~ c5@4", T: "eb5@4 ~ db5@15 ~@8 c5@2 ~@2",
  U: "db5@4 ~ eb5@4 ~@3 c5@9 ~@2 f5@8 ~", V: "f5@9 ~@7",
})).s("gm_piccolo").gain(0.2).pan(0.3)

// other · vibraphone · "Vibe"
const vibraphone = note("<~@69 A B@3 C D E@2 F G@2 H@2 ~@21>".pickRestart({
  A: "~@12 g5@3 ~ ab5@5 c6@6 bb5@3 ab5@2", B: "[~ g5@5 ab5@5 f5@4 ~ eb5@8 g5@6 f5@6 ~@2 eb5@6 c5@9 bb4@27 ~@16]/3",
  C: "~@13 f5@3 g5@5 ab5@7 bb5@2 ~@2", D: "bb5@5 c6@6 f5@4 ab5@11 g5@4 f5@2", E: "[~ g5@6 eb5@4 ~@2 g5@7 f5@19 ~@25]/2",
  F: "~@27 f4@2 gb4@3", G: "[~ bb4@4 ab4@7 f4@16 gb4@20 ~@10 f4@3 gb4@3]/2",
  H: "[bb4@4 ab4@8 eb4@10 ~ eb4@5 ~ f4@14 ~@21]/2",
})).s("gm_vibraphone").gain(0.32).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@14 A ~ A@2 ~@3 A@2 ~ B A C D C E F C@2 A ~@3 A@9 ~@3 A@4 ~@5 A ~ A@2 ~@3 A@2 ~ B A C D C E F C@2 A ~@3 A@9 ~@3 A@5
  ~@5
>`.pickRestart({
  A: "x", B: "~@29 x ~@2", C: "x ~@4 x ~@26", D: "x ~@4 x ~@18 x ~@7", E: "x ~@20 x ~@7 x ~@2", F: "x!2",
})).gain(0.22)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@21 A ~@8 B ~@34 A ~@8 B ~@28>".pickRestart({
  A: "~@29 x ~@2", B: "~@13 x ~@18",
})).gain(0.11)

// drums · rim
const rim = s("rim").struct("<~@12 A ~ A ~@39 A@3 ~ A@2 ~@2 A@2 ~@3 B ~@35>".pickRestart({
  A: "~@3 x", B: "~@2 x!2",
})).gain(0.16)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@12 A ~@43 A ~@6 B ~@3 A ~@35>".pickRestart({
  A: "~@21 x ~@10", B: "~@19 x ~@12",
})).gain(0.05)

// drums · snare
const snare = s("sd").struct(`<
  ~@13 A ~ B C A ~@2 D ~ A E ~@2 A B F@2 G ~ H ~@13 A ~ D ~@3 C ~@4 A ~ B C A ~@2 D ~ E B ~@2 A B F@2 G ~ H ~@13 A ~ D
  ~@3 C ~@6
>`.pickRestart({
  A: "~@3 x", B: "~@29 x ~@2", C: "~@21 x ~@2 x ~@4 x ~@2", D: "~@24 x ~@4 x ~@2", E: "~@21 x ~@7 x ~@2", F: "~ x ~ x",
  G: "~@8 x ~@12 x ~@2 x ~@7", H: "~@8 x ~@12 x ~@7 x ~@2",
})).gain(0.27)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@10 A B ~ C B ~@7 B D ~@2 E ~ F G@2 ~ H ~@21 A B ~ C B ~@8 D ~@2 E ~ C G@2 ~ H ~@26
>`.pickRestart({
  A: "~@27 x ~ x ~@2", B: "~@21 x ~@10", C: "~@29 x ~@2", D: "~@27 x ~@4", E: "~@21 x ~@7 x ~@2",
  F: "~@5 x ~@15 x ~@7 x ~@2", G: "~@5 x ~@26", H: "~@5 x ~@13 x ~@7 x ~@4",
})).gain(0.11)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@9 A ~@3 B ~ C ~ A ~@13 D ~@21 A ~@3 B ~ C ~ A ~@41>".pickRestart({
  A: "~@21 x ~@10", B: "~@13 x ~@18", C: "~@13 x ~@5 x ~ x ~@10", D: "~ x",
})).gain(0.11)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@11 A ~@3 B C D E ~ F ~@2 E G ~@2 E H I ~ J ~@14 K L J ~ J ~ J ~@2 A ~@3 B C D E ~ F ~@2 E G ~@2 E H ~@17 K L J ~ J ~
  J K M ~@4
>`.pickRestart({
  A: "~@29 x ~@2", B: "x ~@2 x", C: "~@13 x ~@2 x ~@15", D: "~@27 x ~@4", E: "x ~@28 x ~@2", F: "~@5 x ~@26", G: "x",
  H: "~ x ~@2", I: "~@16 x ~@4 x ~@10", J: "~@13 x ~@18", K: "~@13 x ~@7 x ~@10", L: "~ x", M: "x ~@12 x ~@7 x ~@10",
})).gain(0.27)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct(`<
  ~@12 A ~@7 A ~ A ~@3 A ~@19 B C B ~@7 A ~@7 A ~ A ~@3 A ~@19 B C B ~@10
>`.pickRestart({
  A: "~@29 x ~@2", B: "~@19 x ~@12", C: "~@13 x ~@18",
})).gain(0.16)

// drums · mid tom
// … 83 more lines

More by Bjork