Strudelify

I'll Make Love To You

Boyz II Men

KeyD majorTempo48 bpm
0:00/0:00
// I'll Make Love To You — Boyz II Men
// 48 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 50 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(48/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 · "A.PIANO 3"
const piano = note(`<
  A B A C D E F G H I J K L M N O P D Q R S T U V W L M N O P X@3 Y Z M N O AA M N O P AB M N O P AC ~
>`.pickRestart({
  A: "a3 ~ f#4@4 d4 ~@3 d3 ~, [d3,f#3,d4]@6 [b2,a3,f#4]@5 ~, ~@2 a3@9 ~@3 f#3@4 f#3@4 ~@2, ~@8 c#4@3 ~", // D B7
  B: "[b3,e4]@2 ~@8 b4 ~ f#4@2 a3@4 e4@2 a3@4, e2@8 g4@4 a4@5 ~ a4@6, g3 ~ g3@9 ~ [a2,d5]@12, ~ b3@2 ~@3, ~ d4 ~@2", // E5 D5
  C: "~ e4 ~ f#4!2 g4 e4!2 ~@2 e5 ~, [e3,b4,d5,e5]@3 [d3,a4,d5]@3 [c3,b4,e5]@3 c5@2 ~, g4!2 ~ g4!2 ~", // E7 D5 Cmaj7
  D: "g3@3 ~@5 a3@2 g3@2 [b3,d4,a4] ~@5 [a3,d4] ~@5, d4 ~, a2@5 ~@7, b3 a4 ~@2, ~ g3 ~@4", // Bm7 D5
  E: "d4@9 ~@3 [a3,d4]@11 ~, a3@7 ~@17, f#3@5 ~@19", F: "~@6 b3@5 ~ e3@10 d3@2, [e3,a3]@11 ~ a3@12",
  G: "~@6 b3@5 ~ a3@12, [e3,a3]@11 ~ e3@6 ~@6", H: "[e3,g3]@11 ~ [g3,b3,e4]@11 ~",
  I: "[a3,d4]@6 ~@6 b3@6 ~@4 a3 ~, ~@3 a3@7 ~@2, ~@4 d4@7 ~", J: "a3@11 ~@13", K: "~@12 [a3,e4]@6 [a3,d4]@5 ~",
  L: "e3@2 [a3,c#4] e3 ~ e3 [e3,g3,b3,d4,f#4]@3 ~@3, ~@2 [b3,d4] ~@3", // A Em7 Bm
  M: "a3@2 ~@2 e4@4 c#4@2 d4 ~ [a3,d4]@2 ~@2 c#4@2 ~@2 [d3,c#4]@2 d4 ~, [d3,f#3]@6 [b2,f#4]@5 ~, d4 ~@2, ~ a3@3 ~@3 [f#3,a3]@2 f#3@2 ~, ~ f#4@2 ~@3", // D5 Dmaj7 D B5 F#m
  N: "[b3,e4]@2 ~@6 g4@2 f#4@2 f#4@2 a3@4 e4@2 c#4@2 d4 ~, e2@9 ~ b4 ~ a4@5 ~ a4@6, d4@3 d4@3 d4@4 ~@2, g3 ~ g3@9 ~ [a2,d5]@12, ~ b3@2 ~@2 a3", // E5 D5
  O: "a3@2 ~@2 e4@4 c#4@2 d4 ~ [a3,d4]@2 ~@2 c#4@2 d4@2 [d3,c#4]@2 d4@2, [d3,f#3]@6 [b2,f#4]@5 ~, d4@4 ~@3 f#3@2 f#3@2 ~, ~ a3@3 ~@3 a3@3 ~@2, ~ f#4@2 ~@3", // D5 Dmaj7 D B5
  P: "e4!2 ~ [f#4,d5,f#5] [f#4,d5] [g4,f#5] e4!2 ~@2 e5 ~, [e3,b4,d5,e5,g5]@3 [d3,d4,a4]@3 [c3,b4,e5]@3 c5@2 ~, g4!2 ~ [c4,g4] g4 ~", // D Gmaj7 Em7 D5 Cmaj7 C5
  Q: "[a3,d4]@3 f#3 a3 ~@6 d4, f#3@5 ~@5 f#3@8 f#3@5 ~, ~@3 [a3,d4]@2 a3", // D5
  R: "c#4@5 ~ b3@5 ~@11 d4 ~, a3@11 ~ [a3,e4]@12", S: "c#4@6 b3@5 ~ e4@6 d4@5 ~, a3@11 ~ a3@12",
  T: "[g3,b3]@2 [a3,c#4] [b3,d4]@3, e4@23 ~", // G A Bm
  U: "d4 ~ d4 ~@2 a3 ~ b3 ~@2 b3 a3, f#3@5 ~ f#3@4 ~@2, a3 ~ a3@6 d4@8 a3@4 ~@4, ~@3 f#4@8 ~, ~@9 d4@2 ~",
  V: "[a3,c#4,e4]@6 [a3,b3,e4]@5 ~ e4@6 d4@6, ~ a3", W: "c#4@6 b3@5 ~ e4@6 d4@5 ~, [a3,e4]@11 ~ a3@12",
  X: "[~@6 f#4@4 a3@2 d#4@8 f#4@2 d#4@2 ~@12 [a3,c#4]@8 ~@3 e3 f#4@6 a3@2 ~@2 a3 ~ f#3@4 ~@4 b3@2 f#3@2, f#3@5 ~ f#3@6 e3@11 ~ f#3@4 f#3@2 ~@2 f#3@2 ~@2, ~@2 a3@7 ~@3 b3@18 g3@6 ~@8 a3@10 ~@6 [b3,d#4]@6 ~@6, ~@4 c#4@7 ~@13 e4@8 b3@4 ~@10 c#4@8 [c#4,f#4]@6 ~@12, ~@34 e4@11 ~@21 d#4@5 ~]/3", // A B F#5
  Y: "[b3,e4,g4]@6 [a3,d4,f#4]@6 g3@8 c4@2 g3 ~, ~@12 e4@11 ~, ~@12 c4@7 ~@5", // Em D
  Z: "[b3,d4,g4]@5 ~ [b3,d4,g4]@15 ~@3, g3@5 ~", // G
  AA: "e4!2 ~ [f#4,d5,f#5] [f#4,d5] [g4,f#5] e4!2 ~ a3 ~ a3, [e3,b4,d5,e5,g5] [d3,d4,a4] [c3,b4,e5] [a4,d5], g4!2 ~ [c4,g4] g4 ~, ~@18 e4 ~ a2@4", // D Gmaj7 Em7 D5 Cmaj7 D5 C5
  AB: "g3@3 ~@3 [e3,a3]@2 [e3,a3]@2 g3@2 e3 ~ e3@2 [e3,d4] ~ [a3,d4]@2 e3 ~ [e3,a3,e4]@2, a2@10 a2@10 ~ a2@2 ~, [b3,d4]@6 [d4,a4]@6 [a3,d4]@4 a3@2 e3 ~@5, ~ g3 ~ a1@3", // A5 E7 D5 A5 Bm D5
  AC: "g3@3 ~ g3@4 ~@16, [a2,d4]@11 ~@13, b3@7 ~@17", // D5
})).s("gm_piano").gain(0.25)

// chords · piano · "A.PIANO 3" · soft notes
const piano_soft = note(`<
  A B A ~@2 C D E ~ F G H ~ A B A ~@3 I ~@6 A B A ~@6 A B A ~ A B A ~@2 A B A ~@3
>`.pickRestart({
  A: "~@11 f#3", B: "~@16 f#4 ~@5 e4@2", C: "~@8 a3@2 d4 ~ [f#3,b3]@11 ~, ~@6 f#3@5 ~@13", D: "c#4 ~@3",
  E: "c#4 ~@2 d3", F: "f#4@4 ~@6 b3 ~, ~@5 f#4@6 ~", G: "c#4@6 b3@5 ~ [a3,e4]@11 ~, e4@11 ~@13",
  H: "~ e4@3 ~@2 [a3,b3,e4]@5 ~@13", I: "d4@11 ~@13",
})).s("gm_piano").gain(0.15)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B C D E F G H I J K H L M N O P Q F G H I J K H L M N O P R S T U V M N O W M N O P X M N O P Y ~
>`.pickRestart({
  A: "d2@4 e2 f#2 b1@6", B: "e2@6 a1@3 e2 a2 a1", C: "d2@4 e2 f#2 b1@3 f#2 b2 b1", D: "e2@3 d2@3 c2@4 b1 a#1",
  E: "a1@6 a2 ~@2 a1 ~ c#2", F: "d2 b1", G: "g2@9 ~ g2@2 f#2@12", H: "g2@4 d3 g2 f#2@3 f2@3",
  I: "e2@5 ~ a2@6, ~@5 e3@7", J: "d2@5 f2 b1@6", K: "g1@4 d2 g1 f#1@6",
  L: "e2@6 e2 ~ b1@2 e1@2 a1@4 e2@2 a2 ~ a2@2 a1@2", M: "d2@8 f#1@2 a1@2 b1@9 ~ b1@2",
  N: "e2@8 b1@2 e2@2 a1 ~ a1 ~ a1@2 a2@2 e2@2 a1@2", O: "d2@7 ~ c#2@2 c2@2 b1@2 f#2@2 b2 ~ b2@2 f#2@2 b1@2",
  P: "e1@3 d2@3 c2@4 b1 a#1", Q: "a1@12 ~@2 [a#3,b3] ~ a#3 ~ a3 [f#3,g3,g#3] a1@4, ~@20 d#3 ~@3",
  R: "f#1@8 f#2@2 e2@2 d#2@7 ~ d#2 ~ d#2@2", S: "e2@7 ~ e2@2 e1@2 a1@4 a2@2 g1@2 g2@2 g1@2",
  T: "f#2@7 ~ f#2@2 e2@2 d#2@2 f#2@2 b2@2 c#3 ~ d#3@2 b2@2", U: "e1 d1 c1@2",
  V: "a1@2 a1@2 a1@2 a1@2 a1 ~ a1 ~ a1@2 a3@2 e3@2 a1@2 a1@2 a1 ~", W: "e1@3 d2@3 c2@3 a2 a1 a2",
  X: "a1!12 a2 a1 a2 a1!3 a2 a1 a2 a1!3", Y: "a1!5 ~@19",
})).s("gm_electric_bass_finger").gain(0.25)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A B A C D ~@3 E F G H I J K L M N ~@3 E F G H I J K L M ~@5 J K L M J K L M N J K L M O ~
>`.pickRestart({
  A: "d5@8 c#5@2 d5 ~ d5@8 c#5@2 d5 ~, a4@11 ~ a4@11 ~",
  B: "[g4,a4,d5]@7 ~ g4@2 b4@2 a4@5 ~@3 a3@3 ~, ~@12 [e4,d5]@11 ~, ~@18 a4@5 ~", // Gsus2 E7
  C: "[g4,b4,d5,e5]@6 ~@4 e5@2 [g4,b4]@7 ~@5, a4 ~@5 [f#4,a4,d5]@6 e5@4 ~@8", // Em7 G D
  D: "a3@4 a4@2 a3@2 a4@2 a3@2 [d4,d5] ~@5 [a3,d4] ~@5, [d4,b4,d5]@11 ~@13, g4 ~@7", // D D5 G
  E: "~@2 [a3,c#4] [b3,d4]@2 [c#4,e4]", F: "[a3,d4,f#4]@7 ~@5 d4@8 a3@2 d4@2, ~ f#4, ~@12 a3@7 ~@5",
  G: "c#4@6 b3@5 ~ e4@6 d4@5 ~, [a3,e4]@11 ~ a3@11 ~", H: "c#4@6 b3@4 ~@2 e4@6 d4@5 ~, [a3,e4]@11 ~ a3@11 ~",
  I: "[g3,b3]@4 [a3,c#4]@4 [b3,d4]@3 ~ [g3,b3,d4,f#4]@6 [g3,b3,d4,f#4]@6, ~@18 a4 ~@5", // G A Bm Gmaj7
  J: "~@8 [c#5,c#6]@2 d6 ~ d5@8 c#5@2 d5 ~, a4@19 ~@5, d5@11 ~ d6@10 ~@2", K: "d5@4 g5 f#5 d5@5 c#5",
  L: "d5@8 c#5@2 d5 ~ d5@8 c#5@2 d5@2", M: "e5@3 d5@3 [c5,e5]@2 ~@4", N: "a5 a4 a5 a4@2 ~@7", O: "a5 a4 a5 ~@9",
})).s("gm_epiano2").gain(0.14)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<A B@2 C D E@2 F G H I J K L@5 E@2 F G H I J K M@4 N@5 O@4 P@10 ~>".pickRestart({
  A: "[d3,d4] [b2,b3], [f#4,a4,d5]", B: "[[e3,e4,d5,g5,a5] [a2,a3,g4,d5] [d3,d4] [b2,b3], ~ a4@3, ~ f#4]/2",
  C: "[e3,e4,b4,e5,g5]@6 [d3,d4,a4,d5,f#5]@6 c3@8 ~ a#2@2 ~, ~ [c4,g4,c5,e5], ~@10 b2 ~", // Em D C
  D: "[a2,a3,e4,a4,d5]@11 ~ [a2,d5,a5,d6] ~@5 [a2,d4,a4,d5] ~@5", // Asus4 D5
  E: "[d4@6 b3@6 c#5@3 b4@3 ~@5 d4, a4, [f#4,d5]@12 e4@11 ~, ~@2 g3 f#3]/2", F: "c#5 b4 f#3 [f3,d4], a4, e4@3 ~, g3 ~",
  G: "[e4,g4,b4]@7 ~ [a4,c#5]@4 [b4,d5]@8 [c#5,e5]@4, e3 a3, ~@7 e4@7 ~@10", H: "d4 b3, [f#4,a4,d5]",
  I: "c#5 b4 ~ d4, [g3,e4,a4] [f#3,e4,a4]", J: "c#5 b4 f#3 [f3,d4], [g3,e4]@12 a4 ~@11, a4 ~@11 e4@12",
  K: "[g4,b4]@4 [g4,a4,c#5]@4 [b4,d5]@4 [g3,g4,b4,d5,f#5]@7 ~@5, [e3,e4] ~", // G A7 Bm Gmaj7 E
  L: "[[d4,d5]@2 [e4,e5] f#5 [a4,a5]@2 ~@4 [e4,e5] f#5 [e4,g4,g5] [a3,d4,f#4,f#5] [g3,c4,e4]@2 [a3,a4,a5]@2 ~@2, a3@2 ~ a3@3 ~@4, f#4@3 f#4@3 [d4,d5]@4 b3@3 ~@7, ~@2 b3@2 g4@4 f#4@3 f#4@2 ~ e5@4 ~@2]/5", // D E A E Em D C A …
  M: "[[d4,d5]@2 [e4,e5] f#5 [a4,a5]@2 ~@4 [e4,e5] f#5 [e4,g4,g5] [a3,d4,f#4,f#5] [g3,c4,e4,e5]@2, a3@2 ~ a3@3 ~@2, f#4@3 f#4@3 [d4,d5]@4 b3@3 ~@3, ~@2 b3@2 g4@4 f#4@3 f#4@2 ~@3]/4", // D E A E Em D C D
  N: "[[a3,c#4,c#5,f#5,a5,a6]@12 [d#4,b4,d#5,f#5,f#6]@12 [g3,e4,b4,e5,g5,g6]@12 [e3,a4,c#5,e5,e6]@12 [c#5,f#5,a5,a6]@12 [d#4,b4,d#5,f#5]@12 [e3,g3,e4]@6 [d2,f#3,a3,d4]@6 [c2,g3,e4]@12 ~@12 a1@11 ~, f#3 ~ f#3 ~ [a2,a3,d4,f#4,d5,a5,d6,a6], ~@12 b3@24 [a3,c#4]@24 b3@17 ~@7 b3@36, ~@6 f#6 ~@5]/5", // F#m B Em A F#m B Em D …
  O: "[[d4,d5]@2 [e4,e5] f#5 [a4,a5]@2 ~@4 [e4,e5] f#5 [e4,g4,g5] [a3,d4,f#4,f#5] [g3,c4,e4,e5] [a2,g3,b3,e4,a4,e5,a5], a3@2 ~ a3@3 ~@2, f#4@3 f#4@3 [d4,d5]@4 b3@3 ~@3, ~@2 b3@2 g4@4 f#4@3 f#4@2 ~@3]/4", // D E A E Em D C Em …
  P: "[[d4,d5]@2 [e4,e5] f#5 [a4,a5]@2 ~@4 [e4,e5] f#5 [e4,g4,g5] [a3,d4,f#4,f#5] [g3,c4,e4]@2 [a3,a4,a5,a6]@4, a3@2 ~ a3@3 ~@4, f#4@3 f#4@3 [d4,d5]@4 b3@3 ~@7, ~@2 b3@2 g4@4 f#4@3 f#4@2 ~ e5@6]/5", // D E A E Em D C A …
})).s("gm_string_ensemble_1").gain(0.14)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A B A C D ~@8 A B A C D ~@8 A B A C ~@5 A B A C A B A C D A B A C ~@2
>`.pickRestart({
  A: "~@6 [d4,f#4,a4,d5] ~@11 [d4,f#4,a4,d5] ~@5", B: "~@6 [e4,a4,d5] ~@11 [e4,a4,d5] ~@5",
  C: "~@6 [f#4,a4,d5] ~@11 [e4,g4,c5] ~@5", D: "~@6 [e4,a4,d5] ~@11 [d4,a4,d5] ~@5",
})).s("gm_electric_guitar_clean").gain(0.17).pan(0.4)

// other · french horn · "FR.HORN"
const french_horn = note("<A B A C D ~@8 E F E G H ~@8 E F E G ~ I J G K E F E L E F E G H E F E G H ~>".pickRestart({
  A: "~@2 a3@2 d4@2 e4@7 ~ a3@2 d4@2 e4@6", B: "a4@12 d4@6 e4@4 f#4 ~", C: "g4@4 f#4 g4 f#4@4 e4 d4 e4@11 ~",
  D: "[a3,a4]@13 ~@11", E: "d4@2 e4 f#4", F: "a4@2 d4 c#4", G: "g4 f#4 e4@2", H: "a4 ~",
  I: "~@2 g4 a4 b4@8 g4 a4 e4 d4 e4@8", J: "f#4!2", K: "~ d4, a4@23 ~", L: "g4 f#4 e4 a4",
})).s("gm_french_horn").gain(0.2)

// chords · brass section · "BRASS 1"
const brass_section = note("<~@3 A B ~@11 A B ~@7 C ~@3 D E F G H I ~@3 J ~@3 K L ~@3 K L ~>".pickRestart({
  A: "~@10 [b1,b2] [a#1,a#2]", B: "[a1,a2]@12 [a2,a3] ~@11",
  C: "[e4,g4,b4]@4 [e4,a4,c#5]@4 [e4,g4,b4,d5]@4 [g4,b4,d5,f#5]@7 ~@5", // Em A Em7 Gmaj7
  D: "[g4,g5]@4 [f#4,f#5] [g4,g5] [f#4,f#5]@4 [e4,e5] [d4,d5] [e4,e5]@6 [e4,e5]@2 [b1,b2,f#4,f#5]@2 [g4,g5]@2", // G F# G F# E D E B5 …
  E: "[c#4,e4,f#4,a4,c#5,e5,f#5,a5]@12 [b3,d#4,f#4,b4,d#5,f#5]@11 ~", F: "[g4,g5]@5 [f#4,f#5] [e4,e5]@6",
  G: "[a4,a5]@5 [g4,g5] [f#4,f#5]@4 ~@2", // A G F#
  H: "[b4,d5,b5,d6]@2 [a4,c#5,a5,c#6]@2 [b4,d5,b5,d6]@2 [c#5,e5,c#6,e6]@2 [b4,d5,b5,d6]@2 [c#5,e5,c#6,e6]@2 [d5,f#5,d6,f#6]@2 [c#5,e5,c#6,e6]@2 [d5,f#5,d6,f#6]@2 [e5,g5,e6,g6]@2 [d5,f#5,d6,f#6]@2 [e5,g5,e6,g6] ~", // Bm A Bm C#m Bm C#m D C#m …
  I: "[a4,b4,d5,e5,a5,b5,d6,e6]@12 [a4,b4,d5,e5,a5,b5,d6,e6] ~@5 [a4,b4,d5,e5,a5,b5,d6,e6] ~ [g4,a4,b4,d5,e5,g5,a5,b5,d6,e6] ~ [g4,a4,b4,d5,g5,a5,b5,d6] ~", // Asus4 Em7 G
  J: "[g3,g4] [f#3,f#4] [e3,e4] [a3,a4]", K: "[g3,g4]@3 [f#3,f#4]@3 [e3,e4]@4 [b2,b3] [a#2,a#3]", L: "[a2,a3]",
})).s("gm_brass_section").gain(0.09)

// drums · kick
const kick = s("bd").struct(`<
  A@3 B@2 A@3 B A@3 C A@3 B@2 A@3 B A@3 C A@3 B A@3 B@2 A@3 B A@3 B@2 A@3 B D ~
>`.pickRestart({
  A: "x ~@5 x ~@4 x", B: "x!2", C: "x ~@11 x ~@4 x ~@6", D: "x",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!4 [~ x ~@2] [~ x ~ x]!8 ~@17 [~ x ~ x]!4 [~ x ~@2] ~@15>").gain(0.15)

// drums · snare
const snare = s("sd").struct("<~@12 [~@3 x] [~ x ~ x]!4 [~ x!2 ~] [~ x ~ x]!30 ~@2>").gain(0.5)

// drums · clap
const clap = s("cp").struct(`<
  A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~@2 A ~ A ~@3
>`.pickRestart({
  A: "~@3 x",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@12 A ~@12 B ~@3 C ~ A ~@2 A ~@3 A ~@3 A D ~@3 A ~@2>".pickRestart({
  A: "~@10 x!2", B: "~@16 x!2 ~@2 x ~ x ~", C: "~@20 x!4", D: "~@21 x!3",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D E A B C D A B C D A B C D E A B C D A B C D A B C D ~@5 A B C D A B C D E A B C D F ~
>`.pickRestart({
  A: "x!3 ~ x ~ x ~ x ~ x ~ x ~ x!2 ~@2 x ~ x ~ x ~", B: "x!3 ~ x ~ x ~@3 x ~ x ~ x!2 ~@2 x ~@3 x ~",
  C: "x!3 ~ x ~ x ~ x ~ x ~ x ~ x!2 ~@2 x ~@3 x ~", D: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~@2 x ~ x ~@3",
  E: "x!7 ~ x!2 ~@2", F: "x!3 ~@9",
})).gain(0.25)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A B ~ C ~ A B ~@2 A B ~@2 A B ~ C ~ A B ~@2 A B ~@2 A B ~@7 A B ~@2 A B ~ C ~ A B ~@3
>`.pickRestart({
  A: "~@2 x ~@2 x", B: "~@5 x", C: "~@7 x ~@2 x!2",
})).gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@12 A ~@12 B ~@3 C ~ A ~@2 A ~@3 A ~@3 A@2 ~@3 A ~@2>".pickRestart({
  A: "~@5 x", B: "~@15 x ~@4 x ~@3", C: "~@20 x!2 ~@2",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@3 B ~ A@3 B A@3 B A@3 B ~ A@3 B A@3 B A@3 B ~@5 A@3 B A@3 B ~ A@3 B ~@2
>`.pickRestart({
  A: "~@2 x", B: "~@8 x ~@2 x",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@13 A ~@11 B A ~@2 C A ~ A C D A ~@2 E A ~@3 A@2 ~@3 A ~>".pickRestart({
  A: "x", B: "~ x", C: "x!2", D: "x ~ x!2", E: "~@3 x",
})).gain(0.35)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@42 [x!2] ~@4 [x!2] ~@2>").gain(0.2)

// drums · ride
const ride = s("rd").struct(`<
  A ~ A ~ A@2 ~ A ~ A ~@5 A B ~ A ~ A ~ A ~@5 A B C D E D@2 ~@2 A B ~@2 A B ~@3 A B ~@2
>`.pickRestart({
  A: "x", B: "x!3 ~", C: "x ~ x!10", D: "x!12", E: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~",
})).gain(0.35)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@30 [~@2 x ~@12 x ~@8] [~@15 x ~ x ~@6] [~@3 x ~@19 x] ~@17>").gain(0.2)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A B ~ C ~ A B ~ C A B ~ C A B ~ C ~ A B ~ C A B ~ C A B ~ C D E F G H A B ~ C A B ~ C ~ A B ~ C ~@2
>`.pickRestart({
  A: "~@11 x", B: "x!2 ~@10", C: "x!4 ~@17 x ~@2", D: "x ~ x ~ x!3 ~ x ~ x!3 ~ x ~ x!3 ~ x!4",
  E: "x ~ x ~ x!3 ~ x ~ x!3 ~ x ~ x!3 ~ x ~ x ~", F: "x ~ x ~ x!3 ~ x ~ x!3 ~ x!5 ~ x ~ x ~",
  G: "x ~ x ~ x!3 ~ x!3 ~ x ~ x ~ x!3 ~ x ~ x ~", H: "x ~ x!3 ~ x ~ x!5 ~ x!3 ~ x ~ x!4",
// … 26 more lines

More by Boyz II Men