Strudelify

Couple Days Off

Huey Lewis & The News

KeyA majorTempo161 bpm
0:00/0:00
// Couple Days Off — Huey Lewis & The News
// 161 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 73, 4/4 at bar 74) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 132 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(161/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A ~ B ~ A ~ C D E ~ C D E ~ C D E ~ C D E ~ C D F G H I J@2 K L A ~ B ~ A ~ C D E ~ C D E ~ C D E ~ C D E ~ C D F G
  H I J@2 K L A ~ B ~ A ~ M N O P Q P Q P Q R S T U T V T W X Y ~ W X Y ~ W X Y ~ W X Y ~ W X Z AA AB AC AD J AE AF ~ V
  T U T V T W X AG T U T V T W X AH ~
>`.pickRestart({
  A: "e2 e3 d3 ~", B: "c#3@3 ~ c#3@4 d3@4 ~@4", C: "e2@4 g#2@3 ~ a2@4 c#3@3 ~", D: "d3@3 ~ g2@4 a2@4 d3@3 ~",
  E: "e2@3 ~ e3@3 ~@9", F: "b2@4 b2@3 ~ b2@3 f#2 b2@3 f#2", G: "b2@3 ~ b2@3 ~ b2@3 ~ b2@3 ~",
  H: "c#3@3 ~ c#3@3 ~ c#3@3 ~ c#3@3 ~", I: "c#3@3 ~ c#3@2 ~ g#2 c#3@3 g#2 c#3@3 g#2", J: "d3@3 ~ d3@3 ~ d3@3 ~ d3@3 ~",
  K: "a2@3 ~ a2@3 ~ a2@3 ~ a2@3 ~", L: "a2 ~@7", M: "e2 ~@7", N: "~@8 e3@3 ~@5", O: "~@8 g2@4 b2@3 ~",
  P: "c3@4 e3@3 ~ f3@3 ~ a#2@4", Q: "c3@4 f3@3 ~ g2@4 b2@3 ~", R: "c3@4 e3@3 ~ a3@2 ~ a3 ~ a3@2 ~",
  S: "d3@2 ~ d3 ~ d3@2 ~ e2@4 e3@4", T: "d3 ~@3", U: "~@8 c#3@3 ~ c#3@4", V: "~@2 e2 e3", W: "~@8 e2@4 g#2@3 ~",
  X: "a2@4 c#3@3 ~ d3@3 ~ g2@4", Y: "a2@4 d3@3 ~ e2@3 ~ e3@3 ~", Z: "a2@4 d3@3 ~ b2@4 b2@3 ~",
  AA: "b2@3 f#2 b2@3 f#2 b2@3 ~ b2@3 ~", AB: "b2@3 ~ b2@3 ~ c#3@3 ~ c#3@3 ~", AC: "c#3@3 ~ c#3@3 ~ c#3@3 ~ c#3@2 ~ g#2",
  AD: "c#3@3 g#2 c#3@3 g#2 d3@3 ~ d3@3 ~", AE: "d3@3 ~ d3@3 ~ a2@3 ~ a2@3 ~", AF: "a2@3 ~ a2@3 ~ a2@2 ~@6",
  AG: "a2@4 d3@3 ~ e2@4 e3@4", AH: "a2@4 d3@3 e2@5 e2@4",
})).s("gm_acoustic_bass").gain(0.64)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  ~ A ~ B ~ A C D E F ~ D E F ~ D E F ~ D E F ~ D E G@2 H@2 I@2 J K A ~ B ~ A C D E F ~ D E F ~ D E F ~ D E F ~ D E G@2
  H@2 I@2 J K A ~ B ~ A C L M@2 N O P Q R@3 S T U V W T X Y Z ~ AA Y Z ~ AA Y Z ~ AA Y Z ~ AA Y AB@8 ~ AC T U V W T X Y
  AD T U V W T X Y AE ~
>`.pickRestart({
  A: "[e3,g#4,b4,e5]!2 [f#4,a4,d5] ~, ~@8 d3 ~@7", B: "[c#4,e4,a4,c#5]@4 [c#4,e4,a4,c#5]@4 [d4,f#4,a4,d5]@3 ~@5",
  C: "~@9 [g7,a7,b7,c8] [d7,e7,f7] [a6,b6,c7] [d6,e6,f6,g6] [a5,b5,c6] [d5,e5,f5,g5] [b4,c5]", // Cmaj7 Dm Am Em7 Am Em7 Cmaj7
  D: "[b5,e6] e5@2 ~ e5 [b5,e6] ~ e5 [b5,e6] e5@2 ~ e5 [b5,e6] ~ e5, ~@3 [b5,e6]@2 ~@6 [b5,e6]@2 ~@3", // E5
  E: "[b5,e6] e5@2 [b5,e6] e5 [b5,e6] ~ e5 [b5,e6] e5 ~ [b5,e6] e5 [b5,e6] ~ e5", // E5
  F: "[e3,e4,g#4,b4,e5] ~ [e3,e4,g#4,b4,e5] ~@5", G: "[b3 [b4,d#5,f#5]@2 [a4,d#5,f#5]@2 [b4,d#5,f#5]@2 [b4,d#5,f#5]]/2",
  H: "[~ [c#4,e4,g#4,c#5,e5,g#5]@2 [c#5,e5,g#5]@2 [c#5,e5,g#5]@2 [c#5,e5,g#5], ~@3 [c#4,g#4]@5]/2", // C#m C#5
  I: "[~ [d5,f#5,a5]@2 [d5,f#5,a5]@2 [d5,f#5,a5]@2 [d5,f#5,a5], [d4,a4]]/2", // D D5
  J: "~@4 [a4,c#5,e5]@8 [a3,e4,a4,c#5,e5]@3 ~, [a3,e4]@3 ~", K: "[a3,e4,a4,c#5,e5] ~@7", L: "[e3,b3,e4,e5,b5,e6] ~@7",
  M: "[~@8 [e4,b4,e5,g#5]@2 ~@11 a6 [b6,c7,d7,e7] [f7,g7,a7,b7] [g4,b4,d5]@4 [g4,b4,d5]@2 ~ [g3,d4], ~@11 c3@4 [b3,c4] [d4,e4] [f4,g4,a4] [b4,c5,d5] [e5,f5,g5] [a5,b5,c6,d6] [e6,f6,g6]@2 ~ c8 ~@7, ~@12 [d3,e3]@11 ~@9, ~@13 f3@10 ~@9, ~@14 [g3,a3]@9 ~ [g3,d4]@6 ~@2]/2", // E Cmaj7 G7 G G5 Cmaj7 Dsus2 F …
  N: "[g4,c5,e5]@2 [g4,c5,e5] ~ [f4,a4,c5]@3 ~", // C F
  O: "[g4,c5,e5]@4 [g4,c5,e5]@3 ~ [g4,b4,d5]@4 [g4,b4,d5]@2 ~@2, c4@3 ~@5", P: "[g4,c5,e5]@3 ~ [f4,a4,c5,f5,a5]@3 ~",
  Q: "[c5,e5,g5]@4 [c5,e5,g5]@2 ~@3 g6@2 ~@2 g7 ~ g6, ~@8 g3@7 ~, ~@8 [g4,b4,d5,g7]@3 g7@2 ~@3, ~@12 [g4,b4,d5,g6]@3 ~", // C G
  R: "[~ g6@2 ~@2 g7@2 g6 ~ g6@2 ~@2 g7 ~@3 g6@2 ~@2 g7 ~@3 g6@2 ~@2 [d7,g7] ~ g3 ~ g6@2 ~@2 [d7,g7] ~@2 [a4,c#5,e5,a5] ~@2 [a4,c#5,e5,a5] ~ [a4,c#5,e5,a5] ~@2, [c4,g4,c5,e5]@7 ~ [f4,a4,c5,f5,a5]@6 ~@2 [c4,c5,e5,g5]@6 ~@2 g3@6 ~@18, g7@3 g7@2 ~@3 g7@3 g7@2 ~@3 g7@3 g7@2 ~@3 [g4,b4,d5,d7,g7]@4 [g4,b4,d5,g6]@2 ~@2 [g4,c5,e5,d7,g7]@4 [g4,c5,e5,g6]@3 ~@9, ~@4 g6@3 ~@5 g6@2 ~ g6@2 ~@3 g6@2 ~ g6@2 ~@2 [d7,g7]@2 ~@2 g6@2 ~@2 [d7,g7]@2 ~@11]/3", // G5 A C F C G C G5
  S: "[d4,a4,d5,f#5,a5] ~@2 [d4,a4,d5,f#5,a5] ~ [d4,a4,d5,f#5,a5] ~@2 [e3,g#4,b4,e5]@4 [e3,g#4,b4,e5]@4", // D E
  T: "[f#4,a4,d5] ~@3, d3 ~@15", U: "~@2 [c#4,e4,a4,c#5]!2",
  V: "[d4,f#4,a4,d5]@3 ~ [d5,d6] [d#5,d#6] ~ [e5,e6] ~ [e5,e6] ~ [d5,d6] ~ [g5,g6] ~ [e5,e6], ~@4 [g5,g6] ~ [a5,a6] ~", // D D# E D G E G A
  W: "[e5,e6] [d#5,d#6] ~ [d5,d6] [b4,b5] [a4,a5] ~ [g4,g5] [e3,g#4,b4,e5]@4 [e3,g#4,b4,e5]@4", // E D# D B A G E
  X: "~ [g7,a7,b7,c8] [d7,e7,f7] [a6,b6,c7] [d6,e6,f6,g6] [a5,b5,c6] [d5,e5,f5,g5] [b4,c5] [b5,e6] e5@2 ~ e5 [b5,e6] ~ e5, ~@11 [b5,e6]@2 ~@3", // Cmaj7 Dm Am Em7 Am Em7 Cmaj7 E5
  Y: "[b5,e6] e5@2 ~ e5 [b5,e6] ~ e5 [b5,e6] e5@2 [b5,e6] e5 [b5,e6] ~ e5, ~@3 [b5,e6]@2 ~@11", // E5
  Z: "[b5,e6] e5 ~ [b5,e6] e5 [b5,e6] ~ e5 [e3,e4,g#4,b4,e5]@2 ~@2 [e3,e4,g#4,b4,e5]@2 ~@2", // E5 E
  AA: "~@8 [b5,e6] e5@2 ~ e5 [b5,e6] ~ e5, ~@11 [b5,e6]@2 ~@3", // E5
  AB: "[[b5,e6] e5 ~ [b5,e6] e5 [b5,e6] ~ e5 b3@4 [b4,d#5,f#5]@8 [a4,d#5,f#5]@8 [b4,d#5,f#5]@8 [b4,d#5,f#5]@4 ~@4 [c#4,e4,g#4,c#5,e5,g#5]@8 [c#5,e5,g#5]@8 [c#5,e5,g#5]@8 [c#5,e5,g#5]@4 ~@4 [d5,f#5,a5]@8 [d5,f#5,a5]@8 [d5,f#5,a5]@8 [d5,f#5,a5]@4 ~@4 [a4,c#5,e5]@8 [a3,e4,a4,c#5,e5]@3 ~ [a3,e4,a4,c#5,e5]@2 ~@6, ~@13 [c#4,g#4]@5 [d4,a4]@8 [a3,e4]@3 ~@3]/8", // E5 B D#dim B C#m D A C#5 …
  AC: "~@2 [e3,g#4,b4,e5]!2", AD: "[b5,e6] e5 ~ [b5,e6] e5 [b5,e6] ~ e5 [e3,g#4,b4,e5]@4 [e3,g#4,b4,e5]@4",
  AE: "[b5,e6] e5 ~ [b5,e6] e5 [b5,e6] ~ [e3,b3,e4,b4]@4 ~ [e3,b3,e4,b4,e5]@3 ~, ~@7 e5 ~@8", // E5
})).s("gm_piano").gain(0.56)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~ A ~ B ~ C D E F ~@2 E F ~@2 E F ~@2 E F ~ G@2 H I@2 J@2 K@2 L M A ~ B ~ N D E F ~@2 E F ~@2 E F ~@2 E F ~ G@2 H I@2
  J@2 K@2 L M A ~ B ~ C D O P@5 Q@2 ~ R S T U V W X Y Z AA ~ AB Z AA ~ AB Z AA ~ AB Z AA ~ AC AD AE@7 AF ~ AG T U V W X
  Y Z AH AI AJ AK AL AM AN@2 AO ~
>`.pickRestart({
  A: "[e3,g#3,b3,e4]!2 [d3,f#3,a3,d4] ~", B: "[c#3,e3,a3,c#4]@4 [c#3,e3,a3,c#4]@4 [d3,f#3,a3,d4]@3 ~@5",
  C: "[e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@4 [d3,f#3,a3,d4]@3 c#4 d4@3 c#4", D: "d4@3 c#4 d4@3 c#4 d4@3 c#4 d4@2 ~@2",
  E: "e2@4 g#2@3 ~ a2@4 c#3@3 ~", F: "d3@3 ~ g2@4 a2@4 d3@3 ~", G: "[~@15 g4@4 ~ g4@3 ~ e4@4 d4@2 ~@2]/2",
  H: "b3@2 ~ d4 b3@3 a3 g3@4 e3@3 ~", I: "[b2,f#3,b3]/2", J: "[c#3,g#3,c#4]/2", K: "[d3,a3,d4]/2", L: "[a2,e3,a3]!2",
  M: "[a2,e3,a3] ~@7", N: "[e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@4 [d3,f#3,a3,d4]@4 d4@3 c#4", O: "[e2,b2,e3,g#3] ~@7",
  P: "[~@8 [e3,b3,e4]@2 ~@14 g3@27 ~ g3@21 ~@2 g3@2 g3 ~@2, ~@8 d5@13 ~@59]/5", Q: "[g3@7 ~ g3@23 ~]/2",
  R: "~@8 [e4,a4]@2 ~ [e4,a4]@2 [e4,a4]@2 ~", S: "[e4,a4]@3 ~ [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2",
  T: "[d3,f#3,a3,d4]@4 d4@3 [c#4,c#5] [d4,d5]@3 ~ [d4,d5]@3 [c#4,c#5], ~@2 d5 ~@5", // D C# D C#
  U: "[d4,d5]@3 [c#4,c#5] [d4,d5]@3 [c#4,c#5] [c#3,e3,a3,c#4]@4 [c#3,e3,a3,c#4]@4", // D C# D C# A
  V: "[d3,f#3,a3,d4]@3 ~ [d4,d5] [d#4,d#5] ~ [e4,e5] ~ [e4,e5] ~ [d4,d5] ~ [g4,g5] ~ [e4,e5], ~@4 [g4,g5] ~ [a4,a5] ~", // D D# E D G E G A
  W: "[e4,e5] [d#4,d#5] ~ [d4,d5] [b3,b4] [a3,a4] ~ [g3,g4] [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@4", // E D# D B A G E
  X: "[d3,f#3,a3,d4]@3 c#4 d4@3 c#4 d4@3 c#4 d4@3 c#4", Y: "d4@3 c#4 d4@2 ~@2 e2@4 g#2@3 ~",
  Z: "a2@4 c#3@3 ~ d3@3 ~ g2@4", AA: "a2@4 d3@3 ~@9", AB: "~@8 e2@4 g#2@3 ~", AC: "~@7 g4@4 ~ g4@3 ~",
  AD: "e4@4 d4@2 ~@2 b3@2 ~ d4 b3@3 a3",
  AE: "[g3@4 e3@3 ~ [b2,f#3,b3]@32 [c#3,g#3,c#4]@32 [d3,a3,d4]@32 [a2,e3,a3]@8]/7", AF: "[a2,e3,a3]@4 [a2,e3,a3] ~@3",
  AG: "~@2 [e3,g#3,b3,e4]!2", AH: "a2@4 d3@3 ~ [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@4",
  AI: "[d3,f#3,a3,d4] ~ [g3,g4]@2, [e3,e4]@7 ~@9", AJ: "[a3,a4] [b3,b4]", AK: "[d4,d5]@7 ~ [e4,e5]@8",
  AL: "[g4,g5]@3 ~ [a4,a5]@3 ~ [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@4, ~ b4", AM: "[d3,f#3,a3,d4]@4 ~@4 e5@7 ~, d5 ~",
  AN: "[g5@3 ~ a5@2 ~@3 g5 ~ e5 d5 e5 ~@2 e5 d5 ~ b4 ~ b4 ~ a4 g4 e4 ~ a4 g4 d4 ~ e4, ~@8 a5@2 ~@5 g5@2 ~@15]/2",
  AO: "d4 b3 ~@5 [e3,b3,e4]@5 [e3,b3,e4]@4", // E5
})).s("gm_overdriven_guitar").gain(0.64)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note(`<
  ~@5 A B C D E ~ F G E ~ F G E ~ F G E ~ F G H@2 I@2 J@2 K ~@5 A B C D E ~ F G E ~ F G E ~ F G E ~ F G H@2 I@2 J@2 K
  ~@5 A B L M@2 N O N O N O P Q R S T U V W X@2 ~ Y Z AA ~ Y Z AA ~ Y Z AA ~ Y Z AB@8 ~@2 R S T U V W AC@2 ~ AD AE ~ V W
  AF@2 AG
>`.pickRestart({
  A: "~@8 d5@3 c#5 d5@2 ~ c#5", B: "d5@3 c#5 d5@3 c#5 d5@3 c#5 d5@2 ~ c#5",
  C: "~@4 [g#4,b4,e5]@2 ~@6 [a4,c#5] ~@3, ~@6 e5 ~", D: "[a4,d5,e5]@12 [a4,c#5,e5] ~@3",
  E: "[g#4,b4,e5] ~ [g#4,b4,e5] ~@5", F: "[g#4,b4,e5]@8 [a4,c#5,e5]@7 ~", G: "[a4,d5,e5]@8 [a4,c#5,e5]@7 ~",
  H: "[b3,d#4,f#4,b4]/2", I: "[[c#4,e4,g#4,c#5]@15 ~]/2", J: "[d4,f#4,a4,d5]/2", K: "[a3,e4,a4,c#5,e5]",
  L: "[b4,e5,g#5] ~@7", // E
  M: "[~@8 [b4,e5,g#5]@2 c2 d2 ~@10 [c5,d5,e5] [f5,g5,a5,b5] [b4,d5,g5]@8, ~@3 [e2,f2]@3 ~@2, ~@13 g2@3 d3 [e3,f3] [g3,a3] [b3,c4] [d4,e4,f4]@4 ~@8, ~@14 a2@7 [g4,a4,b4]@2 ~ c6 ~@7, ~@15 [b2,c3]@9 ~@8]/2", // E C G7 G Fmaj7 Gsus2 Cmaj7 Dm …
  N: "[c5,e5,g5]@7 ~ [c5,f5,g5]@8", O: "[c5,e5,g5]@7 ~ [b4,d5,g5]@8",
  P: "[c5,e5,g5]@7 ~ [c#5,e5] ~@2 [c#5,e5,a5] ~ [c#5,e5] ~@2, ~@8 a5@2 ~@3 a5@2 ~", // C C#m A C#m
  Q: "[f#5,a5]@2 ~ [d5,f#5,a5] ~ [d5,f#5] ~@10, d5 ~@4 a5@2 ~@9", // F#m D
  R: "~@4 [d4,d5]@2 ~ [c#4,c#5] [d4,d5]@3 ~ [d4,d5]@3 [c#4,c#5]", S: "[d4,d5]@3 [c#4,c#5] [d4,d5]@3 [c#4,c#5] ~@8",
  T: "~@4 [d4,d5] [d#4,d#5] ~ [e4,e5] ~ [e4,e5] ~ [d4,d5] ~ [g4,g5] ~ [e4,e5], ~@4 [g4,g5] ~ [a4,a5] ~", // D D# E D G E G A
  U: "[e4,e5] [d#4,d#5] ~ [d4,d5] [b3,b4] [a3,a4] ~ [g3,g4] ~@8", V: "d5@3 c#5 d5@2 ~ c#5 d5@3 c#5 d5@3 c#5",
  W: "d5@3 c#5 d5@2 ~ c#5 ~@4 [g#4,b4,e5]@2 ~@2", // E
  X: "[~@4 [a4,c#5] ~@3 [a4,d5,e5]@12 [a4,c#5,e5] ~@3 [g#4,b4,e5]@2 ~@2 [g#4,b4,e5]@2 ~@2, ~@2 e5 ~@13]/2", // A Asus4 A E
  Y: "~ [g#4,b4,e5]", Z: "[a4,c#5,e5]@7 ~ [a4,d5,e5]@8", AA: "[a4,c#5,e5]@7 ~ [g#4,b4,e5]@2 ~@2 [g#4,b4,e5]@2 ~@2",
  AB: "[[a4,c#5,e5]@7 ~ [b3,d#4,f#4,b4]@32 [c#4,e4,g#4,c#5]@30 ~@2 [d4,f#4,a4,d5]@32 [a3,e4,a4,c#5,e5]@17 ~@7]/8", // A B C#m D A
  AC: "[~@4 [a4,c#5] ~@3 [a4,d5,e5]@12 [a4,c#5,e5] ~@11, ~@2 e5 ~@13]/2", AD: "~@2 [c#4,e4,a4,c#5]!2",
  AE: "[d4,f#4,a4,d5]@3 ~ [d5,d6] [d#5,d#6] ~ [e5,e6] ~@8", // D D# E
  AF: "[~@4 [a4,c#5] ~@3 [a4,d5,e5]@12 [a4,c#5,e5] ~@2 e4@4 ~@2 e4@2 c5, ~@2 e5 ~@8 [b4,d5,e5]@2 ~ [b4,d5,e5]@2]/2", // A Asus4 A E7
  AG: "[f4,g4,a4] [g3,a3,b3,c4,d4,e4] [b2,c3,d3,e3,f3] ~@13", // F Cmaj7 Bdim
})).s("gm_percussive_organ").gain(0.4)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@4 A ~ A ~@2 B C D E D E D E D E D E D E D F ~@7 G ~@3 A ~ H ~@2 B C D E D E D E D E D E D E D F ~@7 G ~@3 A ~ H ~@2
  I ~@13 I ~ J K L M N M N M N M N M N M N M I ~@7 O ~@6 I ~@7 I P Q ~
>`.pickRestart({
  A: "~@8 x!2 ~ x!2 ~@3", B: "x!2 ~ x ~@3 x ~@3 x ~@3 x", C: "x!2 ~ x!2 ~@2 x ~@3 x ~@3 x", D: "~@3 x ~@7 x ~@4",
  E: "~@3 x ~@3 x!3 ~ x ~@4", F: "~@3 x ~@3 x!3 ~ x!2 ~@3", G: "~@8 x ~@2 x ~ x ~@2", H: "~@10 x ~ x!2 ~@2",
  I: "x!2 ~ x!2 ~@11", J: "~@8 x!2 ~ x ~@3 x", K: "~@3 x ~@3 x!3 ~ x!2 ~@2 x", L: "~@3 x ~@3 x ~@3 x ~@4",
  M: "~@3 x ~@7 x ~@3 x", N: "x!2 ~ x ~@7 x ~@4", O: "x ~@2 x ~ x ~@10", P: "~@8 x!2 ~ x!3 ~ x", Q: "x",
})).gain(0.14)

// drums · low tom
const low_tom = s("lt").struct("<A ~@31 B ~@31 B ~@8 C ~@7 D ~@31 E D ~@15 F ~>".pickRestart({
  A: "~@7 x ~@8", B: "~@3 x", C: "~@5 x ~ x ~@8", D: "~@3 x ~ x ~@10", E: "~ x ~@2", F: "~@3 x ~@12",
})).gain(0.69)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A B C B C B C B C@17 B C B C B C B ~ B C B C B C B C@17 B C B C B C B ~ B C B C B C ~@2 D B E B E B E F D B E B E B E
  B E@17 B E B E B E F ~ D B E B E B E B E B E B E B E B G ~
>`.pickRestart({
  A: "~@8 x!2 ~@6", B: "~@3 x ~@3 x ~@3 x ~@3 x", C: "~@3 x ~@3 x ~@3 x ~@4", D: "~@11 x ~@3 x", E: "~@3 x ~@7 x ~@3 x",
  F: "~@3 x ~@3 x ~@8", G: "~@3 x ~@12",
})).gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@31 B ~@5 C ~@25 B ~@5 C ~@2 D ~@7 E ~@31 F E ~@15 F ~>".pickRestart({
  A: "~@4 x!2 ~@10", B: "~@9 x ~@6", C: "~ x", D: "~@3 x!2 ~@11", E: "x", F: "~ x ~@14",
})).gain(0.69)

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

// drums · high tom
const high_tom = s("ht").struct("<A ~@31 B ~@5 C ~@25 B ~@5 C ~@2 D ~@6 E ~@31 F G ~@15 F H ~>".pickRestart({
  A: "x!2 ~ x ~@12", B: "~@7 x!2 ~@2 x ~@4", C: "~@4 x!2 ~ x ~@8", D: "x!2 ~@14", E: "~@8 x ~@2 x ~ x ~@2", F: "~@15 x",
  G: "x ~@2 x ~@4 x ~@2 x ~ x ~@2", H: "x",
})).gain(0.69)

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

// drums · ride
const ride = s("rd").struct(`<
  ~@25 A B@3 A B A ~@25 A B@3 A B A ~@9 C B@6 D C B@4 E ~@18 C B@3 F B F D ~ C B@4 E ~@2 C B@4 E ~@4
// … 8 more lines

More by Huey Lewis & The News