Strudelify
Hold On cover art

1990 · Wilson Phillips

Hold On

Wilson Phillips

KeyF majorTempo108 bpm
0:00/0:00
// Hold On — Wilson Phillips
// 108 bpm, 4/4, key F major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 97 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(108/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(`<
  A@2 B@2 C@2 D@2 E@2 F G H@2 I@2 J K@2 L M N@5 O P Q R@2 S@2 C@2 D@2 E@2 F G H@2 I@2 J K@2 L M N@5 O P T U@2 V@2 W@2
  X@2 K@2 L M Y@3 Z@2 AA AB AC AD@3 AE@2 AF AG AF AG AF AG AF AG AF AG AF ~@3
>`.pickRestart({
  A: "[[c4,f4,a4,c5]@3 [c4,e4,g4,c5]@4 d4@2 d4@2 [d4,f4,bb4,c5] [d4,f4,bb4,c5]@2 [c4,e4,g4,c5]@2, f3, ~@7 [f4,bb4,c5]@4 ~@5]/2", // F C Bb C Fsus4
  B: "[[c4,f4,a4,c5]@3 c5@2 c5 c4 ~@2 bb5 a5 f5 ~@2 a4 f4, f3, ~@3 [e4,g4]@4 d4@9, ~@3 c4@3 ~ f4@6 bb4@3, ~@7 [bb4,c5]@5 c5@4]/2", // F Em Bbsus2
  C: "[[f2,d4]@2 [f2,f4]@2 [f2,f4]@2 [f2,d4]@2 f2@2 f2@2 f2@2 c3 d3 f2@2 f2@2 f2@2 f2@2 f3@2 [f3,c4,f4,a4]@2 [e3,c4,f4,a4]@2 [e3,c4,f4,a4]@2, [f3,a3,c4]@3 [e3,g3]@4 [f3,bb3,d4]@5 ~@4, ~@4 c4@3 ~@9]/2", // Dm F Dm F Fmaj7 F Em Bb
  D: "[[d3,c4,f4,a4]@2 d3!2 [d3,a3,d4,f4]@2 [d3,a3,d4,f4]@2 [d3,f3,a3,d4]@2 d3@2 a2@2 bb2@2 bb2@2 bb2@2 bb2@2 bb2@2 c3!2 g2@2 a2@2 c3@2, ~ [a3,d4,f4] ~@3 [f3,a3,d4]@2 [f3,bb3,d4]@5 [f3,bb3]@4, ~@6 d4 c4]/2", // Dm7 Dm Bb Bb5
  E: "[[f2,d4]@2 [f2,f4]@2 [f2,f4]@2 [f2,d4]@2 ~ f4 [f2,f4]@2 [f2,f4]@2 f2@2 c3 [d3,c4] f3@2 ~@2 f2@2 f2@2 f2@2 [f2,c4,e4,g4]@2 [f2,c4]@2, [f3,a3,c4]@3 [e3,g3]@4 bb3@5 [bb3,d4,f4]@2 ~@2, ~@4 f2 ~@2 [f3,d4]@2 c4@3 ~@4, ~@5 f3 ~@2]/2", // Dm F Dm F D7 C F5 F …
  F: "[f2,a4]@2 [f2,a4]@2 [f2,a4]@2 [f2,a4]@2 [f2,a4]@2 [f2,a4]@2 [f2,a4]@2 f2 c3, [c4,f4]@3 [c4,e4,g4]@4 [bb3,d4,f4,a4]", // F F5 C Bbmaj7
  G: "d3 f3 f4 ~ f2@2 f2!2 d3 c3 a2@2 [c3,c4,e4,g4]@2 a2 c3, c5 bb3@3 [bb3,d4,f4]@2 ~ c4, ~ d4@2 d4 ~@4, ~ f2 ~@6, ~@3 f4@3 ~@10", // C Bb
  H: "[[f2,c4,f4,a4] [f2,c4]!2 f2!2 [f2,g4] [f2,a4] f2 f2!4 f3!2 e3!2, ~@3 [c4,e4]@4 bb3@5 [bb3,d4]@2 [g3,c4,e4]@2, ~@3 g4@2 ~@2 [d4,g4]@2 d4@3 ~@4]/2", // F F5 Fsus2 F C Bb C G5
  I: "[[d3,f4,a4]@2 d4!2 f4 d4 [d3,f4]@2 [d3,d4]@2 [a2,c4]@2 [a2,c4]@2 [bb2,bb3]@2 bb2@2 bb2@2 bb2@2 bb2 a2 [bb2,d4]@2 [bb2,c4]@2 bb2 c3 ~ c3, a3@5 ~@2 [d4,f4]@5 ~@2 a3 ~, ~ d3!2 ~@2 [f3,g3]@2 ~@5 f3@3 [f3,bb3]]/2", // Dm D Am Bb Bbsus2 Dm Fsus2 Bb5
  J: "c3!5 [c3,a4] [c3,f4] [c3,d4], [f3,bb3,c4]@8 ~@2 [bb3,d4]@5 ~", // F F5 Csus2 Fsus4 Bb
  K: "[f2@2 [f2,d4]@2 [f2,f4]@2 [f2,d4]@2 f4!2 d4!2 f4!3 d4 f4!3 d4 [f2,f4]@2 f4 ~ f2@2 f2@2 f2@2 c3 d3, [a3,c4]@3 bb3@6 [g3,c4]@2 c4@5, ~@4 f2!4 f2!2 ~ f2 ~@4, ~@23 a4@3 a4@6]/2", // Dm F Dm F Am C5
  L: "~ f4 [f2,a4,c5]@2 [f2,a4,c5]@2 [f2,bb3,d4]@2 [f2,f4]@2 c4!4 [c3,c4] [d3,c4], f2 ~@3 bb3@4, ~@5 f2!2 ~", // F Bb F C D7
  M: "d4 c4!2 a3 [f2,c4]@2 a3 ~ f2@2 [f2,a3]@2 c4 d4 c3 d3, [f2,f3,bb3] [e3,g3]@2 f3@3 ~ f4, ~ f2 ~ f2 ~@2 f2 ~, ~@7 c4@3 ~@2 a3@4", // F5 F Bb5 Em
  N: "[f2@2 f4 g4 f2@2 f2@2 f4 g4 f2@2 f2@2 c3 d3 [f3,f4] [f2,g4] [f2,a4]@2 [f2,a4]@2 [f2,c4,f4,a4]@2 f2@2 f4!2 f2@2 a2 f2 bb2@2 bb2@2 bb2@2 [a2,f4]@2 a2@2 a2@2 [a2,f4]@2 [g2,f4]@2 [g2,f4]@2 [g2,d4]@2 g2@2 g2@2 c3@2 c4!2 c3@2 c3 d3 bb2@2 a4 g4 [bb2,f4]@2 [a2,c4,f4]@2 [a2,d4]@2 [a2,c4]@2 [a2,c4]@2 [a2,c4]@2, c4@3 [bb3,d4]@6 [c4,e4]@2 ~@2 f2 ~@2 d4@3 a3@3 ~ [g3,bb3]@9 [bb3,d4]@3 a3@5, ~ f2 a4@2 f2 a4@3 ~@6 c5@3 f4@2 ~ c4@3 ~@3 c4@2 ~ c3 g4@3 bb2 ~@6]/5", // F Fsus2 F Dm G7 G5 Bb5 F …
  O: "[g2,d4,f4]@2 g2@2 g2@2 g2@2 [g2,f4]@2 d4 ~@2 f4 [g2,d4]@2, bb3, ~ [d4,f4]@3 ~ a2 bb2 ~, ~@11 f4@2 ~@3", // G7 G5 Dm
  P: "c3!3 g2 c3!2 c3@2, [f3,bb3], c4@5 d4@3", Q: "~ [g4,bb4] [f4,a4] [c4,f4]!2 [a3,c4] [c4,f4]@2, c3 ~@3",
  R: "[f2!8 f2!8, [c4,f4,a4]@3 [c4,e4,g4]@4 [c4,d4,f4,bb4]@5 [c4,d4,f4,bb4]@2 [c4,e4,g4]@2]/2", // F C Bb C
  S: "[f2@2 f2@2 f2@2 f2@2 f2@2 f2@2 f2@2 f2@2 f2@2 [f2,bb5]@2 [f2,a5]@2 [f2,f5]@2 f2 c3 f3@2 [f2,a4]@2 [g2,f4]@2, [c4,f4,a4]@3 [c4,e4,g4]@4 [c4,d4]@9, ~@7 f4@8 ~, ~@7 bb4@6 bb4@3, ~@12 c5 ~@3]/2", // Bb5 F G7 F C Csus2
  T: "~@2 bb4@2 a4@2 f4@2 f4@2 c4@2 c4 bb3 a3@2, c3 ~@3",
  U: "[~@2 d5@2 f5@2 d5 f5@2 d5 c5@4 c5!2 ~@2 c5 d5 f5@2 d5 ~@2 d5 ~@4 c5!2, [f3,a3,c4,f4]@6 [f3,g3,c4,e4]@8 [f3,bb3,d4]@9 f5@2 ~ c5@4 ~@2, ~@6 [f3,bb3,d4] [f3,g3,c4,e4]]/2", // F C Bb C
  V: "[~@2 [f5,a5]@2 [e5,g5]@2 ~ [c5,e5]@2 [c5,e5] [c5,e5]@4 [bb4,d5]@4 bb5@2 a5@2 f5@2 c5@2 bb4@2 a4@2 f4@2, [f3,a3,c4,f4]@3 [f3,g3,c4,e4]@4 [f3,bb3,d4]@9]/2", // F Em C Bb F C Bb
  W: "[~ c5 c6@2 g5@2 g5 g5@2 f5 f5@4 f5!2 ~@2 d5@2 f5@2 d5 ~@2 d5 ~@4 g5!2, [f3,a3,c4,f4]@6 [f3,g3,c4,e4]@8 [f3,bb3,d4]@9 f5@2 ~ g5@4 ~@2, ~@6 [f3,bb3,d4] [f3,g3,c4,e4]]/2", // F C Bb C
  X: "[~@2 c6@2 g5 a5 c6@2 g5@2 g5 g5@3 [f3,bb3,d4,f5]@18, [f3,a3,c4,f4]@3 [f3,g3,c4,e4]@4 ~@9]/2", // Bb F C
  Y: "[f2@2 f4 g4 f2@2 f2@2 f4 g4 f2@2 f2@2 c3 d3 [f3,f4] [f2,g4] [f2,a4]@2 [f2,a4]@2 [f2,c4,f4,a4]@2 f2@2 f4!2 f2@2 a2 f2 ~@2 f4@4 f4@2 c4@4 c5@2 c5@2, c4@3 [bb3,d4]@6 [c4,e4]@2 ~@2 f2 ~@2 [bb2,d4]@3 a2@5, ~ f2 a4@2 f2 a4@3 ~@6 c5@3 ~@2 a3@3 ~@2]/3", // F Fsus2 F Bb C Bb
  Z: "[g4@2 g4@2 f4@2 ~@6 g4@2 ~@2 f2@2 a4 g4 [f2,f4]@2 f2@2 f2@2 f2@2 f2@2 c3 d3, [bb3,d4]@8 c4@3 [bb3,d4,f4]@5, g2@4 c3@4 ~ f2 ~@6, ~@3 a4@3 ~ g4@2 ~@7]/2", // F Bb
  AA: "f2@2 f2@2 f2@2 f2@2 f2@2 f2@2 d3 a2 c3 d3, ~ [c4,e4,g4]@2 [c4,f4,a4]@5", AB: "f2!8, [c4,f4,a4]@3 [d4,f4,bb4]@5",
  AC: "f2@2 f2@2 f2@2 f2@2 g3 f3 c3@2 d3 f2 c3 d3, ~ [e4,g4,c5]@2 [c4,f4,a4]@5", // C F
  AD: "[f2@2 f4 g4 f2@2 f2@2 f4 g4 f2@2 f2@2 c3 d3 f4 g4 [f2,a4]@2 [f2,a4]@2 [f2,c4,f4,a4]@2 f2@2 f4!2 f2 g2 a2 f2 bb2@2 bb2@2 bb2@2 [a2,f4]@2 a2@2 a2@2 [a2,c5]@2 [a2,c5]@2, c4@3 [bb3,d4]@6 [c4,e4]@2 ~@3 c5@3 f4@2 ~ c4@2 ~@2, ~ f2 a4@2 f2 a4@3 f2 ~@4 f2 ~@2 d4@3 a3@3 ~@2]/3", // F Dm Am Bb C
  AE: "[[g2,g4]@2 [g2,g4]@2 g2@2 g2@2 c3@2 c4!2 [c3,g4]@2 c3@2 f2@2 a4 g4 [f2,f4]@2 f2@2 f2@2 f2@2 f2@2 c3 d3, [bb3,d4]@4 bb3@4 c4@3 [bb3,d4,f4]@5, ~@2 f4@2 ~ c3 ~ g4@2 f2 ~@6]/2", // G C5 F Bb
  AF: "f2@2 f2@2 f2@2 f2@2 f2@2 c4!2 [f3,f4]@2 c3 d3, ~ [c4,e4,g4]@2 [c4,f4,a4]@2 g3 ~ d4", // F C F
  AG: "[f2,g4]@2 a4 g4 [f2,f4]@2 f2@2 f2@2 f2@2 f2@2 c3 d3, c4@3 [bb3,d4,f4]@5, ~ f2 ~@6", // Fsus2 F Bb
})).s("gm_piano").gain(0.72)

// bass · piano
const bass = note(`<
  ~@4 A B C D E F G H E B I J K E A@4 L M N O P Q R E@3 S A B C D E T G H E B I J K E A@4 L M N O P Q R U@2 V@2 U@2 V@2
  E A@4 L W X A Y E Z A AA O AB A AC A AC A AC A AC A AC A AC ~@3
>`.pickRestart({
  A: "f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 c2 d2", B: "f1!4 f2!2 e2!2", C: "d2@2 d2!2 d2@2 d2@2 d2@2 d2@2 a1@2 bb1@2",
  D: "bb1@2 bb1@2 bb1@2 bb1@2 c2!2 g1@2 a1@2 c2@2", E: "f1!8", F: "c2 d2 f2@4 f1@2 f1@2 f1@2 f1@2 f1@2",
  G: "f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1 c2", H: "d2 f2 f1@2 f1@2 f1!2 d2 c2 a1@2 c2@2 a1 c2", I: "d2!5 a1!2 bb1",
  J: "bb1@2 bb1@2 bb1@2 bb1 a1 bb1@2 bb1@2 bb1 c2 ~ c2", K: "c2!8", L: "f2 f1 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 a1 f1",
  M: "bb1!3 a1!4 g1", N: "g1@2 g1@2 g1@2 g1@2 c2@2 c2@2 c2@2 c2 d2", O: "bb1!3 a1!5", P: "g1!5 a1 bb1 g1",
  Q: "c2!3 g1 c2!2 c2@2", R: "c2 ~@3", S: "f1@2 f1@2 f1@2 f1@2 f1 c2 f2@2 f1@2 g1@2",
  T: "c2 d2 f2@2 f2@2 f1@2 f1@2 f1@2 f1@2 f1@2", U: "[f2@3 f2@4 f2@5 f2@2 f2@2]/2", V: "[f2@3 f2@4 f2@9]/2",
  W: "bb1@3 a1@5", X: "g1 c2", Y: "f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 d2 a1 c2 d2",
  Z: "f1@2 f1@2 f1@2 f1@2 g2 f2 c2@2 d2 f1 c2 d2", AA: "f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1 g1 a1 f1", AB: "g1!4 c2!4",
  AC: "f1@2 f1@2 f1@2 f1@2 f1@2 g2@2 f2@2 c2 d2",
})).s("gm_piano").gain(0.64)

// chords · overdriven guitar
const overdriven_guitar = note("<~@15 A B@8 ~@34 C D@4 E@6 F G H ~@9 I ~@15>".pickRestart({
  A: "~@7 [bb3,f4]", B: "[~ [bb3,f4] f5@62]/8", C: "[f3,c4]@2 ~ [c3,g3]@3 c4 [bb3,f4]",
  D: "[~@4 bb4@2 [bb3,f4]@2 ~@2 [bb3,f4]@2 c5@2 [c3,g3]@2 [f3,c4]@5 ~ [c3,g3]@8 [bb3,f4]@6 [bb3,f4]@4 bb4@2 [bb3,f4]@2 [f4,bb4]@4 [f3,c4]@4 ~@2 [c3,g3]@6 c4@2 [bb3,f4]@2, ~ f5@4 f5@3]/4", // Bb5 C5 F5 C5 Bb5 F5 C5 Bb5
  E: "[~@4 bb4@2 [bb3,f4]@2 ~@2 c5@4 [c3,g3]@7 ~ [c3,g3] ~ [c3,g3]@6 [c3,g3]@2 [c3,f3]@4 ~@12 [f3,c4]@4 ~@2 [bb3,f4]@6 bb4@2 ~@4 c4@4 c5@4 [f3,c4]@2 ~@2 [f3,c4]@7 ~ [bb3,f4]@8 [bb3,f4]@2, ~@4 f5@35 ~@9, ~@31 [bb3,f4]@3 ~@14, ~@33 c3 ~@14]/6", // Bb5 C5 F5 Bb5 F5 Bb5
  F: "~@3 [f4,c5]@2 [f3,c4] [c4,f4]@2, [bb3,f4] ~@3, ~ [c3,g3]@3 ~@4", G: "[f3,c4]@2 ~ [bb3,f4]@3 bb4 [bb3,f4]",
  H: "[c3,g3]!2 ~@6", I: "[g3,d4]!2 ~@6",
})).s("gm_overdriven_guitar").gain(0.45)

// chords · overdriven guitar
const overdriven_guitar_2 = note(`<
  ~@4 A B C D E F E F E F C G ~ H@3 I J K L@2 M N O P Q@2 R@2 E S C D E F E F E F C G T H@3 I J K U@2 M N O P ~@14 M V
  H@3 I W@2 X ~ J Y Z AA J Y Z AA J Y Z AA ~@3
>`.pickRestart({
  A: "[f3,a3,f4]@2 ~@2 a3 ~ [f3,a3,f4]@2 ~@6 [c3,bb3,c4]@2", B: "~@6 [bb3,c4,bb4]@2 [f3,a3,f4]@3 ~ f3 ~@3",
  C: "[d3,f3,d4]@2 ~@2 f3 ~ [d3,f3,d4]@2 ~@6 [d3,bb3,d4]@2", D: "~@6 [bb3,d4,bb4]@2 [bb3,d4,bb4]@3 ~@5",
  E: "[f3,a3,f4]@2 ~@2 a3 ~ [f3,a3,f4]@2 ~@6 [d3,bb3,d4]@2", F: "~@6 [bb3,d4,bb4]@5 ~ c3 ~@3",
  G: "~@6 [bb3,d4,bb4]@5 ~@5", // Bb
  H: "[[f3,c4]@4 ~@2 [bb3,f4]@6 bb4@2 ~@4 c4@4 c5@4 [f3,c4]@2 f5@2 [f3,c4]@7 ~ [bb3,f4]@8 [bb3,f4]@2, ~@7 [bb3,f4]@3 ~@14, ~@9 c3 ~@14]/3", // F5 Bb5 F5 Bb5
  I: "~@3 [f4,c5]@2 [f3,c4] [c4,f4]@2, [bb3,f4] ~@3, ~ [c3,g3]@3 ~@4", J: "[f3,c4]@2 ~ [bb3,f4]@3 bb4 [bb3,f4]",
  K: "[c3,g3]@2 [f3,f4] [f3,c4] c5 [f3,c4] f5 [f3,c4]", // C5 F F5
  L: "[[bb3,f4]@5 ~ [bb3,f4] ~ [f3,c4]@6 [g3,d4]@6 [g3,d4]@4 [g4,d5]@2 [g3,d4]@2 [d4,g4]@4]/2", // Bb5 F5 G5
  M: "[bb3,f4]@2 ~ [f3,c4]@3 f4 [f3,c4]", N: "[g3,d4]@2 g4 [g3,d4] d5 [g3,d4] g5 [g3,d4]",
  O: "[g3,d4]@5 ~ [g3,d4] ~ [g3,d4]@6 [g3,d4]@2", P: "[g3,d4] ~@3",
  Q: "[[f3,c4]@2 ~ [c3,g3]@3 c4 [bb3,f4]@3 bb4 [bb3,f4] f5 [bb3,f4] c5 [c3,g3]]/2", // F5 C5 Bb5 C5
  R: "[[f3,c4]@5 ~ [c3,g3]@8 [bb3,f4]@6 [bb3,f4]@4 [bb4,f5]@2 [bb3,f4]@2 [f4,bb4]@4]/2", // F5 C5 Bb5
  S: "~@6 [bb3,d4,bb4]@2 [f3,a3,f4]@3 ~ f3 ~@3", T: "[bb3,f4]@2 bb4@2 f5@2 bb5@2 bb4 [bb4,f5] [d5,f5] [bb4,d5] ~@4",
  U: "[[bb3,f4]@5 ~ [f3,c4]@8 [g3,d4]@6 [g3,d4]@4 [g4,d5]@2 [g3,d4]@2 [d4,g4]@4]/2", // Bb5 F5 G5
  V: "[g3,d4]@2 g4@2 d5@2 g5@2 [f5,g5] [d5,f5] [bb4,d5] bb4 ~@4", // G5 Fsus2 Dm Bb
  W: "[[f3,c4]@2 ~ [bb3,f4]@3 bb4 ~@2 c4@2 c5@2 [f3,c4] f5 [f3,c4], ~@7 [bb3,f4]@3 ~@6, ~@9 c3 ~@6]/2", // F5 Bb5 F5 Bb5
  X: "[bb3,f4]@5 ~ [f3,c4]@8 [f3,c4]@2", Y: "[c3,g3]@2 c4 c5@2 [f3,c4] f5 [f3,c4]",
  Z: "[f3,c4]@5 ~ [bb3,f4]@8 [bb3,f4]@2", AA: "[c3,g3]@2 ~ [f4,c5]@2 [f3,c4] [c4,f4]@2, ~ [c3,g3] ~@2",
})).s("gm_overdriven_guitar").gain(0.45)

// chords · rock organ
const rock_organ = note("<~@6 A B ~@2 C D ~@23 A B ~@2 C D ~@56>".pickRestart({
  A: "~@6 d6 [d6,f6,bb6], ~@3 [f5,a5]", // Bb F
  B: "~@4 [bb6,f7,bb7]@2 [bb6,f7,bb7]@2 [bb6,f7,bb7]@3 bb6 [bb5,f6,bb6,d7] [bb5,d6] ~@2", // Bb5 Bb
  C: "~@7 [d6,f6,bb6], ~@3 [e5,g5,c6]", D: "~@4 [bb6,f7,bb7]@2 [bb6,f7,bb7]@5 bb6 [c5,g5,bb5,bb6,d7] [c5,e5] ~@2",
})).s("gm_rock_organ").gain(0.25)

// chords · rock organ · soft notes
const rock_organ_soft = note("<~@7 A ~@3 A ~@24 A ~@3 A ~@56>".pickRestart({
  A: "~@11 [d7,f7] ~@4", // Dm
})).s("gm_rock_organ").gain(0.15)

// other · guitar harmonics · Dm Am Bb
const guitar_harmonics = note(`<
  ~@16
  [~@6 bb5@3 bb4!2 [d5,f5] ~@4]
  ~@54
  [~@6 f5@3 f4!2 [a4,c5] ~@4]
  ~@9
  [~@6 g5@2 g5 g4 f5 [bb4,d5,f5] ~@4]
  ~@15
>`).s("gm_guitar_harmonics").gain(0.2)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@5 A@3 ~ A ~ A ~ A@3 ~@18 A@3 ~ A ~ A ~ A@3 ~@52>".pickRestart({
  A: "~@3 x ~@4",
})).gain(0.25)

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

// drums · low tom
const low_tom = s("lt").struct("<~@45 [~@3 x ~@4] ~@27 [~@3 x ~@4] ~@23>").gain(0.4)

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

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@45 [x!3 ~@5] ~@27 [x!3 ~@5] ~@23>").gain(0.4)

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

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

// drums · ride
const ride = s("rd").struct(`<
  ~@17 A B C B A D E F A D G H A F I F ~@13 A B C B A D I F A D G H ~@6 J ~ A B C B A ~ A ~ A B C B A B C ~ A K C K A K
  C K A K C K ~@3
>`.pickRestart({
  A: "~ x!3 ~@2 x!2", B: "x!2 ~ x ~@4", C: "~@2 x!2 ~ x!2 ~", D: "x!5 ~@3", E: "~@2 x!6", F: "~ x!4 ~@3",
  G: "~@2 x!5 ~", H: "x", I: "~@2 x!2 ~ x!3", J: "~@4 x!3 ~", K: "x!4 ~@4",
})).gain(0.4)

// drums · ride · soft notes
const ride_soft = s("rd").struct(`<
  ~@17 A ~ B ~ A ~@3 A ~ B ~ A ~@16 A ~ B ~ A ~@3 A ~ B ~@5 A ~ B ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~
  B ~@4
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@7 x",
})).gain(0.2)

// drums · tambourine
// … 18 more lines

More by Wilson Phillips