Strudelify

My One Temptation

Mica Paris

KeyF majorTempo112 bpm
0:00/0:00
// My One Temptation — Mica Paris
// 112 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 111 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(112/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 · piano
const piano = note(`<
  ~@4 A B C@6 D E F G D E H I F J K L K M@3 K L K N@5 D E F G D E H I F J K L K M@3 K L K O@5 K P K Q@3 R S R T U@2 V@4
  W@2 X@2 Y@2 K P K Z@3 K P K Z@3 K P K Z@3 K P K Z@3 AA AB AC@3
>`.pickRestart({
  A: "[c4,d4,f4,a4]@15 ~", B: "c4@6 bb3@4 c4@2 bb3@3 ~, [d4,f4]@15 ~",
  C: "[[c4,d4,f4,a4]@11 ~ [c4,d4,f4,a4] ~ [bb3,c4,d4,f4]@9 ~ [bb3,c4,d4,f4] ~ [a3,c4,f4]@2 ~@2 [g3,c4,f4]@11 ~ [a3,c4,f4] ~@3 [g3,c4,f4]@11 ~ [a3,c4,f4] ~@3 [g3,c4,f4]@11 ~ [a3,c4,f4] ~@3 [g3,c4,f4]@12 ~@6]/6", // Dm7 Bb F Csus4 F Csus4 F Csus4 …
  D: "[c4,d4,f4] ~ [c4,d4,f4] ~ [c4,d4,f4] ~ [c4,d4,f4] ~ [c4,d4,f4] ~ [c4,d4,f4] ~ [c4,d4,f4] ~ [c4,d4,f4] ~", // Dm7
  E: "[bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~", // Bb
  F: "[g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~", // Gm
  G: "[bb3,db4,f4] ~ [bb3,db4,f4] ~ [bb3,db4,f4] ~ [bb3,c4,eb4] ~ [bb3,c4,eb4] ~ [bb3,c4,eb4] ~ [bb3,c4,eb4] ~ [bb3,c4,eb4] ~", // Bbm Cm7
  H: "[g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [bb3,db4,f4] ~", // Gm Bbm
  I: "[bb3,db4,f4] ~ [bb3,db4,f4] ~ [bb3,db4,f4] ~ [bb3,db4,f4] ~ [bb3,db4,f4] ~ [bb3,db4,f4] ~ [bb3,db4,f4] ~ [bb3,db4,f4] ~", // Bbm
  J: "[g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~", // Gm Gb
  K: "[c4,d4,f4,a4]", L: "c4@3 bb3@2 c4 bb3@2, [d4,f4]",
  M: "[[bb3,c4,d4,f4]@8 [bb3,c4,d4,f4]@2 [a3,c4,f4]@2 ~@2 [g3,c4,f4]@12 [a3,c4,f4] ~@3 [g3,c4,f4]@12 [g3,c4,f4]@2 ~@2 [g3,c4,f4]@2]/3", // Bb F Csus4 F Csus4
  N: "[[bb3,c4,d4,f4]@10 [a3,c4,f4]@2 ~@2 [g3,c4,f4]@12 [a3,c4,f4] ~@3 [g3,c4,f4]@12 [a3,c4,f4] ~@3 [g3,c4,f4]@12 [a3,c4,f4] ~@3 [g3,c4,f4]@18]/5", // Bb F Csus4 F Csus4 F Csus4 F …
  O: "[[bb3,c4,d4,f4]@10 [a3,c4,f4]@2 ~@2 [g3,c4,f4]@12 [a3,c4,f4] ~@3 [g3,c4,f4]@12 [a3,c4,f4] ~@3 [bb3,eb4,ab4]@12 [c4,eb4,ab4] ~@3 bb3@10 bb3@2 c4@2 db4@4, ~@31 [eb4,ab4]@9]/5", // Bb F Csus4 F Csus4 F Ebsus4 Ab …
  P: "c4@6 bb3@4 c4@2 bb3@3 ~, [d4,f4]", // Dm
  Q: "[[bb3,c4,d4,f4]@10 [a3,c4,f4] ~@3 [g3,c4,f4]@12 [a3,c4,f4] ~@3 [g3,c4,f4]@18]/3", R: "[a3,c4,f4]",
  S: "[g3,c4,f4]", T: "[c4,f4]", U: "[a3,c4,f4]@3 [g3,c4,f4]@5",
  V: "[[bb3,d4,g4]@10 [a3,c4,f4] ~@3 [g3,c4,f4]@12 [a3,c4,f4] ~@3 [g3,c4,f4]@33 ~]/4", W: "[[a3,c4,f4]@31 ~]/2",
  X: "[[g3,c4,f4]@29 ~ [g3,c4,f4] ~]/2", Y: "[[g3,c4,f4]@13 ~ [bb3,eb4,ab4]@18]/2",
  Z: "[[bb3,c4,d4,f4]@10 [a3,c4,f4] ~@3 [g3,c4,f4]@12 [a3,c4,f4] ~@3 [g3,c4,f4]@12 [g3,c4,f4] ~@3 [g3,c4,f4]@2]/3", // Bb F Csus4 F Csus4
  AA: "[g3,c4,f4]@4 ~@2 [g3,c4,f4] ~ [a3,c4,f4]@4 ~@2 [a3,c4,f4] ~", // Csus4 F
  AB: "[g3,bb3,eb4]@4 ~@2 [g3,bb3,eb4] ~ [f3,bb3,eb4]@2 ~ [f3,bb3,eb4]@5", AC: "[~ [g3,b3,d4]@32 ~@15]/3",
})).s("gm_piano").gain(0.3).pan(0.7)

// bass · synth bass 2
const bass = note(`<
  ~@3 A B C D E F G H I D J K L M N@2 O P Q D R S E T U D C V W X@2 Y Z D J K L M N@2 O P Q D R S E T U D C V W H AA@2
  AB D AC@2 E AD AE AF@2 AG@2 AH AI AJ@2 AK@2 AL@2 AM@2 AN@2 V AO AP AQ AR AS V AO AP AQ AR AS V AO AP AQ AR AS V AO AP
  AQ AR AS AT AU AV@3
>`.pickRestart({
  A: "~@10 a1@2 d2@3 ~", B: "d1@2 ~@3 d1 f1 g1", C: "g1@2 ~@3 a1 bb1 d2", D: "d2@2 ~@3 d1 f1 g1",
  E: "g1@4 ~@2 g1 f1 g1@2 f1@2 ~@2 eb1 ~", F: "eb1@4 ~@4 bb1@2 f2@2 bb1@2 eb1 ~", G: "eb1@2 ~ bb1 eb2!2 bb1 eb1",
  H: "eb1@4 ~@2 bb1@2 eb2 f2 eb2@2 bb1@2 eb1@2", I: "eb1@11 ~@5", J: "g1@2 ~@3 g1 f1 eb1",
  K: "eb1@4 ~@2 eb1 bb1 eb2@2 eb1@2 f1@2 gb1@2", L: "~ gb1 ~ gb1 ~ gb1 ab1@2", M: "d2@4 ~@6 d1@2 f1@2 g1 ~",
  N: "[g1@4 ~@6 bb1@2 bb1@2 eb2@6 ~@2 bb1 ~ eb1@5 ~ bb1@2]/2", O: "~ eb2 ~ bb1 eb1@2 ~@2",
  P: "~@2 eb2@3 ~ bb1@2 eb1@2 bb1@2 eb2@2 eb1@2", Q: "~@6 gb1@5 ~ d2@3 ~", R: "g1@5 ~@5 a1@2 bb1@2 d2@2",
  S: "d2@2 ~@2 d1 e1 f1 g1", T: "eb1@4 ~@6 bb1@2 eb2@2 eb1 ~", U: "eb1@4 ~@2 eb1 ~ eb1@2 bb1@2 eb2@2 bb1@2",
  V: "d2@5 ~@3 d1@2 e1@2 f1@2 g1@2", W: "g1@4 ~@2 g1 f1 g1@2 f1@2 ~@2 eb1@2", X: "eb1@2 ~@3 bb1 eb2 eb1",
  Y: "eb1@4 ~@2 bb1!2 bb1@2 eb2@2 bb1@2 eb1@2", Z: "eb1@7 ~",
  AA: "[eb1@4 ~@2 bb1 c2 eb2@2 bb1@2 eb1@2 gb1@6 ~@2 db2 ~ gb2 ab2 gb2@2 db2@2 gb1@2]/2",
  AB: "gb2@4 ~@2 db2 eb2 gb2@2 gb1@2 ab1@2 a1@2", AC: "[g1@4 ~@4 g1@2 a1@2 bb1@2 d2@5 ~@5 d1@2 e1@2 f1@2 g1@2]/2",
  AD: "eb1@5 ~ bb1@2 f2@2 f2@2 bb1@2 eb2@2", AE: "eb2@5 ~ bb1 c2 eb2 ~ eb2@2 c2@2 bb1@2",
  AF: "[f1@3 ~@3 f1 c2 f2@3 ~@3 eb2@6 ~@2 d2 eb2 d2@2 bb1 ~ bb1@2 c2@2]/2",
  AG: "[f1@4 ~@2 f1 c2 f2@4 ~@2 eb2@6 ~@2 d2 eb2 d2@2 bb1 ~ bb1@2 c2@2]/2", AH: "f1@2 c2!2 f2@2 eb2@6 eb2@4",
  AI: "f1@2 c2!2 f2@2 eb2@4 eb2 d2 eb2@2 d2@2", AJ: "[g2@6 g2!2 g2@2 f2@2 ~@2 eb2@10 ~@2 bb1@2 ~@2 eb2@2]/2",
  AK: "[eb1@15 ~]/2", AL: "[d1@15 ~]/2", AM: "[eb1@29 ~ eb1@2]/2",
  AN: "[eb1@9 ~ eb1@2 f1@2 gb1@4 gb1@2 gb1@2 gb1@2 gb1 ~ gb1 ~ d2@3 ~]/2", AO: "g1@2 ~@2 g1 a1 bb1 d2",
  AP: "d1@5 ~@3 d1@2 e1@2 f1@2 g1@2", AQ: "g1@4 ~@2 g1 f1 g1@2 f1 ~@3 eb1 ~",
  AR: "eb1@5 ~ bb1@2 eb2 ~ eb2@2 bb1@2 eb1 ~", AS: "eb1@4 ~@2 bb1 c2 eb2@2 eb2@2 bb1@2 eb1 ~",
  AT: "eb2@4 ~@2 eb2 ~ d2@4 ~@2 d2 ~", AU: "c2@5 ~ c2@2 f1 ~@2 f1@4 ~", AV: "[~ g1@32 ~@15]/3",
})).s("gm_synth_bass_2").gain(0.54)

// chords · epiano1
const epiano1 = note(`<
  ~@3 A B ~@3 C@2 D@2 E F G H I J@3 K L M ~ M N@3 O ~ O P@5 E F G H I J@3 K L M ~ M Q@3 O ~ O R@5 S@2 T@2 U@2 V W X Y Z
  AA AB@2 AC@2 ~@4 AD@2 AE@2 M AF@3 AE@2 M AF@3 AE@2 M AF@3 AE@2 M AF@3 AG AH AI@3
>`.pickRestart({
  A: "~@15 a4", B: "[c5,d5,f5]", C: "[[bb4,d5,f5]@9 ~ [a4,c5,f5] ~@3 [bb4,d5,f5]@11 ~ [a4,c5,f5] ~@5]/2",
  D: "[[bb4,d5,f5]@9 ~ [a4,c5,f5] ~@3 [bb4,d5,f5]@11 ~ d5 f5 g5 a5 g5 f5]/2", // Bb F Bb
  E: "~ a3 c4 d4 ~ g4 a4@2, d5@5 ~@3, ~@8 f4@7 ~", F: "[d4,f4,a4]@15 ~", G: "~ g4 bb4 c5 f5@4, [d4,f4]@15 ~, bb4 ~@3",
  H: "[ab3,bb3,db4,f4]@5 ~ [ab3,bb3,c4,eb4]@10", I: "~ a3 c4 ~@2 g4 a4@2, d5@5 ~@3, ~@6 f4@9 ~",
  J: "[~@16 [g3,bb3,d4,f4]@13 ~ [ab3,c4,db4,f4]@7 ~ [ab3,c4,db4,f4]@9 ~, [d4,f4,a4]@7 bb4@9 ~@8, ~@5 f5@11 ~@8, ~@3 c5@5 ~@4]/3", // Gm7 Dbmaj7 Dm
  K: "[g3,bb3,d4,f4]@5 ~ [g3,d4,f4]@9 ~", L: "[g3,bb3,d4,f4]@5 ~@5 f5@2 bb5@2 db6@2, ~@3 [bb3,db4,f4,ab4]@5",
  M: "~@2 c5 d5 a5@12",
  N: "[~@10 [a4,c5,f5]@2 ~@2 [bb4,d5,f5]@11 ~ [a4,c5,f5] ~@3 [bb4,d5,f5]@11 ~ [bb4,d5,f5]@2 ~@2 [bb4,d5,f5] ~]/3", // F Bb F Bb
  O: "~@6 c5 d5 a5@8",
  P: "[~@10 [a4,c5,f5]@2 ~@2 [bb4,d5,f5]@10 ~@2 [a4,c5,f5] ~@3 [bb4,d5,f5]@11 ~ [a4,c5,f5]@2 ~@2 [bb4,d5,f5]@11 ~ [a4,c5,f5] ~@3 [bb4,d5,f5]@12 d5 f5 g5 bb5 c6 d6]/5", // F Bb F Bb F Bb F Bb
  Q: "[~@10 [a4,c5,f5]@2 ~@2 [bb4,d5,f5]@12 [a4,c5]@2 ~@2 [bb4,d5,f5]@11 ~ [bb4,d5,f5]@2 ~@2 [bb4,d5,f5] ~, ~@26 f5 ~@21]/3", // F Bb Am Bb
  R: "[~@10 [a4,c5,f5] ~@3 [bb4,d5,f5]@11 ~ [a4,c5,f5] ~@3 [bb4,d5,f5]@11 ~ [a4,c5,f5] ~@3 [db5,f5,ab5]@11 ~ [c5,eb5,ab5]@2 ~@2 [db5,f5,ab5]@16 ~@2]/5", // F Bb F Bb F Db Ab Db
  S: "[~@2 c5 d5 a5@18 ~@10]/2", T: "[~@2 c5 d5 a5@22 ~@6]/2",
  U: "[[bb4,d5,f5]@9 ~ [a4,c5,f5] ~@3 [bb4,d5,f5]@16 ~@2]/2", V: "[a4,c5,f5]@15 ~",
  W: "[bb4,d5,f5]@4 bb5@4 a5@4 f5@3 c5", X: "[a4,c5,f5]@14 ~ c5", Y: "[bb4,d5,f5] bb5 a5 f5",
  Z: "[a4,c5,f5]@6 [bb4,d5,f5]@4 c5 d5 f5@2 d5 c5", AA: "[a4,c5,f5]@5 ~ [bb4,d5,f5]@4 d5 c5 d5@2 c5@2",
  AB: "[[bb4,d5,g5]@9 ~ [a4,c5,f5]@2 ~@2 [bb4,d5,f5]@6 [bb4,d5,f5]@5 ~ c5@4 f5@2]/2", AC: "[d5@29 ~@3]/2",
  AD: "[[bb4,d5,f5]@7 [db5,f5,ab5]@4 bb4 db5 f5 ab5@2]/2", AE: "[~@2 c5 d5 a5@14 ~@14]/2",
  AF: "[~@10 [a4,c5,f5] ~@3 [bb4,d5,f5]@11 ~ [a4,c5,f5]@2 ~@2 [bb4,d5,f5]@11 ~ [bb4,d5,f5]@4 [bb4,d5,f5] ~]/3", // F Bb F Bb
  AG: "[bb4,d5,f5]@5 ~ [bb4,d5,f5] ~ [a4,c5,f5]@5 ~ [a4,c5,f5] ~", // Bb F
  AH: "[g4,bb4,eb5]@5 ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~@2 [g4,bb4,eb5]@5", AI: "[~ [g4,b4,d5]@32 ~@15]/3",
})).s("gm_epiano1").gain(0.3).pan(0.3)

// other · electric guitar clean
const electric_guitar_clean = note(`<
  ~@4 A B C@2 ~@3 D ~@10 E B E F ~@2 E G A F ~@3 H ~@10 E B E F ~@2 E G A F ~@4 E G A I ~@18 E G A F ~@2 E G A F ~@2 E G
  A F ~@2 E G A F ~@7
>`.pickRestart({
  A: "~@2 a3@2 c4!2 d4@10", B: "c4@3 bb3@2 c4 bb3@2", C: "[~@2 a3@2 c4!2 d4@8 c4@15 ~@3]/2",
  D: "~@2 [c4,f4,bb4,d5] ~ [c4,f4,bb4,d5] ~ [f4,bb4,d5]!2 [f4,bb4,d5]@7 ~", E: "~@2 a3@2 c4!2 d4@9 ~", F: "c4@13 ~@3",
  G: "c4@6 bb3@4 c4@2 bb3@3 ~", H: "~@2 [f4,bb4,d5] ~ [f4,bb4,d5] ~ [f4,bb4,d5]!2 [f4,bb4,d5]@8", I: "c4@7 ~",
})).s("gm_electric_guitar_clean").gain(0.45)

// other · marimba
const marimba = note("<~ A B ~@72 A B C D ~@32>".pickRestart({
  A: "~@14 a5!2", B: "f5 ~ f5 ~ d5 ~ d5 ~ c5@2 d5 ~@5", C: "~@14 d5!2", D: "c5 ~ d5 ~@13",
})).s("gm_marimba").gain(0.4)

// other · pad poly
const pad_poly = note("<~@6 A@3 ~@28 B ~@73>".pickRestart({
  A: "[~@8 [a4,a5]@2 [bb4,bb5]@2 [c5,c6]@2 [bb4,bb5]@6 [a4,a5]@2 ~@2 [f4,f5]@2 [d4,d5] ~@3 [g4,g5]@18]/3", // A Bb C Bb A F D G
  B: "~ [d5,d6] [c5,c6] [a4,a5]@5", // D C A
})).s("gm_pad_poly").gain(0.3)

// other · pad new age
const pad_new_age = note(`<
  ~@22 A B A C@2 ~ A D A E@2 ~@13 A B A C@2 ~ A D A E@2 ~@25 A B A F@2 ~ A B A F@2 ~ A B A F@2 ~ A B A F@2 ~@6
>`.pickRestart({
  A: "~@4 a5 bb5 c6 bb5", B: "~@2 a5@2 ~@2 g5@3 ~ f5@5 ~", C: "[~@2 bb5@2 a5 ~ a5@2 f5@2 d5 ~@3 g5@17 ~]/2",
  D: "~@2 a5@2 ~@2 g5@3 ~ f5@6", E: "[~@2 bb5@2 a5 ~ a5 ~ f5@2 d5 ~@3 g5@15 ~@3]/2",
  F: "[~@2 bb5@2 a5 ~ a5 ~ f5@2 d5 ~@3 g5@18]/2",
})).s("gm_pad_new_age").gain(0.35)

// other · trumpet
const trumpet = note(`<
  A B ~@2 C D ~@2 E@2 F@2 ~@14 E@2 G@2 H@2 E@2 I@2 ~@10 J@2 K@2 L@2 G@2 H@2 M@2 N@2 C O P Q R@2 ~@8 S T ~@2 A U ~@6 L@2
  ~@4 L@2 ~@4 L@2 ~@4 L@2 V@2 W@3
>`.pickRestart({
  A: "~@4 d5 ~@3 c5@2 d5 ~@5", B: "[a4,bb4] ~ g4 ~@3 g4@7 ~@3", C: "~@4 d5@2 ~@2 c5@2 d5 ~@5",
  D: "bb4@2 g4 ~ f4 ~ g4@9 ~, a4 ~@15", E: "[~@4 g4@2 ~@2 bb4@2 f5 ~@3 d5@6 g4@2 ~@2 bb4@2 c5 ~@5]/2",
  F: "[~@4 g4@2 ~@2 bb4@2 f5 ~@3 d5@4 d5@9 ~@5]/2", G: "[~@4 a4@11 ~]/2", H: "[~@4 a4@9 ~@3]/2",
  I: "[~@4 g4@2 ~@2 bb4@2 f5 ~@3 d5@4 d5@13 ~]/2", J: "[~@6 a4@21 ~@5]/2", K: "[~@3 a4@10 ~@3]/2",
  L: "[~@4 g4@2 ~@2 bb4@2 f5 ~@3 d5@6 g4@2 ~@2 bb4@2 c5@3 ~@3]/2",
  M: "[~@4 g4@2 ~@2 bb4@2 f5 ~@3 d5@6 g4@3 ~ bb4@2 c5 ~@5]/2",
  N: "[~@4 bb4@2 ~@2 db5@2 ab5 ~@3 f5@6 bb4@3 ~ db5@2 eb5 ~@5]/2", O: "bb4@2 g4 ~ f4 ~ g4@8 ~@2, a4 ~@15",
  P: "~@4 d5 eb5 f5 d5", Q: "~@2 bb4 ~@3 c5@4 d5@2 bb4 ~@3", R: "[a5@4 f5@2 d5 ~@3 g5@22]/2",
  S: "~@4 d5 ~@3 c5@2 d5 ~@4 a4", T: "bb4@2 g4 ~ f4 ~ g4@9 ~", U: "bb4@2 g4 ~ f4 ~ g4@10, a4 ~@15",
  V: "[~@4 g4 ~@3 bb4@2 f5 ~@3 d5@6 g4 ~@3 bb4@2 ~ c5@3 ~@2]/2", W: "[~ d5@32 ~@15, ~ b4@16 ~@31]/3",
})).s("gm_trumpet").gain(0.35).pan(0.7)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B@6 C ~ B@9 ~ B@5 D B@5 D B A B@9 ~ B@5 D B@5 E B F B@5 D B@5 G@2 H ~@6 B A B@5 D B@5 D B@5 D B@5 D I J ~@3
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~@3 x!2", D: "~@2 x ~@2 x ~ x", E: "~@2 x ~@2 x!3", F: "~@4 x ~ x!3 ~ x ~@5",
  G: "~@2 x ~@2 x!2 ~", H: "~ x ~@2", I: "~@2 x ~@10 x ~@2", J: "~@4 x ~@6 x!3 ~@2",
})).gain(0.42)

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!3 [~ x ~@2] ~@70 [~ x ~ x]!3 [~ x ~@2] [~@4 x ~@7 x ~ x!2] [~ x ~ x] ~@31>")
  .gain(0.42)

// drums · hihat
const hihat = s("hh").struct("<A@2 B C D@7 ~ D@9 E D@13 ~ D@9 E D@11 F D G D@5 H D@4 F I D F D@32 ~@5>".pickRestart({
  A: "~@10 x ~ x ~ x!2", B: "~@2 x!2 ~@2 x!2 ~@2 x ~ x ~@3", C: "~@14 x!2", D: "x!8", E: "x", F: "x!5 ~@3",
  G: "x!3 ~ x!2 ~@2", H: "x!5 ~ x ~", I: "x!7 ~",
})).gain(0.36)

// drums · low tom
const low_tom = s("lt").struct("<~@11 A ~@9 B ~@13 C ~@9 B ~@24 B ~ D E ~@3 F ~@3 G ~@24 H ~ I ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@7 x", C: "~ x!2 ~", D: "~@11 x ~@4", E: "~@5 x ~ x", F: "~@5 x ~@2", G: "~@6 x!2 ~@6 x ~",
  H: "~@10 x!3 ~@3", I: "x",
})).gain(0.54)

// drums · mid tom
const mid_tom = s("mt").struct("<~@11 A ~@9 B ~@13 C ~@9 B ~@24 D ~ E ~@8 F ~@24 G H I ~@2>".pickRestart({
  A: "~@7 x ~@8", B: "~@3 x!2 ~ x ~", C: "~@5 x!2 ~", D: "~@3 x", E: "~@6 x!3 ~@7", F: "~@5 x ~@2",
  G: "~@6 x!2 ~@6 x!2", H: "~@5 x!3 ~@6 x!2", I: "x",
})).gain(0.54)

// drums · open hat
const open_hat = s("oh").struct("<[~@3 x ~@4]!2 [~@7 x] [~@3 x ~@4] ~@67 [~@7 x] ~@39>").gain(0.54)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@6 A ~@16 A ~@3 A ~@2 A ~@16 A ~@3 A B ~ C ~@5 D ~@6 C D ~@6 E F A ~@5 A ~@5 A ~@5 A ~@5 G@2 H ~@2
>`.pickRestart({
  A: "x", B: "~@5 x!3", C: "~@7 x", D: "~@5 x ~ x", E: "x ~@6 x", F: "~@3 x", G: "x!2", H: "~ x ~@14",
})).gain(0.54)

// drums · high tom
const high_tom = s("ht").struct("<~@11 A ~@9 B ~@13 C ~@9 B ~@24 D ~@35 E F ~@3>".pickRestart({
  A: "~@3 x ~@4", B: "~ x!2 ~@2 x ~@2", C: "~@9 x ~@6", D: "~@5 x ~@2", E: "~@4 x!2 ~@7 x ~@2", F: "~@2 x ~ x ~@6 x!5",
})).gain(0.54)

// drums · congas
const congas = s("conga:18").struct("<A ~ A ~@19 A@14 ~@10 A@14 ~@6 A@9 ~ A ~ A ~@3 A@24 ~@5>".pickRestart({
// … 28 more lines

More by Mica Paris