Strudelify

Don't Let Go (Love)

En Vogue

KeyF minorTempo78 bpm
0:00/0:00
// Don't Let Go (Love) — En Vogue
// 78 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 79 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(78/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(`<
  ~ A B C D E F G H I J K L E M N O E M N P E Q N R E S G H I T K L E M N O E M E P E Q N R E S G H I T U V W M N O E M
  E X E Y Z AA AB AC AD V E AE G AF I T U AG AH@2
>`.pickRestart({
  A: "f1@8 db2@7 ab1", B: "bb1@9 ~ [bb1,c2] ~ bb1 ~ ab1@2", C: "f1 ab1, ~@8 g1 ~@7", D: "eb1@7 ~",
  E: "f1@5 ab1 ~@2 db2@7 ab1", F: "bb1@9 c1 c2@2 bb1@2 ab1@2", G: "f1@5 ab1 ~@2 db2@5 bb1 g2 f2",
  H: "eb2@9 bb1 eb2@3 bb1 eb2@2", I: "f1@5 ab1@3 db2@7 ab1", J: "bb1@9 c1 bb1 c2 bb1@2 ab1@2",
  K: "f1@5 ab1 ~@2 db2@7 bb1", L: "eb2!3 ~ eb2@3 bb1 eb2!3 ~ e2@4", M: "bb1@9 ~@2 c1 eb1@4",
  N: "f1@5 ab1 ~@2 db2@6 ~ ab1", O: "bb1@9 ~@3 g2 ab2 g2@2", P: "bb1@8 bb2!2 ~ bb2 f2 c2 ~ ab1",
  Q: "bb1@9 eb1 bb1 c2@2 bb1 eb1@2", R: "bb1@9 f1 b1@6", S: "bb1@6 f2 g2 c3@2 bb2 ~ c3@2 bb2@2, ~@8 bb2 ~@3 bb2 ~@3",
  T: "bb1@8 bb2!2 ~ bb2 f2!2 c2 ~", U: "f1@5 ab1 ~@2 db2@6 g2 f2",
  V: "eb2@3 bb2 eb3 bb2 f3@4 eb3 bb2 eb3 bb2 eb3 eb2, ~@6 eb3 ~@9", W: "~@5 ab1 ~@2 db2@7 ab1",
  X: "bb1@5 ~ f1@2 ~@2 f1@3 ~ eb1 e1, ~@6 eb2 ~@3 eb2 ~@5", Y: "bb1@9 ~ eb2 e2 f2@2 ~ c2",
  Z: "f1@5 ab1 ~@2 db2@5 ~@2 f2", AA: "bb1@4 eb2 bb1 eb2 ~ eb2 bb1 eb2 ~ eb2 bb1 eb2@2", AB: "f1@5 ab1@3 db2@6 f2 e2",
  AC: "eb2@6 ~ eb2!2 f2 db2 eb2 c2 db2 bb1 c2", AD: "f1@4 ~ ab1@2 ~ db2@6 g2 ~", AE: "bb1@6 ~@2 bb1 ~ c2 ~ bb1@2 ab1@2",
  AF: "eb2@8 bb2!2 ~ bb2 f2!2 c2@2", AG: "eb2!2 eb2@4 ~ eb2 eb1!4 eb1@2 e1@2", AH: "[f1@15 ~]/2",
})).s("gm_fretless_bass").gain(0.52)

// other · distortion guitar · "Channel 3"
const distortion_guitar = note("<A@8 B@5 ~@11 A@8 C ~@11 A@8 C ~@7 A@8 C D@7 E@3>".pickRestart({
  A: "[~@12 [bb3,c4] ~ c4@4 bb3 ~ [f3,c7] ~ bb3@4 ab3 ~ f3 ~ bb3@4 ab3 ~ f3 ~ g3@4 ~@2 [bb3,c4] ~ c4@4 bb3 ~ [f3,c7] ~ bb3@4 ab3 ~ f3 ~ bb3@4 ab3 ~ f3 ~ g3@5 ~ [bb3,c4] ~ c4@4 bb3 ~ [f3,c7] ~ bb3@4 ab3 ~ f3 ~ bb3@4 ab3 ~ f3 ~ g3@4 ~@2 [bb3,c4] ~ c4@4 bb3 ~ [f3,c7] ~ bb3@4 ab3 ~ f3 ~ bb3@2, ~@14 b3 ~@7 a3 ~@7 a3 ~@7 f3 ~@7 b3 ~@7 a3 ~@7 a3 ~@7 f3 ~@7 b3 ~@7 a3 ~@7 a3 ~@7 f3 ~@7 b3 ~@7 a3 ~@7 a3 ~]/8", // Bbsus2 F5 Bbsus2 F5 Bbsus2 F5 Bbsus2 F5
  B: "[~@2 ab3 ~ f3 ~ g3@5 ~ [bb3,c4] ~ c4@4 bb3 ~ [f3,c7] ~ bb3@4 ab3 ~ f3 ~ bb3@4 ab3 ~ f3 ~ g3@4 ~@2 [bb3,c4] ~ c4@4 bb3 ~ [f3,c7] ~ bb3@4 ab3 ~ f3 ~ bb3@4 ab3 ~ f3 ~ g3@8 ~@2, ~@6 f3 ~@7 b3 ~@7 a3 ~@7 a3 ~@7 f3 ~@7 b3 ~@7 a3 ~@7 a3 ~@7 f3 ~@9]/5", // Bbsus2 F5 Bbsus2 F5
  C: "~@2 ab3 ~ f3 ~ g3@8 ~@2, ~@6 f3 ~@9",
  D: "[~@2 bb3 ~ [f3,c7] ~ bb3@4 ab3 ~ f3 ~ bb3@4 ab3 ~ f3 ~ g3@4 ~@2 [bb3,c4] ~ c4@4 bb3 ~ [f3,c7] ~ bb3@4 ab3 ~ f3 ~ bb3@4 ab3 ~ f3 ~ g3@5 ~ [bb3,c4] ~ c4@4 bb3 ~ [f3,c7] ~ bb3@4 ab3 ~ f3 ~ bb3@4 ab3 ~ f3 ~ g3@4 ~@2 [bb3,c4] ~ c4@4 bb3 ~ [f3,c7] ~ bb3@4 ab3 ~ f3 ~ bb3@2, ~@6 a3 ~@7 a3 ~@7 f3 ~@7 b3 ~@7 a3 ~@7 a3 ~@7 f3 ~@7 b3 ~@7 a3 ~@7 a3 ~@7 f3 ~@7 b3 ~@7 a3 ~@7 a3 ~]/7", // F5 Bbsus2 F5 Bbsus2 F5 Bbsus2 F5
  E: "[~@2 ab3 ~ f3 ~ f3 ~@5 [bb2,eb3]@2 ~@2 f4@30 ~@2, ~@6 g3@8 [c3,f3]@31 ~@3]/3", // Eb5 F5
})).s("gm_distortion_guitar").gain(0.41).pan(0.6)

// other · acoustic guitar nylon · "Channel 4"
const acoustic_guitar_nylon = note(`<
  ~@13 A B C D E F G H I J I K ~@8 L M N O P Q@2 R I S T U ~@8 V@3 W X Y@2 Z ~@18
>`.pickRestart({
  A: "~@2 f4 ~ f4@2 g4@2 ab4@2 f4 ~ f4 ~ f4 ~", B: "c4 eb4 f4 ~ bb3!3 a3", C: "~@2 f4 ~ f4@2 g4@2 ab4 ~ f4@2 f4 ~ g4@2",
  D: "ab4 ~ f4 ~ f4@2 ~@2 f4 eb4 f4@3 ~ g4@2", E: "~@2 bb4 ~ bb4 ~ bb4@2 ab4@2 f4!2 ~@2 f4@2",
  F: "ab4@2 bb4@2 c5 ~ ab4@2 f4@5 ~@3", G: "~@2 bb4 ~ bb4 ~ bb4 ~ ab4@2 f4 f4@2 ~ f4!2",
  H: "ab4 ~ bb4@2 c5 ~ ab4@2 ~@2 ab4@2 g4@2 f4 ~, ~@2 f4 ~", I: "ab4@2 ~ g4 ~ f4 ~@2 ab4@3 g4 ~ f4 ~@2",
  J: "ab4@3 g4 ~ f4@2 ~ f4 c4 eb4 f4 c4 eb4 f4@2", K: "bb4@3 f4 ~ f4 c4@3 ~@7",
  L: "~@2 f4 ~ f4@2 g4 ~ ab4@2 f4 ~ f4 ~ f4 ~", M: "c4@2 eb4@2 f4@2 ~@2 bb3 ~ bb3 ~ bb3 ~ a3@2",
  N: "~@2 f4 ~ f4@2 g4 ~ g4@2 f4 ~ f4@2 g4 ~", O: "g4@2 f4 ~ f4 ~ f4 ~@3 f4 ~ bb4@2 ab4@2",
  P: "~@2 bb4 ~ bb4 ~ bb4 ~ ab4@2 g4 ~ g4 f4 ab4@2",
  Q: "[~ g4@4 ~ f4!2 ab4 ~ bb4 ~ c5 ~ bb4 f4@2 ~@5 bb4 ~ ab4@2 g4@2 f4 ~ ab4@2]/2", R: "~@2 g4@6 ~@2 ab4@2 g4@2 f4 ~",
  S: "ab4@3 g4 ~ f4@2 ~ f4 c4 eb4 f4 ~ f4@2 ~", T: "ab4@3 g4 ~ f4 ~@2 c5 ~ bb4 ~ ab4 ~ f4 ~",
  U: "ab4@3 g4@2 ~ f4@2 ~@8",
  V: "[~@6 f4!2 bb4@2 bb4 ab4 ~ f4 f4@4 eb4 ~@4 f4 bb4 ~ bb4 ab4 ~ c5 ~ c5@2 bb4 ab4 ~@2 f4!3 bb4@2 bb4 ab4 ~ f4 f4@2]/3",
  W: "~ eb4 ~@4 eb5 ~ bb4@2 ab4 bb4@2 ab4 bb4@2", X: "f4@3 ~@3 f4!2 bb4@2 bb4 ab4 ~ f4 f4@2, ab4 ~@15",
  Y: "[~ [c4,eb4] ~@4 f4!2 bb4 ~ bb4 ab4 ~ c5 ~ c5@2 bb4 ab4@2 ~ f4!3 f5@2 ab4 bb4@2 ab4 bb4 ab4]/2", // Cm
  Z: "b4 bb4 ab4 f4@3 ~@10",
})).s("gm_acoustic_guitar_nylon").gain(0.33)

// other · acoustic guitar nylon · "Channel 4" · soft notes
const acoustic_guitar_nylon_2 = note(`<
  ~@4 A B@2 C D E F E ~@12 A B@2 C D E F E ~@6 G ~@5 A B@2 C D E F E ~@8 A B@2 C D E F E A B@2 C D E F E ~@3
>`.pickRestart({
  A: "~@10 c5 bb4 ab4@2 c5 ~", B: "[c5@3 ~ f4 ~ bb4@4 ab4@2 f4 ~ bb4@6 ~@6 c5 bb4 ab4@2 c5 ~]/2",
  C: "c5@2 ~ f4@2 g4 ab4 g4", D: "~@5 c4 f4 g4 ab4@2 g4@2 f4@2 eb4@2", E: "c4@2 ~@4 c5@3 ~@3 c5 ~ c5@2",
  F: "~@6 f4 g4 ab4 ~ g4 ~ f4@2 eb4@2", G: "~@14 ab4 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.07)

// chords · string ensemble 2 · "Channel 7"
const string_ensemble_2 = note(`<
  ~ A B A B A B A B A B A B ~@12 A B A B A B A B ~@12 A B A B A B A B ~@8 A B A B A B A B A B A B A B A B C@2
>`.pickRestart({
  A: "f4 db5", B: "bb4", C: "[f4@15 ~]/2",
})).s("gm_string_ensemble_2").gain(0.1).pan(0.4)

// chords · string ensemble 2 · "Channel 7" · soft notes
const string_ensemble_2_soft = note(`<
  ~ A B A B A C A C A B A B ~@12 A B A B A B A B ~@12 A B A B A B A B ~@8 A B A B A B A B A B A B A B A B D@2
>`.pickRestart({
  A: "~ ab4, c4@5 ~@3", B: "f4", C: "eb4", D: "[c4@15 ~]/2",
})).s("gm_string_ensemble_2").gain(0.07).pan(0.4)

// other · timpani · "Channel 9"
const timpani = note("<~@8 A B ~@6 A B ~@6 A B ~@10 A B ~@6 A ~@7 A B ~@2 A B ~@2 A B ~@6 A B ~@6 A B ~>".pickRestart({
  A: "~@14 f2!2", B: "f2 ~@7",
})).s("gm_timpani").gain(0.48)

// chords · piano · "Channel 11"
const piano = note(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C A B A B A B
  A D A B A B A B A B A B A B A B A C E@2
>`.pickRestart({
  A: "[f3,a3,c4,f4] [db3,ab3,db4]", B: "[eb3,g3,bb3,eb4]", C: "~@5 [f4,bb4]@3, [eb3,g3,bb3,eb4]",
  D: "eb4@3 eb4, [eb3,g3,bb3]", E: "[[f3,a3,c4,f4]@15 ~]/2",
})).s("gm_piano").gain(0.44)

// chords · piano · "Channel 11" · soft notes
const piano_soft = note(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B@2
>`.pickRestart({
  A: "c3 f3", B: "[c3@15 ~]/2",
})).s("gm_piano").gain(0.24)

// chords · piano · "Channel 12"
const piano_2 = note(`<
  ~ A B A B A C A C A B A B A C A B A C A C A C A B A B A C A C A C A C A B A C A C A B A B A C A C A C A C A C A C A C
  A B A C A B A C A B A C A C A B A C ~@2
>`.pickRestart({
  A: "~@2 [a3,c4] ~ [a3,c4] ~ [a3,c4]@3 ~ [f3,ab3] ~ [f3,ab3] ~ [f3,ab3]@2", // Am Fm
  B: "~@2 [g3,bb3] ~ [g3,bb3] ~ [g3,bb3]@4 [g3,bb3] ~ [g3,bb3] ~ [g3,bb3]@2", // Gm
  C: "~@2 [g3,bb3] ~ [g3,bb3] ~ [g3,bb3]@3 ~ [g3,bb3] ~ [g3,bb3] ~ [g3,bb3]@2", // Gm
})).s("gm_piano").gain(0.05).pan(0.1)

// other · acoustic guitar nylon · "Channel 13"
const acoustic_guitar_nylon_3 = note(`<
  ~@25 A@2 B C D E F G ~@11 H I@2 J K ~ L@2 ~ M N M N M N M O P Q@2 R S T U V ~ W@2 X@4 ~@3
>`.pickRestart({
  A: "[~@10 c5 ~ c5 ~ bb4@6 c5@3 ~@9]/2", B: "~@2 eb4!2 f4 eb4 f4@2 ab4@5 ~@3", C: "~@2 eb4 f4 ab4 bb4 ab4@3 ~@7",
  D: "~@6 ab4@3 ~@3 ab4 ~ ab4@2", E: "g4 ~@3", F: "~@6 ab4@3 ~@3 bb4 ~ g4 f4", G: "eb4@5 ~@11",
  H: "~@3 c5@2 bb4 c5 eb5 f5 f5@3 ab5 f5 [c5,eb5] bb4", I: "[ab4@4 ~@6 c5 ~ c5@2 bb4@4 c5@4 ~@10]/2",
  J: "~@2 eb4!2 f4 eb4 f4 ab4@4 ~@5", K: "~@2 bb4@4 ab4@3 f4@3 ~@4",
  L: "[~@2 c5@4 eb5 ~ c5@2 bb4 ab4 f4 ~@2 f4@2 ab4 bb4 b4 bb4 [f4,ab4] ~@10]/2", // Fm
  M: "~@5 f4@4 ~@4 ab4@3, ~ c3@7 ~ db3@7, ~@2 f3@6 ~@3 eb4@5, ~@3 a3@5 ~@2 db4@6",
  N: "~@6 eb4@4 ~@3 bb3 eb4@2, ~ bb3@3 ~ bb3@4 ~@2 bb3@2 ~@3, ~@2 eb3@7 ~ eb3@6, ~@6 eb4 ~",
  O: "~@2 eb3@7 ~@7, ~ bb3@3 ~@12", P: "~@6 c5 ~ c5 bb4 c5 bb4 c5 ab4 f4@2",
  Q: "[bb4!3 ab4@2 f4 bb4!3 ab4@2 f4 bb4!3 c5@2 bb4 [f4,ab4] bb4 ab4@4 ~ f4 eb4 c4@3 ~@2]/2", // Fm
  R: "~@3 f4 ab4 [ab4,bb4]@2 ~@2 eb4 ~ f4 bb4@2 ab4@2, ~ eb4 ~@6", S: "~@2 c5 bb4 c5 bb4 c5 bb4 c5 eb5@5 c5 bb4",
  T: "c5 db5 [bb4,c5] c5@2 [bb4,c5] ~ bb4 ab4@2 bb4@4 ~@2, ~@3 ab4 ~@4", // Bbsus2
  U: "~@2 c5@3 bb4 ab4 ~ bb4 [f4,ab4] ~ c5@3 bb4 ab4", V: "bb4 ab4 f4@4 ~@10",
  W: "[c5@3 ab4 bb4@3 ab4 g4@2 c4@2 ab4@2 ~@6 f4@2 c4@7 ~@3, ~@14 g4@9 ~@9]/2",
  X: "[~@6 f4 g4 ab4@2 g4 f4@2 c5@2 c5@2 bb4 ab4@3 bb4 c5 c5@2 bb4 ab4@3 bb4 c5 c5@3 ~@10 bb4 ~ bb4@4 ab4@2 f4@7 ~@5]/4",
})).s("gm_acoustic_guitar_nylon").gain(0.2).pan(0.2)

// chords · piano · "Channel 16"
const piano_3 = note(`<
  ~@4 A@3 B C D@2 E F ~@8 G H G I@3 B C D@2 E F ~@7 J G H G I@3 B C D@2 E F K@2 L@2 ~@3 A@3 B C D@2 E M@3 B C D@2 E F
  ~@2
>`.pickRestart({
  A: "[~@10 c5 bb4 ab4@2 ~@2 f4@4 f4@2 bb4@4 ab4@2 f4@2 bb4@12 c5 bb4 ab4@2 c5@2, ~@7 c5@3 ~ eb4@4 c4@8 ~]/3",
  B: "[ab4,c5]@3 [f4,g4]@2 g4 ab4 g4, ~@3 bb4@4 ~", C: "~ f4 eb4@3 c4 f4 g4 ab4@2 g4@2 f4@2 eb4@2",
  D: "[[c4,f4]@2 f4@4 eb4@8 ~@2 [eb4,g4,bb4]@6 f4 g4 ab4@2 g4@2 f4@2 eb4@2, ~@3 [f4,ab4,c5]@5 ~@8, ~@7 c4@3 ~@6]/2", // F5 Eb Fm
  E: "[c4,f4] f4@2 [f4,ab4,c5]@5, ab4@3 ~@5", F: "[eb4,g4] ~, bb4",
  G: "[f4,ab4,c5]@3 [eb4,g4,bb4]@2 [c4,f4,ab4]@3 [f4,ab4,c5]@3 [eb4,g4,bb4]@2 [c4,f4,ab4]@3", // Fm Eb Fm Eb Fm
  H: "[f4,ab4,c5]@3 [eb4,g4,bb4]@2 [c4,f4,ab4]@3 ~@8", // Fm Eb Fm
  I: "[[f4,ab4,c5]@3 [eb4,g4,bb4]@2 [c4,f4,ab4]@5 c5 bb4 ab4@2 ~@2 f4@4 f4@2 bb4@4 ab4@2 f4@2 bb4@12 c5 bb4 ab4@2 c5@2, ~@7 c5@3 ~ eb4@4 c4@8 ~]/3", // Fm Eb Fm
  J: "~@5 eb5 bb4 ab4", K: "[~@6 [c4,ab4]@2 [f4,db5]@3 [eb4,c5]@2 [c4,ab4]@5 [bb3,g4]@3 ~@11]/2",
  L: "[~@8 [f4,db5]@3 [eb4,c5]@2 [c4,ab4]@5 [bb3,g4]@3 ~@11]/2", // Db Cm Fm Eb
  M: "[[eb4,g4]@8 ~@2 c5 ~ ab4@2 ~@2 f4@4 f4@2 bb4@4 ab4@2 f4@2 bb4@12 c5 bb4 ab4@2 c5@2, bb4@10 ~ bb4@5 ~@6 eb4@8 c4@16 ~@2, ~@7 c5@3 ~@14]/3", // Eb
})).s("gm_piano").gain(0.05)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B C D C B C D C B C D C B C D C B C D@2 B C D C B C D C B C D C B C D C B C D C B C D C B C D C B C D C B C D E
  B C D F B C D G B C D C B C D H I ~
>`.pickRestart({
  A: "~@11 x ~@4", B: "x ~@7 x ~ x ~@4 x", C: "x ~@3 x!2 ~ x", D: "x ~@3 x!2 ~@2", E: "x ~@4 x!2 ~@2 x!2 ~@3 x ~",
  F: "x ~@7 x!3 ~@2 x!2 ~", G: "x ~@4 x!2 ~ x ~@3 x ~@3", H: "x!3 ~@2 x!2 ~@2 x!3 ~@2 x ~", I: "x",
})).gain(0.58)

// drums · snare
const snare = s("sd").struct("<~@4 A B@55 C B@7 C B@7 C ~@2>".pickRestart({
  A: "~ x ~@2 x ~@3", B: "~ x ~ x", C: "~ x!3",
})).gain(0.65)

// drums · low tom
const low_tom = s("lt").struct("<~@12 A ~@7 A ~@3 B ~@7 A ~@7 A ~@3 B ~@7 A ~@7 C ~@7 D ~@7 C ~@2>".pickRestart({
  A: "~@5 x ~@2", B: "~@14 x!2", C: "~@7 x", D: "~@11 x ~@3 x",
})).gain(0.51)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<[~@11 x ~@4] ~@3 [~@3 x ~@4]!56 ~ [~@3 x ~@4]!15 ~@3>").gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A ~@19 B ~@19 B ~@15 C ~@7 D ~@7 C ~@2>".pickRestart({
  A: "~@10 x ~ x!3 ~", B: "~@13 x ~@2", C: "~@13 x ~ x", D: "~@9 x!2 ~@2 x!2 ~",
})).gain(0.58)

// drums · open hat
const open_hat = s("oh").struct("<A ~@11 B ~@7 B ~@3 C ~@7 B ~@7 B ~@3 C ~@7 B ~@7 D ~@7 E ~@7 D ~@2>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@5 x ~@2", D: "~@3 x ~ x ~@2", E: "~@4 x ~@2 x",
})).gain(0.44)

// drums · high tom
const high_tom = s("ht").struct("<~@4 A B@55 C B@7 C B@7 C ~@2>".pickRestart({
  A: "~@2 x ~@2 x ~@2 x ~@7", B: "~ x ~ x", C: "~ x!3",
})).gain(0.51)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~ A@3 ~ A ~ A ~ A ~ A ~@7 A ~@3 A ~ A ~ A ~ A ~ A ~@7 A ~@3 A ~ A ~ A ~ A ~ A ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B
// … 18 more lines

More by En Vogue