Strudelify

Me Wise Magic

Van Halen

KeyB minorTempo101 bpm
0:00/0:00
// Me Wise Magic — Van Halen
// 101 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (9/8 at bar 1, 4/4 at bar 12, 3/4 at bar 31, 4/4 at bar 33, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(101/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 · overdriven guitar · "Main Guitar"
const overdriven_guitar = note(`<
  A B C@4 D E F@2 B G H@2 I@3 J K L@2 M N O@2 P@2 Q R S@3 T@3 U V W X U Y Z@2 AA AB AA AC AD AE AD AF AG@2 AH AI AJ AK
  AL@2 AM AN AO AP AQ@2 AO AR AS AT AU@8 AV AW AX AY AZ BA BB BC BD BE BF@2 BG BH@2 AO AP AQ@2 AO AR AQ@2 AO AP AQ@2 AO
  AP BI BJ BK
>`.pickRestart({
  A: "~@4 b2@2 f#3 b3@2 c#4@2 b3@3 g2@2", B: "~ a2@2 ~ g2 a2 b2@2 f#3 b3@2 c#4@2 f#4@3",
  C: "[g2@3 a2@2 ~ g2 a2 b2@2 f#3 b3@2 c#4@2 b3@3 g2@3 a2@2 ~ g2 a2 b2@2 f#3 b3@2 c#4@2 f#4@3 g2@3 a2@2 ~ g2 a2 b2@2 f#3 b3@2 c#4@2 b3@3 g2@3 a2@2 ~ g2 a2 b2@2]/4",
  D: "f#3 b3@2 c#4@2 f#4@3 g2@3 a2@2 ~ g2 a2", E: "b2@2 f#3 b3@2 c#4@2 b3@3 g2@3 a2@2 ~",
  F: "[g2 a2 b2@2 f#3 b3@2 c#4@2 f#4@3 g2@3 a2@2 ~ g2 a2 b2@2 f#3 b3@2 c#4@2 b3@3 g2@2]/2",
  G: "g2@3 a2@2 ~ g2 a2 [b2,f#3,b3]@2 ~ [a2,e3,a3]@2 [b2,f#3,b3] [a2,e3,a3]@2", // B5 A5 B5 A5
  H: "[[e3,b3,e4]@3 [d3,a3,d4]@3 ~@2 f#2@13 ~@3 [e4,a4] c#5 e3 [e4,g#4] b4 ~ b4 d4, ~@6 [f#3,c#4,f#4]@15 ~@11]/2", // E5 D5 A5 E F#5
  I: "[[f#4,a4] e3 b3 [e4,g#4] e3 b3 [d#4,f#4] e3 g3 [c4,e4] e3 [g3,b3] d4 [b2,f#3,d4]@2 [b2,e3,b3,e4]@7 ~ f#2 a2 [b2,f#3,b3]!2 a2 [b2,f#3,b3]!2 a2 [b2,f#3,b3]@2 ~@6 f#2 g2 [a2,e3,a3]!2 g2 [a2,e3,a3]!2 g2 [a2,e3,a3]]/3", // F#m E D#m C G Bm E5 B5 …
  J: "[a2,e3,a3] g2@2 [a2,e3,a3] a2 c3 b2 a2!2 [a2,e3,a3]!2 g2 [a2,e3,a3]!2 g2 [a2,e3,a3]", // A5
  K: "[a2,e3,a3] g2@2 [a2,e3,a3] [a#3,d#4] a3 g3 a2@2 [a2,e3,a3]!2 g2 [a2,e3,a3]!2 g2 [a2,e3,a3]", // A5 D#5 A5
  L: "[[a2,e3,a3] g2@2 [a2,e3,a3] a2 c3 b2 a2!2 [a2,e3,a3]!2 g2 [a2,e3,a3]!2 g2 [a2,e3,a3]@2 [g3,e4] g3 d3 [g#3,f4] d3 [a3,f#4] a2@2 [a2,e3,a3]!2 g2 [a2,e3,a3]!2 g2 [a2,e3,a3]]/2", // A5 C C# D A5
  M: "[a2,e3,a3] g2@2 [a2,e3,a3] a2 c3 b2 a2@2 [a2,e3,a3]!2 g2 [a2,e3,a3]!2 g2 [a2,e3,a3]", // A5
  N: "[a2,e3,a3] g2@2 [a2,e3,a3] a2 a#3 g#3 a2@2 [a2,e3,a3]!2 g2 [a2,e3,a3]!2 g2 [a2,e3,a3]", // A5
  O: "[[a2,e3,a3] g2@2 [a2,e3,a3] a2 c3 b2 a2!2 [a2,e3,a3]!2 g2 [a2,e3,a3]!2 g2 [a2,e3,a3]@5 [d#3,a#3,g4] [d3,a3,f#4] [c3,g3,e4] [d3,a3,f#4]@3 [c3,g3,e4]@2 c3 [c3,g3,e4]!3]/2", // A5 D# D C D C
  P: "d3 [a3,f#4] [d#3,a#3,g4]@2 [d3,a3,f#4]@2 [c3,g3,e4] [d3,a3,f#4]@3 [c3,g3,e4]@2 c3 [c3,g3,e4]!3", // D D# D C D C
  Q: "d3 [a3,f#4] [d#3,a#3,g4]@2 [d3,a3,f#4] a2 c#3 a2 d3 a3 d3 d#3 a#3 e3 b3 g#4", // D D# D
  R: "f3 c4 f#3 c#4 g4 d4!2 a2 g2 [a2,e3,a3]!2 g2 [a2,e3,a3]!2 g2 [a2,e3,a3]", // A5
  S: "[[a2,e3,a3] g2@2 [a2,e3,a3] a2 c3 b2 a2 g2 [a2,e3,a3]!2 g2 [a2,e3,a3]!2 g2 [a2,e3,a3]@6 [c#3,d3] [f#2,g#2,a2,b2] e2 [g3,c4,e4]@2 ~ g4 ~@2 [a3,d4,f#4]@6 [c4,f4,a4]@2 ~ c5 ~@2 [d4,g4,b4]@6]/3", // A5 Dmaj7 G#m7 C D F G
  T: "[[f4,a#4,d5]@2 ~ f5 ~@2 [g4,c5,e5]@6 [e4,a4,c#5]@11 ~@3 [e4,g#4,b4]!3 [e4,a4,c#5]!2 [e4,a4,c#5]@2 [e4,g#4,b4]!2 [e4,g#4,b4]@2 [e4,a4,c#5]!2 [e4,a4,c#5]@3 ~@2 [b2,f#3,b3,d#4]@4]/3", // A# C A E A E A B
  U: "~@2 a#3 [a#3,c#4,f#4] [a#3,c#4,f#4]@5 ~ [g#3,b3,e4]!2 [g#3,b3,e4]@4", V: "~@2 b2!10 [b2,f#3,b3,d#4]@4",
  W: "~@2 a#3 [a#3,c#4,f#4] [a#3,c#4,f#4]@6 ~ [d3,a3,d4]@3 [d3,a3,d4,f#4]@2", // F# D5 D
  X: "~ e3 f3 [b3,e4] b3 f3 e3 [a3,c#4] [c#4,e4] [a3,c#4] e3 ~ [b2,f#3,b3,d#4]@4", Y: "~@2 e3 b2!9 [b2,f#3,b3,d#4]@3 ~",
  Z: "[~ [b3,d4,g4]@2 ~ [b3,e4,g#4]@5 [c#4,e4,a4]@2 ~ [c#4,f#4]@2 ~ [c#4,f#4,a#4]@2 ~ [b2,f#3,b3,d#4]@2 ~@4 g#2 ~@3 g2 [a2,e3,a3]!2 g2]/2", // G E A F#5 F# B A5
  AA: "[a2,e3,a3]!2 g2 [a2,e3,a3]!2 g2@2 [a2,e3,a3] a2 c3 b2 a2!2 [a2,e3,a3]!2 g2", // A5
  AB: "[a2,e3,a3]!2 g2 [a2,e3,a3]!2 g2@2 [a2,e3,a3] [a#3,d#4] a3 g3 a2@2 [a2,e3,a3]!2 g2", // A5 D#5 A5
  AC: "[a2,e3,a3]!2 g2 [a2,e3,a3]@2 [g3,e4] g3 d3 [g#3,f4] d3 [a3,f#4] a2@2 [a2,e3,a3]!2 g2", // A5 C C# D A5
  AD: "[a2,e3,a3]!2 g2 [a2,e3,a3]!2 g2@2 [a2,e3,a3] a2 c3 b2 a2@2 [a2,e3,a3]!2 g2", // A5
  AE: "[a2,e3,a3]!2 g2 [a2,e3,a3]!2 g2@2 [a2,e3,a3] a2 a#3 g#3 a2@2 [a2,e3,a3]!2 g2", // A5
  AF: "[a2,e3,a3]!2 g2 [a2,e3,a3]@5 [d#3,a#3,g4] [d3,a3,f#4] [c3,g3,e4] [d3,a3,f#4]@3 [c3,g3,e4]@2", // A5 D# D C D C
  AG: "c3 [c3,g3,e4]!3 d3 [a3,f#4] [d#3,a#3,g4]@2 [d3,a3,f#4]@2 [c3,g3,e4] [d3,a3,f#4]@3 [c3,g3,e4]@2", // C D D# D C D C
  AH: "c3 [c3,g3,e4]!3 d3 [a3,f#4] [d#3,a#3,g4]@2 [d3,a3,f#4] a2 c#3 a2 d3 a3 d3 d#3", // C D D# D
  AI: "a#3 e3 b3 g#4 f3 c4 f#3 c#4 g4 d4!2 a2 g2 [a2,e3,a3]!2 g2", // A5
  AJ: "[a2,e3,a3]!2 g2 [a2,e3,a3]!2 g2@2 [a2,e3,a3] a2 c3 b2 a2 g2 [a2,e3,a3]!2 g2", // A5
  AK: "[a2,e3,a3]!2 g2 [a2,e3,a3]@6 [c#3,d3] [f#2,g#2,a2,b2] e2 [g3,c4,e4]@2 ~ g4", // A5 Dmaj7 G#m7 C
  AL: "[~@2 [a3,d4,f#4]@6 [c4,f4,a4]@2 ~ c5 ~@2 [d4,g4,b4]@6 [f4,a#4,d5]@2 ~ f5 ~@2 [g4,c5,e5]@6]/2", // D F G A# C
  AM: "[e4,a4,c#5]@11 ~@3 [e4,g#4,b4]!2", // A E
  AN: "[e4,g#4,b4] [e4,a4,c#5]!2 [e4,a4,c#5]@2 [e4,g#4,b4]!2 [e4,g#4,b4]@2 [e4,a4,c#5]!2 [e4,a4,c#5]@3 ~@2", // E A E A
  AO: "[b2,f#3,b3,d#4]@5 ~ a#3 [a#3,c#4,f#4] [a#3,c#4,f#4]@5 ~ [g#3,b3,e4]!2", AP: "[g#3,b3,e4]@5 ~ b2!10",
  AQ: "[[b2,f#3,b3,d#4]@5 ~ a#3 [a#3,c#4,f#4] [a#3,c#4,f#4]@6 ~ [d3,a3,d4]@3 [d3,a3,d4,f#4]@3 e3 f3 [b3,e4] b3 f3 e3 [a3,c#4] [c#4,e4] [a3,c#4] e3 ~]/2", // B F# D5 D E5 A C#m A
  AR: "[g#3,b3,e4]@5 ~ e3 b2!9", AS: "[b2,f#3,b3,d#4]@3 ~@2 [b3,d4,g4]@2 ~ [b3,e4,g#4]@5 [c#4,e4,a4]@2 ~",
  AT: "[c#4,f#4,a#4]@2 ~ [c#4,f#4]@2 ~ [b2,f#3,b3,d#4]@8 ~@2", // F# F#5 B
  AU: "[[b2,f#3,b3,d#4]@6 ~@6 [g#2,d#3] [f#2,c#3] d#3 [f#2,c#3]@3 [e2,b2]@2 [e2,b2]!2 ~@2 b2!2 [g2,d3]@2 [f#2,c#3]@2 e2 [f#2,c#3]@3 [e2,b2]@2 [e2,b2]!2 ~@2 b2!2 [g2,d3]@2 [f#2,c#3]@2 e2 [f#2,c#3]@3 [e2,b2]@2 [e2,b2]!2 ~@2 b2!2 [g2,d3]@2 [f#2,c#3]@2 e2 [f#2,c#3]@3 [e2,b2]@2 [e2,b2]!2 ~@2 b2!2 [g2,d3]@2 [f#2,c#3]@2 e2 [f#2,c#3]@3 [e2,b2]@2 [e2,b2]!2 ~@2 b2!2 [g2,d3]@2 [f#2,c#3]@2 e2 [f#2,c#3]@3 [e2,b2]@2 [e2,b2]!2 ~@2 b2!2 [g2,d3]@2 [f#2,c#3]@2 e2 [f#2,c#3]@3 [e2,b2]@2 [e2,b2]!2 ~@2 b2!2 [g2,d3]@2 [f#2,c#3]@2 e2 [f#2,c#3]]/8", // B G#5 F#5 E5 G5 F#5 E5 G5 …
  AV: "~@2 [e2,b2]@2 [e2,b2]!2 ~@2 b2!2 [g2,d3]@2 [f#2,c#3]@2 e2 [f#2,c#3]", // E5 G5 F#5
  AW: "f#3@2 a3 b3 d4 b3 d#4 b3 a3 b3 d4 c4 f#4 b3 a3 b3",
  AX: "d4 b3 e4 [d4,e4] f4@2 e4 b4 a4 f#4 a4 b4 a4@2 [f4,b4] a4", // Dsus2 Fdim
  AY: "c5 [f4,b4,c5] [f4,b4]!4 [b4,c5]!2 c5 [b4,c5] [f4,b4]!3 b4 ~@2", AZ: "f4 e4 ~ d4 e4 [e4,f4] d4@8 b4@2",
  BA: "~@2 d4 f#4@2 c5 e4@2 e4 a4 d4 e4 c5 e4 f#4 a4", BB: "e4@2 b4 c#5@4 ~ b4@2 f#4 f#4@3 e4 d4, ~@11 a4 ~@4",
  BC: "c4@2 ~ [e5,f#5] [f#4,a4,b4,d5] [e4,f#4,a4,b4] f#4 [d4,e4] e4@2 e4 [d4,e4] c4 ~@3", // Esus2 Bm7 Esus4 Dsus2
  BD: "d4 d#4 b3 f#3 a3 [f3,f#3] e3 d3 e3@5 ~ f4@2", BE: "~ b4 d#4 f#4 c5 f4 g4 [f4,c#5]@2 [f#4,d5]@2 ~ f#4 c5 e4 g4",
  BF: "[c#5 f4 g#4 [f#4,d5]@2 [g4,d#5]@2 ~ g4 c#5 f4 g#4 d5 f#4 a4 [g4,d#5]@2 [g#4,e5]@2 ~ a4 d5 f#4 a4 d#5 g4 a#4 [g#4,e5]@2 [a4,f5]@2 ~]/2", // D Cm C#m Dm
  BG: "a4 d#5 g4 a#4 e5 g#4 b4 [a4,f5]@2 f#5 e5 g5 c5 g#5 e5 c#5", BH: "[a5@28 g5 [e5,f5] [c5,d5] b4]/2",
  BI: "[b2,f#3,b3,d#4]@5 ~ a#3 [a#3,c#4,f#4] [a#3,c#4,f#4]@6 ~@2", // B F#
  BJ: "[a3,d4,f#4]@3 [a3,d4,f#4]@2 [b3,d4,g4]@2 ~ [b3,e4,g#4]@2 ~ [b3,e4,g#4]@2 [c#4,e4]@2 ~", // D G E C#m
  BK: "[c#4,f#4,a#4]@2 ~ [c#4,f#4,a#4]@2 ~ [b2,f#3,b3,d#4] [f#3,b3,d#4]@7 ~@2, ~@7 b2@9", // F# B
})).s("gm_overdriven_guitar").gain(0.2)

// chords · overdriven guitar · "Backing Guitar" · E A E A
const overdriven_guitar_2 = note(`<
  ~@91
  [[e4,g#4,b4] [e4,a4,c#5]!2 [e4,a4,c#5]@2 [e4,g#4,b4]!2 [e4,g#4,b4]@2 [e4,a4,c#5]!2 [e4,a4,c#5]@3 ~@2]
  ~@17
>`).s("gm_overdriven_guitar").gain(0.29)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@4 A@3 B C@2 D E F@2 G@3 H I J@2 H I K@2 L M N O P Q@2 R@3 S@2 T U S V W@2 X Y X Z AA Y AA AB AC AD AE@2 AF AG AH AI
  AJ@2 S@2 AK@2 S AL AM AN AO@8 AP AQ@8 AR AS@2 AT AU AV S@2 AK@2 S AL AW@2 S@2 AW@2 S@2 AX AY AZ
>`.pickRestart({
  A: "[~@12 b2@10 g2@3 a2@2 ~ g2 a2 b2@10 g2@3 a2@2 ~ g2 a2]/3", B: "b2@10 g2@3 a2@2 ~",
  C: "[g2 a2 b2@10 g2@3 a2@2 ~ g2 a2 b2@10 g2@2]/2", D: "~ a2@2 ~ g2 a2 b2@10",
  E: "g2@3 a2@2 ~ g2 a2 b2@2 ~ a2@2 b2 a2@2", F: "[e2@2 ~ d2@2 ~ f#2@13 ~@13]/2",
  G: "[~@13 b2@2 e2@7 ~ f#2 a2 b2@2 a2 b2!2 a2 b2@6 ~@2 e2 g2 a2!2 g2 a2!2 g2 a2]/3",
  H: "a2 g2 a2 g2 a2 c3 b2 a2@2 a2!2 g2 a2!2 g2 a2", I: "a2 g2 a2 g2 d#3 d3 c3 a2@2 a2!2 g2 a2!2 g2 a2",
  J: "[a2 g2 a2 g2 a2 c3 b2 a2!4 g2 a2!2 g2 a2@2 a2 c3 a2 c#3 a2 d3 a2@2 a2!2 g2 a2!2 g2 a2]/2",
  K: "[a2 g2 a2 g2 a2 c3 b2 a2!4 g2 a2!2 g2 a2@3 d#3@2 d#3 d3 c3 d3 d3@2 c3!6]/2", L: "d3!2 d#3@2 d3!2 c3 d3 d3@2 c3!6",
  M: "c3!2 c3@2 d#3 d3 c3 d3 d3@2 c3!6", N: "d3!2 d#3@2 d3 a2 c3 a2 d3@2 d3 d#3@2 e3!3",
  O: "f3!2 f#3 a3 g3 e3 a2 a2@2 a2!2 g2 a2!2 g2 a2", P: "a2 g2 a2 g2 a2 c3 b2 a2 ~ a2!2 g2 a2!2 g2 a2",
  Q: "[a2 a3!7 c3@5 ~ d3@5 ~ f2@5 ~ g2@3 d3 g3 d3]/2", R: "[a#2@5 ~ c3@5 ~ a2@21 ~ a3@10 b2!4]/3", S: "b2!16",
  T: "b2!11 d#3@2 d3@3", U: "~ d3!3 e3 g#2!3 a2!2 a#2!2 b2!4", V: "b2!2 e3 f#3 b3@2 b3!4 e3 f#3 b2@3 ~",
  W: "[~ g2@2 ~ e2@5 a2@2 ~ f#2@2 ~ f#2@2 ~ b2@5 ~ b1@2 ~ e2 g2 a2!2 g2]/2",
  X: "a2!2 g2 a2!2 g2 a2 g2 a2 c3 b2 a2!4 g2", Y: "a2!2 g2 a2!2 g2 a2 g2 d#3 d3 c3 a2@2 a2!2 g2",
  Z: "a2!2 g2 a2@2 a2 c3 a2 c#3 a2 d3 a2@2 a2!2 g2", AA: "a2!2 g2 a2!2 g2 a2 g2 a2 c3 b2 a2@2 a2!2 g2",
  AB: "a2!2 g2 a2@3 d#3@2 d#3 d3 c3 d3 d3@2 c3!2", AC: "c3!4 d3!2 d#3@2 d3!2 c3 d3 d3@2 c3!2",
  AD: "c3!6 c3@2 d#3 d3 c3 d3 d3@2 c3!2",
  AE: "[c3!4 d3!2 d#3@2 d3 a2 c3 a2 d3@2 d3 d#3@2 e3!3 f3!2 f#3 a3 g3 e3 a2 a2@2 a2!2 g2]/2",
  AF: "a2!2 g2 a2!2 g2 a2 g2 a2 c3 b2 a2 ~ a2!2 g2", AG: "a2!2 g2 a2!2 a3!7 c3@4", AH: "~@2 d3@5 ~ f2@5 ~ g2@2",
  AI: "~ d3 g3 d3 a#2@5 ~ c3@5 ~", AJ: "[a2@21 ~ a3@10]/2", AK: "[b2!15 d#3@2 d3@4 d3!3 e3 g#2!3 a2!2 a#2!2]/2",
  AL: "b2!6 e3 f#3 b3@2 b3!4 e3 f#3", AM: "b2@3 ~@2 g2@2 ~ e2@5 a2@2 ~", AN: "f#2@2 ~ f#2@2 ~ b2@10",
  AO: "[b2@6 ~@2 d3@3 ~ g2 f#2 e2 f#2@3 e2@2 ~ e2 ~@4 g2@2 f#2@2 e2 f#2@3 e2@2 ~ e2 ~@6 g2 f#2 e2 f#2@3 e2@2 ~ e2 ~@6 g2 f#2 e2 f#2@3 e2@2 ~ e2 ~@6 g2 f#2 e2 f#2@3 e2@2 ~ e2 ~@6 g2 f#2 e2 f#2@3 e2@2 ~ e2 ~@6 g2 f#2 e2 f#2@3 e2@2 ~ e2 ~@6 g2 f#2 e2 f#2]/8",
  AP: "~@2 e2@2 ~ e2 ~@6 g2 f#2 e2 f#2",
  AQ: "[b2@2 a2!8 c3@2 b2@2 a2 b2@3 a2!8 c3@2 b2@2 a2 b2@3 a2!8 c3@2 b2@2 a2 b2@3 a2!8 c3@2 b2@2 a2 b2@3 a2!8 c3@2 b2@2 a2 b2@3 a2!8 c3@2 b2@2 a2 b2@3 a2!8 c3@2 b2@2 a2 b2@3 a2!8 c3@2 b2@2 a2 b2]/8",
  AR: "b2!3 b3 c3 c4 c#4 c#3@2 d3@2 ~ c3!3 c4",
  AS: "[c#3 c#4 d4 d3@2 d#3@2 ~ c#3!3 d4 d3 d4 d#4 d#3@2 e3@2 ~ d3!3 d4 d#3 d#4 e4 e3@2 f3@2 ~]/2",
  AT: "d3!3 d#4 e3 e4 f4 f3@2 f#3@2 g3@2 g#3@2 e2", AU: "a2@13 ~@3", AV: "a2@6 ~@2 a3!4 a2 a3!3",
  AW: "[b2!15 d#3@2 d3@4 d3!3 e3 g#2!2 a2!2 a#2!2 ~]/2", AX: "b2!15 ~", AY: "d3@5 g2@2 ~ e3@5 a2@2 ~",
  AZ: "f#3@2 ~ f#3@2 ~ b2@10",
})).s("gm_electric_bass_pick").gain(0.15)

// drums · kick
const kick = s("bd").struct("<~@34 A ~@5 B ~ C ~@17 D ~@30 D ~@17>".pickRestart({
  A: "~@10 x!2 ~@4", B: "~@3 x", C: "~ x", D: "~@14 x!2",
})).gain(0.33)

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

// drums · clap
const clap = s("cp").struct("<~@107 [~@4 x!4 ~@8] ~>").gain(0.33)

// drums · hihat
const hihat = s("hh").struct("<~@41 [~@15 x] ~@67>").gain(0.33)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@14 A ~ B C@2 D E C@2 D E F@3 G D H I J ~ K L@3 M L@2 N O P@3 M P@3 M Q@3 R P M S I ~ T U@3 V U@2 W X Y Z@7 AA Z@8
  ~@5 T U@3 V U@11 AB AC
>`.pickRestart({
  A: "~@13 x ~ x", B: "~ x", C: "x!2 ~ x!2 ~@3", D: "x!2 ~ x!2 ~ x!2", E: "x!2 ~ x!6 ~@7", F: "x!3 ~",
  G: "x ~@3 x!5 ~@7", H: "x!2 ~ x!6 ~@5 x ~", I: "x!5 ~@5 x ~ x!4", J: "x ~@5 x ~ x!4 ~@4",
  K: "~@3 x!4 ~@2 x ~@2 x ~@3", L: "~ x ~ x", M: "x ~ x ~ x!2 ~ x!6 ~@3", N: "~ x ~@2 x ~@4 x ~@2 x ~@2 x",
  O: "~ x ~@2 x ~ x ~", P: "~@2 x!2 ~ x!2 ~", Q: "~ x!3", R: "~@4 x ~@3 x!5 ~@3", S: "~@2 x ~ x!5 ~@5 x ~",
  T: "~@7 x!4 ~@2 x ~@2", U: "x!2", V: "x ~@3 x ~ x ~ x!2 ~ x!5", W: "x ~@4 x ~@2 x ~@4 x ~@2",
  X: "x ~@2 x ~@2 x ~@5 x ~@3", Y: "~@8 x!4 ~@4", Z: "x!2 ~@2 x ~@3", AA: "x ~ x ~@5 x ~@3 x!2 ~@2", AB: "x!16",
  AC: "x ~@2 x ~@2 x ~@9",
})).gain(0.33)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@20 A ~@3 A ~@5 A ~@3 B ~@3 C ~@7 C ~@3 C ~@5 C ~@3 D ~@3 E ~@4 F ~@7 G ~@8 H I J K ~ D ~@3 E ~@13
>`.pickRestart({
  A: "~@3 x!5 ~@8", B: "~@7 x!2 ~@7", C: "~@7 x!5 ~@4", D: "~@11 x!2 ~@3", E: "~@11 x!5", F: "~@8 x!8", G: "~@12 x!4",
  H: "x!8 ~ x ~@2 x!4", I: "x!4 ~ x ~@2 x!8", J: "~ x ~@2 x!8 ~ x ~@2", K: "x!8 ~ x!7",
})).gain(0.33)

// drums · crash
const crash = s("cr").struct(`<
  A B C D E F G H I J B C K L M N O P@3 O P@3 Q R@3 S P T U V L W X@3 Y X Z AA AB P@3 Y P@3 Y AC@3 AD P AE T U L AF AG@3
  AH AG@2 AI AJ ~ P AK P AK P AK P AL P@8 AM AN AO AP L AF AG@3 AH AG@11 ~ AQ
>`.pickRestart({
  A: "~@6 x!2 ~@2 x!2 ~@2 x!2", B: "~@2 x!3 ~@3 x!2 ~@2 x!2 ~@2", C: "x!2 ~@2 x!3 ~@3 x!2 ~@2 x!2",
  D: "~@2 x!2 ~@2 x!3 ~@3 x!2 ~@2", E: "x!2 ~@2 x!2 ~@2 x!3 ~@3 x!2", F: "~@2 x!2 ~@2 x!2 ~@2 x!3 ~@3",
  G: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!3 ~", H: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", I: "x ~@3 x!2 ~@2 x!2 ~@2 x!2 ~@2",
  J: "x!3 ~@3 x!2 ~@2 x!2 ~@2 x!2", K: "~@2 x!2 ~@2 x!3 ~@3 x ~@3", L: "x!4", M: "x ~@3 x ~@8 x ~ x", N: "~@8 x!8",
  O: "~@4 x!4", P: "x!8", Q: "~@4 x!3 ~", R: "~ x!2 ~@2 x!4 ~ x ~ x ~@3", S: "~ x!2 ~@5 x ~ x ~ x ~ x ~", T: "~ x",
  U: "~ x ~@2", V: "x ~@2 x", W: "x ~@5 x!2", X: "x!5 ~ x!2", Y: "x!2 ~@4 x!2", Z: "x!5 ~ x ~",
  AA: "~ x ~@2 x ~@4 x ~@2 x ~@2 x", AB: "~ x ~@4 x!2", AC: "x ~@4 x!2 ~@2 x!4 ~ x ~", AD: "x ~@4 x!2 ~@5 x ~ x ~",
  AE: "x!2 ~@4 x ~", AF: "x!2 ~@2", AG: "x!7 ~", AH: "x!4 ~@4", AI: "x ~@4 x ~@2 x ~@3 x!2 ~@2", AJ: "~@3 x ~@4",
  AK: "x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~@2", AL: "x!6 ~@2", AM: "~@7 x ~ x ~@6", AN: "~@3 x ~ x ~@9 x",
  AO: "~ x ~@9 x ~ x ~@2", AP: "~@7 x ~@8", AQ: "x ~@2 x ~@2 x ~@9",
})).gain(0.33)

// drums · ride
const ride = s("rd").struct("<~@35 A@3 ~ A@2 ~@20 B@3 ~ B@2 ~ C ~@23 B@3 ~ B@11 ~@2>".pickRestart({
  A: "~@5 x ~@2", B: "~@7 x", C: "x ~@2 x ~@8 x ~@3",
})).gain(0.33)

// drums · tambourine
const tambourine = s("tb").struct("<~@20 A ~@3 A ~@5 A ~@7 B ~@7 B ~@3 B ~@5 B ~@7 C ~@4 D ~@25 C ~@13>".pickRestart({
  A: "x", B: "~ x ~@2", C: "~ x", D: "x!2 ~@2",
})).gain(0.33)

// drums · cowbell
const cowbell = s("cb").struct("<~@20 A ~@3 A ~@5 A ~@7 B ~@3 C ~@3 B ~@3 B ~@5 B ~@7 D ~@30 D ~@13>".pickRestart({
  A: "~ x ~@14", B: "~@5 x ~@10", C: "~ x ~@6", D: "~@9 x ~@6",
})).gain(0.33)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@67 x [~@3 x ~@4] ~@40>").gain(3.86)

// drums · bongos
const bongos = s("bongo:4").struct("<~@77 [~@12 x!4] ~@31>").gain(0.86)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@31
  [~@2 x!2 ~@10 x!2]
  [~@10 x!2 ~@4]
  ~@24
// … 35 more lines

More by Van Halen