Strudelify
Baby Don't Forget My Number cover art

1989 · All Or Nothing

Baby Don't Forget My Number

Milli Vanilli

KeyA♭ majorTempo100 bpm
0:00/0:00
// Baby Don't Forget My Number — Milli Vanilli
// 100 bpm, 4/4, key Ab major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 · piano · "A.PIANO 1"
const bass = note(`<
  ~@5 A B C D E F@2 E@2 F@2 E@2 F@2 G H I J K L M N M O P Q P R S T S U V ~@12 W X W Y E@2 F E@2 F@2 G H I J L M N M O P
  Q P R S T S U V ~@10 W Y Z AA Z AB AC AD AE AD AF AG AH AI AJ AK AL AM AN AO AL AM AP
>`.pickRestart({
  A: "e1 ~@2 e1 ~@2 e1@3 ~ e1 ~ e1!2 d1@2", B: "a1 ~@2 a1 ~@2 a1 ~@5 a1!2 d1@2", C: "e1 ~@2 e1 ~@2 e1@5 ~ e1!2 d1@2",
  D: "a1 ~@9 d1@5 ~", E: "e1@2 e1!3 ~ e1@3 ~ e1 ~@3 e1 ~", F: "e1 ~ e1!3 ~ e1@3 ~ e1 ~@3 e1 ~", G: "e1@2 e1!3 ~ e1 ~@9",
  H: "~@2 e1@2 ~ e1 ~@2 e1@2 ~ e1 ~ e1 e2 e1", I: "~@2 e1 ~@2 e1 ~@2 e1@2 ~ e1 ~@2 e1 ~",
  J: "~@2 e1 ~@2 e1 ~@2 e1@3 gb1@3 ab1 ~", K: "a2@3 a2 ~@2 a2 ~@3 a1 ~@2 a2 ~@2", L: "d2@3 d2 ~@2 d2 ~@3 d2 ~@2 d2 ~@2",
  M: "e1 ~@3 ab1 ~@3 a1@2 ~ ab1@2 ~ ab1 ~", N: "d1 ~ d1 ~ gb1 ~@3 g1 ~@2 gb1@3 gb1 ~",
  O: "d1 ~ d1 ~ gb1 ~@3 g1 ~@2 g1@2 ~ gb1 ~", P: "e1 ~@3 ab1 ~@3 a1@3 ab1@2 ~ ab1 ~",
  Q: "b1 ~ b1@2 ~@4 d2 d1 d2@3 d1 d2@2", R: "d1 ~ d1 ~@2 d1 gb1 ~ g1 ~@2 gb1@3 d1 ~",
  S: "e1 ~@3 ab1 ~@3 a1 ~@2 ab1@4 ~", T: "d1 ~ d1 ~@2 d1 gb1 ~ g1 ~@3 gb1@2 ~@2",
  U: "b1 ~ b1 ~@2 b1@2 ~ d2 ~ d2@3 d1 d2@2", V: "e1 ~@3 ab1 ~@3 a1@3 b1@3 ~@2", W: "e1 ~@2 e1 ~@2 e1 ~@9",
  X: "a1 ~@2 a1 ~@2 a1 ~@9", Y: "a1@3 d1@4 ~", Z: "~@8 db2 ~@3 e2 ~@3", AA: "~@2 e2 ~ d2@2 ~@2 db2 ~@7",
  AB: "~@2 e2 ~ d2@3 ~ db2 ~@7", AC: "~@8 e1 ~@3 ab1 ~@3", AD: "a1@2 ~ ab1@2 ~ ab1 ~ d1 ~ d1 ~ gb1 ~@3",
  AE: "g1 ~@2 gb1@3 gb1 ~ e1 ~@3 ab1 ~@3", AF: "g1 ~@2 g1@2 ~ gb1 ~ e1 ~@3 ab1 ~@3",
  AG: "a1@3 ab1@2 ~ ab1 ~ b1 ~ b1@2 ~@4", AH: "d2 d1 d2@3 d1 d2@2 e1 ~@3 ab1 ~@3",
  AI: "a1@3 ab1@2 ~ ab1 ~ d1 ~ d1 ~@2 d1 gb1 ~", AJ: "g1 ~@2 gb1@3 d1 ~ e1 ~@3 ab1 ~@3",
  AK: "a1 ~@2 ab1@4 ~ d1 ~ d1 ~@2 d1 gb1 ~", AL: "g1 ~@3 gb1@2 ~@2 e1 ~@3 ab1 ~@3",
  AM: "a1 ~@2 ab1@4 ~ b1 ~ b1 ~@2 b1@2 ~", AN: "d2 ~ d2@3 d1 d2@2 e1 ~@3 ab1 ~@3",
  AO: "a1@3 b1@3 ~@2 d1 ~ d1 ~@2 d1 gb1 ~", AP: "d2 ~ d2@3 d1 d2@2 e1 ~ e1 ~@5",
})).s("gm_piano").gain(0.46)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~ A B A B A B C D ~@8 E@3 F G H G I@2 J ~ K ~ K ~ K ~ K ~ K ~@2 L M L M L M N O L M L M P Q R S ~@4 E@3 F G H G T J ~
  K ~ K ~ K ~ K ~ K ~@2 L M L M L M N O L M R U ~@5 V ~ W ~ W ~ W ~ W ~ W ~@3 W X
>`.pickRestart({
  A: "[e5,ab5,b5]!5 ~ [e5,ab5,b5] ~@7 [d5,gb5,a5] ~", B: "[db5,e5,a5]!5 ~ [db5,e5,a5] ~@9",
  C: "[e5,ab5,b5]!5 ~ [e5,ab5,b5] ~ gb5@2 ab5@4 [d5,gb5,a5] ~, ~@7 e5", // E D
  D: "[db5,e5,a5]!5 ~ [e3,gb3,a3,d4,e4]@8 [e3,gb3,a3,d4,e4] ~, ~@6 [db5,e5,a5] ~@9", // A D A
  E: "[e5,a5] [d5,gb5] [b4,e5] [gb5,b5] [d5,gb5] [b4,e5] [b4,gb5] [e5,a5] [d5,gb5] [b4,e5] [d5,gb5] [b4,e5] [d5,gb5] [e5,a5] [b4,gb5] [a4,e5]", // A5 D E5 B5 D E5 B5 A5 …
  F: "[e5,a5] [d5,gb5] [b4,e5] [gb5,b5] [d5,gb5] [b4,e5] [b4,gb5] [e5,a5] ~@8", G: "e4 e2 ~@6",
  H: "[a4,db5,e5]!5 ~ [a4,d5,e5]@4 [a4,db5,e5] ~@5", // A Asus4 A
  I: "[[a4,db5,e5]!5 ~ [a4,d5,e5]@4 [a4,db5,e5] ~@3 [a3,d4,gb4]@17 ~]/2", J: "~@8 [e4,a4,b4,e5,a5,b5]@4 [ab4,ab5] ~@3",
  K: "~@4 [a4,a5]@2 [ab4,ab5] ~, ~@4 [e4,b4,e5,b5]@3 ~", // A Ab E5
  L: "[b3,e4,ab4] ~ [e2,e3] ~ [b3,e4,ab4] ~ [e2,e3] ~ [a3,d4,gb4] ~ [d2,d3] ~ [a3,d4,gb4] ~ [d2,d3] ~", // E D
  M: "[a3,db4,e4] ~ a2 ~ [a3,db4,e4] ~ a2 ~ [a3,db4,e4] ~ a2 ~ [a3,db4,e4] ~ a2 ~", // A
  N: "[b3,e4,ab4] ~ e3 ~ [b3,e4,ab4] ~ e3 ~ [b3,e4,a4] ~ e3 ~ [b3,e4,a4] ~ e3 ~", // E Esus4
  O: "[b3,e4,ab4] ~ e3 ~ [b3,e4,ab4] ~ e3 ~ [a3,d4,gb4] ~ d3 ~ [a3,d4,gb4] ~ d3 ~", P: "[e5,ab5,b5]!5 ~@11",
  Q: "[db5,e5,a5]!5 ~@11", R: "[e5,ab5,b5]!5 ~@9 [db5,e5,a5]@2",
  S: "[e5,a5] ~ [db5,e5,a5] ~@3 [d5,gb5,a5]@9 ~, db5 ~@7", T: "[a3,d4,gb4]@15 ~",
  U: "~@2 [db5,e5,a5] ~@3 [d5,gb5,a5]@9 ~", V: "[e4,a4,b4,e5,a5,b5]@4 [ab4,ab5] ~@11",
  W: "[a4,a5]@2 [ab4,ab5] ~@5, [e4,b4,e5,b5]@3 ~@5", X: "~@8 [e3,b3,e4] ~ [e3,b3,e4] ~@5",
})).s("gm_epiano2").gain(0.3).pan(0.8)

// chords · accordion
const accordion = note(`<
  ~@5 A@2 B@2 C D E F C D E F C D E G H I H J@2 K L M N O P Q R S T S U V ~ W ~ X ~ W ~@2 Y Z AA Z AB Z AA AC C D E F C
  D E G H I H AD K L M N O P Q R S T S U V ~ W ~ X ~ W ~@2 Y Z Y AE AF AG AF AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU
  AV AS AT AW
>`.pickRestart({
  A: "[ab5@2 ~@2 ab5@2 e5@2 gb5@2 ab5@3 ~ gb5@4 e5@4 ~@2 b4@2 e5@4 ~@2, ~@24 ab4 ~@7]/2",
  B: "[ab5@3 ~ ab5@2 e5@2 gb5@2 ab5@4 e5@8 [e3,gb3,a3,d4,e4]@8 [e3,gb3,a3,d4,e4] ~]/2", // D
  C: "[b3,d4,gb4,b4]@2 ~ [b3,d4,gb4,b4] ~@2 [b3,d4,gb4,b4] ~@3 [b3,d4,gb4,b4]!2 ~@2 [b3,d4,gb4,b4] ~", // Bm
  D: "[b3,d4,gb4,b4,db5]@2 ~ [b3,d4,gb4,b4] ~@2 [b3,d4,gb4,b4] ~@3 [b3,d4,gb4,b4]!2 ~ [b3,d4,gb4,b4]!2 [b3,d4,gb4]", // Bm
  E: "[b3,d4,gb4,b4]@3 [b3,d4,gb4,b4] ~@2 [b3,d4,gb4,b4] ~@3 [b3,d4,gb4,b4]!2 ~@2 [b3,gb4,b4] ~", // Bm B5
  F: "[b3,d4,gb4,b4,db5]@2 ~ [b3,d4,gb4,b4] ~@2 [b3,d4,gb4,b4] ~@3 [b3,d4,gb4,b4]!2 ~ [b3,d4,gb4,b4]!3", // Bm
  G: "[b3,d4,gb4,b4,db5]@2 ~ [b3,d4,gb4,b4] ~@2 [b3,d4,gb4,b4] ~@9", // Bm
  H: "[b3,e4,ab4] ~ e2 ~@2 e2 ~@2 e2@2 ~@3 e3 e2 ~, e3 ~@7", I: "~@6 [a3,d4,gb4]@4 [a3,db4,e4] ~@5",
  J: "[~@6 [a3,d4,gb4]@4 [a3,db4,e4] ~@3 [a3,d4,gb4]@17 ~]/2", // D A D
  K: "[b3,e4,ab4]@3 ~ ab2 ~@3 a2@2 ~ ab2@2 ~ ab2 ~, e2 ~@15", // E
  L: "[d2,a3,d4,gb4] ~ [d2,a3,d4,gb4] ~ gb2 ~@3 g2 ~@2 gb2@3 gb2 ~", // D
  M: "[b3,e4,ab4]@2 [b3,e4,ab4] ~ ab2 ~@3 a2@2 ~ ab2@2 ~ ab2 ~, e2 ~@15", // E
  N: "[a3,d4,gb4]@2 d2 ~ gb2 ~@3 g2 [a3,d4,gb4] ~@2 [a3,d4,gb4] ~ gb2 ~, d2 ~@10 g2@2 ~@3", // D
  O: "[b3,e4,ab4]@2 ~@2 ab2 ~@3 a2@3 ab2@2 ~ ab2 ~, e2 ~@15", // E
  P: "[d4,gb4,a4]@2 [d4,gb4,a4] ~@5 d3 d2 d3@3 d2 d3@2, b2 ~ b2@2 ~@12", // D
  Q: "[e2,b3,e4,ab4] ~ [b3,e4,ab4] ~ ab2 ~@3 a2@3 ab2@2 ~ ab2 ~", // E
  R: "[a3,d4,gb4]@2 [d2,a3,d4,gb4] ~@2 d2 gb2 ~ g2 ~@2 gb2@3 d2 ~, d2 ~@15", // D
  S: "[b3,e4,ab4]@2 ~@2 ab2 ~@3 a2 ~@2 ab2@4 ~, e2 ~@15", // E
  T: "[d2,a3,d4,gb4] ~ [d2,a3,d4,gb4] ~@2 d2 gb2 ~ g2 ~@3 gb2@2 ~@2", // D
  U: "[d4,gb4,b4]@2 [b2,d4,gb4,b4] ~@2 b2@2 ~ d3 ~ d3@3 d2 d3@2, b2 ~@15", V: "e2 ~@3 ab2 ~@3 a2@3 b2@3 ~@2",
  W: "~@2 [d4,gb4,a4] ~@3 [a3,d4,gb4]@3 ~ [a3,db4,e4]@4 ~@2", X: "~@6 [gb3,a3,d4]@3 ~ [e3,a3,db4]@3 ~@3",
  Y: "ab4 ~@5 ab4!2 gb4 ~ ab4@3 ~ e4@2", Z: "~@6 b3!3 ~ e4@3 ~ ab4@2", AA: "~@6 ab4!2 gb4 ~ ab4@3 ~ e4@2",
  AB: "ab4@2 ~@4 ab4!2 gb4 ~ ab4@3 ~ e4@2", AC: "e4 ~@7", AD: "[a3,d4,gb4]@15 ~", AE: "e4 ~@15",
  AF: "~@8 db3 ~@3 e3 ~@3", AG: "~@2 e3 ~ d3@2 ~@2 db3 ~@7", AH: "~@2 e3 ~ d3@3 ~ db3 ~@7",
  AI: "~@8 [b3,e4,ab4]@3 ~ ab2 ~@3, ~@8 e2 ~@7", AJ: "a2@2 ~ ab2@2 ~ ab2 ~ [d2,a3,d4,gb4] ~ [d2,a3,d4,gb4] ~ gb2 ~@3",
  AK: "g2 ~@2 gb2@3 gb2 ~ [b3,e4,ab4]@2 [b3,e4,ab4] ~ ab2 ~@3, ~@8 e2 ~@7", // E
  AL: "a2@2 ~ ab2@2 ~ ab2 ~ [a3,d4,gb4]@2 d2 ~ gb2 ~@3, ~@8 d2 ~@7", // D
  AM: "g2 [a3,d4,gb4] ~@2 [a3,d4,gb4] ~ gb2 ~ [b3,e4,ab4]@2 ~@2 ab2 ~@3, ~@3 g2@2 ~@3 e2 ~@7", // D E
  AN: "a2@3 ab2@2 ~ ab2 ~ [d4,gb4,a4]@2 [d4,gb4,a4] ~@5, ~@8 b2 ~ b2@2 ~@4", // D
  AO: "d3 d2 d3@3 d2 d3@2 [e2,b3,e4,ab4] ~ [b3,e4,ab4] ~ ab2 ~@3", // E
  AP: "a2@3 ab2@2 ~ ab2 ~ [a3,d4,gb4]@2 [d2,a3,d4,gb4] ~@2 d2 gb2 ~, ~@8 d2 ~@7", // D
  AQ: "g2 ~@2 gb2@3 d2 ~ [b3,e4,ab4]@2 ~@2 ab2 ~@3, ~@8 e2 ~@7", // E
  AR: "a2 ~@2 ab2@4 ~ [d2,a3,d4,gb4] ~ [d2,a3,d4,gb4] ~@2 d2 gb2 ~", // D
  AS: "g2 ~@3 gb2@2 ~@2 [b3,e4,ab4]@2 ~@2 ab2 ~@3, ~@8 e2 ~@7", // E
  AT: "a2 ~@2 ab2@4 ~ [d4,gb4,b4]@2 [b2,d4,gb4,b4] ~@2 b2@2 ~, ~@8 b2 ~@7", AU: "d3 ~ d3@3 d2 d3@2 e2 ~@3 ab2 ~@3",
  AV: "a2@3 b2@3 ~@2 [d2,a3,d4,gb4] ~ [d2,a3,d4,gb4] ~@2 d2 gb2 ~", AW: "d3 ~ d3@3 d2 d3@2 ~@8",
})).s("gm_accordion").gain(0.31).pan(0.3)

// chords · lead 1 square · "SQUAREWAVE"
const lead_1_square = note(`<
  ~ A B C D ~@2 E@2 F@8 G@4 ~ H ~ I@2 J K L M N O N P Q R Q S T ~ U ~ V ~ U ~@6 W X W Y F@4 Z@3 AA ~ H ~ AB J K L M N O
  N P Q R Q S T ~ U ~ V ~ U ~@4 AC Y ~@4 AD AE AF AG AH AI AJ AK AL@8 AM
>`.pickRestart({
  A: "e4 ~ b3 e3 ~ e3 b3 e3 ~ e4 ~ e4 b3 e3 b3 e3", B: "b3 e4 ~ e4 ~ e4 b3 e3 ~ e3 ~ e3 b3 e3 b3 e4",
  C: "e4 b3 e3 b3 e3 ~ e4 ~@2 b3 ~ e3 e4 b3 e3 b3", D: "e3 b3 e4 ~@2 e4 b3 e3 ~ e3 ~ e3 b3 e3 e4 b3",
  E: "[ab6@2 ab6 e6 gb6 ab6@2 e6@2 ~@7]/2", F: "[e2@63 ~]/4", G: "[~@4 [d5,e5,a5]@3 ~, e2@55 ~@9]/4",
  H: "~@6 [a3,d4,gb4]@4 [a3,db4,e4] ~@5", I: "[~@6 [a3,d4,gb4]@4 [a3,db4,e4] ~@3 [a3,d4,gb4]@17 ~]/2",
  J: "e2 ~@3 ab2 ~@3 a2@2 ~@2 [ab4,ab5] ~ ab2 ~, ~@8 [e4,a4,b4,e5,a5,b5]@5 ~@3, ~@11 ab2@2 ~@3", // Ab Esus4
  K: "d2 ~ d2 ~ gb2 ~@3 g2 ~@2 gb2@3 gb2 ~",
  L: "e2 ~@3 ab2 ~@3 [a4,a5]@3 ~ [ab4,ab5]@2 ab2 ~, ~@4 [e4,b4,e5,b5]@3 ~, ~@8 a2@2 ~ ab2@2 ~@3", // A Ab E5
  M: "d2 ~ d2 ~ gb2 ~@3 g2 ~@2 g2@2 ~ gb2 ~",
  N: "e2 ~@3 ab2 ~@3 [a2,a4,a5]@3 ~ [ab4,ab5]@2 ab2 ~, ~@4 [e4,b4,e5,b5]@3 ~, ~@11 ab2@2 ~@3", // A Ab E5
  O: "b2 ~ b2@2 ~@4 d3 d2 d3@3 d2 d3@2", P: "d2 ~ d2 ~@2 d2 gb2 ~ g2 ~@2 gb2@3 d2 ~",
  Q: "e2 ~@3 ab2 ~@3 [a4,a5]@3 ~ [ab4,ab5]@2 ~@2, ab6, ~@4 [e4,b4,e5,b5]@3 ~, ~@8 a2 ~@2 ab2@4 ~", // A Ab E5
  R: "d2 ~ d2 ~@2 d2 gb2 ~ g2 ~@3 gb2@2 ~@2, gb6", S: "b2 ~ b2 ~@2 b2@2 ~ d3 ~ d3@3 d2 d3@2, gb6",
  T: "e2 ~@3 ab2 ~@3 a2@3 b2@3 ~@2, [gb6,b6]", U: "~@2 [d4,gb4,a4] ~@3 [a3,d4,gb4]@3 ~ [a3,db4,e4]@4 ~@2",
  V: "~@6 [gb3,a3,d4]@3 ~ [e3,a3,db4]@3 ~@3", W: "b5", X: "a5@3 db6", Y: "db6@8 d6@4 db6@3 ~, a5@15 ~, b5 ~@15",
  Z: "[~@2 [d5,e5,a5], e2]/3", AA: "[e2,d5,e5,a5] ~", AB: "[a3,d4,gb4]@15 ~", AC: "b5, db6 ~@15",
  AD: "~@8 e2 ~@3 ab2 ~@3",
  AE: "a2@2 ~@2 [ab4,ab5] ~ ab2 ~ d2 ~ d2 ~ gb2 ~@3, [e4,a4,b4,e5,a5,b5]@5 ~@11, ~@3 ab2@2 ~@11", // Ab Esus4
  AF: "g2 ~@2 gb2@3 gb2 ~ e2 ~@3 ab2 ~@3",
  AG: "[a4,a5]@3 ~ [ab4,ab5]@2 ab2 ~ d2 ~ d2 ~ gb2 ~@3, [e4,b4,e5,b5]@3 ~@5, a2@2 ~ ab2@2 ~@11", // A Ab E5
  AH: "g2 ~@2 g2@2 ~ gb2 ~ e2 ~@3 ab2 ~@3",
  AI: "[a2,a4,a5]@3 ~ [ab4,ab5]@2 ab2 ~ b2 ~ b2@2 ~@4, [e4,b4,e5,b5]@3 ~@5, ~@3 ab2@2 ~@11", // A Ab E5
  AJ: "d3 d2 d3@3 d2 d3@2 e2 ~@3 ab2 ~@3",
  AK: "[a2,a4,a5]@3 ~ [ab4,ab5]@2 ab2 ~ d2 ~ d2 ~@2 d2 gb2 ~, [e4,b4,e5,b5]@3 ~@5, ~@3 ab2@2 ~@11", // A Ab E5
  AL: "[g2 ~@2 gb2@3 d2 ~ e2 ~@3 ab2 ~@3 [a4,a5]@3 ~ [ab4,ab5]@2 ~@2 d2 ~ d2 ~@2 d2 gb2 ~ g2 ~@3 gb2@2 ~@2 e2 ~@3 ab2 ~@3 [a4,a5]@3 ~ [ab4,ab5]@2 ~@2 b2 ~ b2 ~@2 b2@2 ~ d3 ~ d3@3 d2 d3@2 [e2,gb6] ~@3 ab2 ~@3 a2@3 b2@3 ~@2 [d2,ab6] ~ d2 ~@2 d2 gb2 ~ g2 ~@3 gb2@2 ~@2 e2 ~@3 ab2 ~@3 [a4,a5]@3 ~ [ab4,ab5]@2 ~@2 b2 ~ b2 ~@2 b2@2 ~, ~ ab6@2 gb6@2 ab6@2 gb6@2 b6@2 gb6@2 ab6@2 gb6, ~@8 [e4,b4,e5,b5]@3 ~@13 [e4,b4,e5,b5]@3 ~@29 [e4,b4,e5,b5]@3 ~@5, ~@16 a2 ~@2 ab2@4 ~@25 a2 ~@2 ab2@4 ~@57 a2 ~@2 ab2@4 ~@9]/8", // A Ab A Ab Esus2 Ddim A Ab …
  AM: "d3 ~ d3@3 d2 d3@2 [e3,b3,e4] ~ [e3,b3] ~@5, ~@5 e4 ~@2", // E5
})).s("gm_lead_1_square").gain(0.27).pan(0.9)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<A ~@11 A ~@7 A ~@17 B ~@19 A ~@3 A ~@16 B ~@24 C ~@7 D>".pickRestart({
  A: "~@8 x!4 ~@4", B: "~@3 x ~@4", C: "~ x ~@2", D: "x!3 ~@13",
})).gain(0.22)

// drums · clap
const clap = s("cp").struct("<~@21 [~ x ~ x]!18 ~@24 [~ x ~ x]!17 ~@16 [~@3 x] [~ x ~ x]!15 [~ x ~@2]>").gain(0.74)

// drums · low tom
const low_tom = s("lt").struct("<A ~@19 B ~@5 C@13 ~@23 B ~@4 C@13 ~@12 D ~@3 E C@15 F>".pickRestart({
  A: "~@4 x!4", B: "~@14 x!2", C: "~ x ~ x", D: "~ x ~@2", E: "~@3 x", F: "~@2 x ~ x!2 ~@2",
})).gain(0.74)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~ A@8 ~@17 B@13 A@16 ~@12 B@13 A@12 C D@3 E B@15 F>".pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~@6", B: "~ x ~@3 x ~@3 x ~@3 x ~@2", C: "~@9 x ~ x ~ x ~ x", D: "~ x ~@7 x ~ x ~ x ~ x",
  E: "~ x ~@7 x ~@3 x ~@2", F: "~ x ~@3 x ~@10",
})).gain(0.22)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@9 x ~ x ~ x ~ x] ~@19 [~@12 x!2 ~@2] ~@41 [~@12 x!2 ~@2] ~@29 x ~@20>").gain(0.74)

// drums · open hat
const open_hat = s("oh").struct("<~ A@8 B@11 C B@18 A@16 B@7 C B@17 A@12 D C@3 B@16 C>".pickRestart({
  A: "~@5 x ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~@4", D: "~@3 x ~@4",
})).gain(0.74)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@24 A ~@4 A ~@7 A ~@7 A ~@24 A ~@7 A ~@7 A ~@3 B ~@3 B ~@7 B ~@4 B ~@3
>`.pickRestart({
  A: "x", B: "~ x",
})).gain(0.74)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@8 B@11 C D@5 ~@13 A@16 B@7 C D@4 ~@13 A@12 E A@3 F ~@16>".pickRestart({
  A: "x!16", B: "x!8", C: "x!5 ~@3", D: "~@2 x!2 ~@12", E: "~@8 x!8", F: "x!8 ~@8",
})).gain(0.37)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@9 A@11 B C D C D E F@13 ~@16 A@7 B C D E@2 F@13 ~@16 G F@15 H>".pickRestart({
// … 8 more lines

More by Milli Vanilli