Strudelify

Hey You

No Doubt

KeyD majorTempo120 bpm
0:00/0:00
// Hey You — No Doubt
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 6/4 at bar 28, 4/4 at bar 29, 6/4 at bar 53, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 98 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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.

// other · sitar · "Sitar (Aloke DasGupta)"
const sitar = note("<A@2 B@2 ~@15 C ~@8 D ~@12 E ~@7 E ~@15 F ~@12 G ~@7 G ~@11>".pickRestart({
  A: "[d5 c5 a4 g4 f#4 d4@4 ~@2 d4@16 ~@5, ~@9 c4@4 ~@19]/2", B: "[~@8 f#5 d5 a4 g4 f#4 d4@16 ~@3]/2",
  C: "~@8 d5 [c5,d5] [a4,c5] [g4,a4] [f#4,g4] [d4,f#4] d4@2", D: "~@6 c4 ~@9",
  E: "d5 [c5,d5] [a4,c5] [g4,a4] [f#4,g4] [d4,f#4] d4@2 ~@8", F: "~@9 [d5,f#5] ~@6",
  G: "~@2 d5 [c5,d5] [a4,c5] [g4,a4] [f#4,g4] [d4,f#4] d4@2 ~@6", // Csus2 Am Gsus2 Gmaj7 D
})).s("gm_sitar").gain(0.2)

// other · sitar · "Sitar (Aloke DasGupta)" · soft notes
const sitar_soft = note("<~@19 [f#5 d5 a4 g4 f#4 d4@4 ~@7] ~@20 [~@8 f#5 d5 a4 g4 f#4 d4@3] ~@57>")
  .s("gm_sitar").gain(0.1)

// chords · distortion guitar · "Guitar (Tom Dumont)"
const distortion_guitar = note(`<
  ~ A B C D C D E@3 F G H E I J K J L@2 M@4 N@3 O P Q@3 R S T Q U V W@2 X@3 Y@4 Z@4 AA@2 AB@2 AC@2 AD AE AF AE@2 AG AF@2
  AH AE@2 AI@2 AJ AK@3 AJ AK@2 AL@5 AM@8 AN@4 AO@4
>`.pickRestart({
  A: "~@8 c3 ~ c3 ~ c3 ~ c3 ~",
  B: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2", // C5
  C: "d3@4 [d4,f#4]@3 [d4,f#4] a2 ~ a2 ~ [c4,e4]@4", D: "d3@4 [d4,f#4]@3 [d4,f#4] a2 ~ a2 ~ d#4@2 g4@2",
  E: "d3 ~@3 [d4,f#4] ~@2 [d4,f#4] a2 ~ a2 ~ [e4,a4] ~@3", F: "d3 ~@3 [d4,f#4] ~@2 [d4,f#4] a2 ~ a2 ~ a3@2 c4@2",
  G: "d3 ~@3 [d4,f#4] ~@2 [d4,f#4] a2 ~ a2 ~ [c4,e4] ~@3", H: "d3 ~@3 [d4,f#4] ~@2 [d4,f#4] a2 ~ a2 ~ [c4,e4]@4",
  I: "d3 ~@3 [d4,f#4] ~@2 [d4,f#4] a2 ~ a2 ~ [c4,e4]@2 ~@2", // D C
  J: "[g3,d4,g4] ~@3 [g3,d4,g4] ~@3 [a3,e4,a4] ~@3 [a3,e4,a4] ~@3", // G5 A5
  K: "[b3,f#4,b4] ~@3 [b3,f#4,b4] ~@3 [a3,e4,a4] ~@3 [a3,e4,a4] ~@3", // B5 A5
  L: "[[g3,d4,g4] ~@3 [g3,d4,g4] ~@3 [e3,b3,e4]@24]/2", // G5 E5
  M: "[~@8 d4@4 ~ a3 ~@10 f#4@3 ~ g4!4, d4@8 ~@4 d4@4 [c4,d4]@8 ~@3 f#4@5, ~@2 [c4,f#4]@4 ~ a3@4 ~@5, ~@5 e4@2 ~]/4", // Csus2 Cdim
  N: "[~@8 d4@4 ~ a3 ~@2 d4@4 d4@4, d4@2 ~ d4 c4@2, ~@4 [c4,f#4]@8 ~@2 a3@7 ~@3]/3", // Cdim
  O: "[g3,c4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~@7", P: "~@8 d3 ~@3 [d4,f#4] ~@2 [d4,f#4]",
  Q: "a2 ~ a2 ~ [e4,a4] ~@3 d3 ~@3 [d4,f#4] ~@2 [d4,f#4]", R: "e4@3 g4 e4@3 g4 d3 ~@3 [d4,f#4] ~@2 [d4,f#4]",
  S: "a2 ~ a2 ~ [c4,e4] ~@3 d3 ~@3 [d4,f#4] ~@2 [d4,f#4]", T: "a2 ~ a2 ~ [c4,e4]@4 d3 ~@3 [d4,f#4] ~@2 [d4,f#4]",
  U: "a2 ~ a2 ~ [c4,e4]@2 ~@2 [g3,d4,g4] ~@3 [g3,d4,g4] ~@3", // C G5
  V: "[a3,e4,a4] ~@3 [a3,e4,a4] ~@3 [b3,f#4,b4] ~@3 [b3,f#4,b4] ~@3", // A5 B5
  W: "[a3,e4,a4] ~@3 [a3,e4,a4] ~@3 [g3,d4,g4] ~@3 [g3,d4,g4] ~@3", // A5 G5
  X: "[[e3,b3,e4]@3 ~@2 d4, ~@3 d4@2 ~, ~@2 [c4,f#4]]/3", // E5 Cdim
  Y: "[~ a3 ~@10 f#4@3 ~ g4!4 ~@8 d4@4, d4@4 [c4,d4]@8 ~@3 f#4@5 ~@12, ~@2 a3@7 ~@15 [c4,f#4]@8, ~@2 e4@2 ~ d4@2 ~]/4", // Csus2 Cdim
  Z: "[~ a3 ~@2 [c4,d4]@4 c4@10 ~@10 d4@4, d4 ~@4 d4@2 ~, ~@2 a3@7 ~@15 [c4,f#4]@8]/4", // Csus2 Cdim
  AA: "[~@2 a3@2 ~@12 e4@8 f#4@3 g4@3 a4@2, d4 [c4,d4]@2 ~, ~@2 a3@7 ~@7]/2", // Csus2
  AB: "[g4@3 f#4@3 d4@3 ~@16 d4@7, ~@9 d4@16 ~@7, ~@17 [c4,f#4]@15]/2", // Cdim
  AC: "[~@3 a3@2 ~@4 [c4,d4]@8 c4@15, ~ d4@8 ~@23, ~@5 a3@14 ~@13]/2", // Csus2
  AD: "~ [c3,g3,c4]@2 ~ [c3,g3,c4]@2 ~ [c3,g3,c4] ~ d3 ~@3 [d4,f#4] ~@2", // C5 D
  AE: "[d4,f#4] a2 ~ a2 ~ [c4,e4] ~@3 d3 ~@3 [d4,f#4] ~@2", AF: "[d4,f#4] a2 ~ a2 ~ [c4,e4]@4 d3 ~@3 [d4,f#4] ~@2",
  AG: "[d4,f#4] a2 ~ a2 ~ e4@2 g4@2 d3 ~@3 [d4,f#4] ~@2", AH: "[d4,f#4] a2 ~ a2 ~ [c4,e4]@2 ~@2 d3 ~@3 [d4,f#4] ~@2",
  AI: "[[d4,f#4] a2 ~ a2 ~ [c4,e4] ~ a2 ~ f#4@3 g4@3 a4@2 g4@3 f#4@3 d4@3 [g3,d4,g4] ~@3 [g3,d4,g4] ~]/2", // D C G5
  AJ: "~@2 [a3,e4,a4] ~@3 [a3,e4,a4] ~@3 [b3,f#4,b4] ~@3 [b3,f#4,b4] ~", // A5 B5
  AK: "~@2 [a3,e4,a4] ~@3 [a3,e4,a4] ~@3 [g3,d4,g4] ~@3 [g3,d4,g4] ~", // A5 G5
  AL: "[~ [e3,b3,e4]@12 ~@8 d4@4 ~ a3 ~@10 f#4@3, ~@13 d4@8 ~@4 d4@4 [c4,d4]@8 ~@3, ~@17 [c4,f#4]@8 ~@2 a3@7 ~@6, ~@33 e4@7]/5", // E5 Csus2 Cdim
  AM: "[~ g4!4 ~@8 d4@4 ~ a3 ~@2 [c4,d4]@4 c4@10 ~@10 d4@4 ~ a3 ~@10 f#4@3, f#4@5 d4@8 ~@4 d4@4 ~@16 d4@8 ~@4 d4@4 [c4,d4]@8 ~@3, ~@9 [c4,f#4]@8 ~@2 a3@7 ~@15 [c4,f#4]@8 ~@2 a3@7 ~@6, ~@57 e4@7]/8", // Csus2 Cdim
  AN: "[~@2 g4@2 g4@2 g4@2 g4@2 ~@16 d4@8 ~@2 a3@2 ~@4 d4@8 ~@8 f#4@3 g4@3, f#4@5 d4@8 ~@4 d4@4 ~@11, ~@9 [c4,f#4]@8 ~@2 a3@7 ~@6]/4", // Cdim
  AO: "[a4@4 g4@5 f#4@6 d4@7 [c3,g3,c4]@30 ~@12]/4", // C5
})).s("gm_distortion_guitar").gain(0.41).pan(0.7)

// bass · electric bass finger · "Bass (Tony Kanal)"
const bass = note(`<
  ~ A B C@4 D@8 E@3 F G H I H I H I H J K L@2 M N L@3 O P@2 Q R S T U T U T U T U T U V W X Y X Z AA@7 AB ~@2 AC@2 AD@3
  AE AD@3 AF@2 AG AH AG AH AG AH AG AH@2 AI AH AI AG AH AJ AK@4
>`.pickRestart({
  A: "~@8 c2 ~ c2 ~ c2 ~ c2 ~", B: "c2 ~ c2 ~ c2 ~ c2 ~ c2@2 c2@2 c2@2 c2@2", C: "d2@4 d2@3 d2 a1@2 a1@2 c2@2 c#2@2",
  D: "d2@2 d2@2 a1!2 c2 c#2", E: "g1@3 ~ g1@3 ~ a1@2 e1@2 a1@2 e1@2", F: "g1@3 ~ g1@2 d1@2 c1@5 ~ [d1,e1,f1] [g1,a1]",
  G: "c2 ~, b1 ~@15", H: "d2@4 d2@3 d3 e3 ~ e3 ~ e3@2 a2@2", I: "d2@4 d2@3 d2 a1 ~ a1@2 c2@2 c#2@2",
  J: "c2@2 c2@2 c2@2 c2@2 c2 ~@7", K: "~@2 d2!2", L: "a1!2 c2 c#2 d2@2 d2@2",
  M: "a1@2 a1@2 c2@2 c#2@2 d2@3 ~@2 f#2 ~@2, ~@11 f2@4 ~", N: "a1@3 c2@2 c#2@2 ~ d2@4 d2@4",
  O: "a1@2 a1@2 c2@2 c#2@2 g1@3 ~ g1@3 ~", P: "a1@2 e1@2 a1@2 e1@2 g1@3 ~ g1@3 ~",
  Q: "a1@2 e1@2 a1@2 e1@2 g1@3 ~ g1@2 d1@2", R: "c1@5 ~ [d1,e1,f1] [g1,a1] c2@8, ~@8 b1 ~@7", S: "~@8 d2@4 d2@3 d3",
  T: "e3 ~ e3 ~ e3@2 a2@2 d2@4 d2@3 d2", U: "a1 ~ a1@2 c2@2 c#2@2 d2@4 d2@3 d3",
  V: "e3 ~ e3 ~ e3@2 a2@2 f#2@3 g2@3 a2@2", W: "g2@3 f#2@3 d2@3 d2@4 d2@3", X: "d3 e3 ~ e3 ~ e3@2 a2@2 d2@4 d2@3",
  Y: "d2 a1 ~ a1@2 c2@2 c#2@2 d2@4 d2@3", Z: "d2 c2@2 ~ c2@2 ~ c2 ~ d2@4 d2@3", AA: "d2 a1@2 a1@2 c2@2 c#2@2 d2@4 d2@3",
  AB: "d2 a1@2 a1@2 c2@2 c#2@2 ~@7", AC: "[~@9 f#2@3 g2@3 a2@2 g2@3 f#2@3 d2@3 g1@3 ~ g1@2]/2",
  AD: "~@2 a1@2 e1@2 a1@2 e1@2 g1@3 ~ g1@2", AE: "e2@2 d2@2 b1@2 a1@2 d1@2 g1@3 ~ g1@2",
  AF: "[d1@2 c1@5 ~ [d1,e1,f1] [g1,a1] c2@8 ~@8 d2@4 d2@2, ~@10 b1 ~@21]/2", AG: "~ d3 e3 ~ e3 ~ e3@2 a2@2 d2@4 d2@2",
  AH: "~ d2 a1 ~ a1@2 c2@2 c#2@2 d2@4 d2@2", AI: "~ d2 a1 ~ c2@2 a1@2 g1@2 d2@4 d2@2", AJ: "~@10 f#2@3 g2@3",
  AK: "[a2@4 g2@5 f#2@6 d2@7 c2@30 ~@12]/4",
})).s("gm_electric_bass_finger").gain(0.51).pan(0.7)

// chords · drawbar organ
const drawbar_organ = note("<~@3 A B A B ~@8 C@5 ~@16 D@4 E ~@28 F@8 G@2 ~@14 H I@4>".pickRestart({
  A: "~@4 [d5,f#5]@3 [a4,d5] [c5,e5] ~ [c5,e5]@2 a4@2 [c5,e5]@2", // D D5 C
  B: "[d5,f#5]@4 [d5,f#5]@3 [a4,d5] [c5,e5] ~ [c5,e5]@2 a4@2 [c5,e5]@2", // D D5 C
  C: "[b4 c5 d5 c5 b4 c5 b4 c5@2 ~, [d4,g4]@7 ~@3]/5", D: "[~ b4 c5 d5 c5 b4 c5 b4, ~ [d4,g4]@7]/4", E: "c5",
  F: "[~@5 b4@4 c5@4 d5@4 c5@4 b4@4 c5@4 b4@4 c5@4 b4@4 c5@4 d5@4 c5@4 b4@4 c5@4 b4@3, ~@5 [d4,g4]@28 ~@4 [d4,g4]@27]/8", // G5
  G: "[~ c5@8 ~@7]/2", H: "~@10 f#4@3 g4@3", I: "[a4@4 g4@5 f#4@6 d4@7 [c4,e4,g4]@30 ~@12]/4",
})).s("gm_drawbar_organ").gain(0.31).pan(0.3)

// other · acoustic guitar steel
const acoustic_guitar_steel = note("<~@57 [~ e5@4 ~@11] ~@40>").s("gm_acoustic_guitar_steel").gain(0.41).pan(0.3)

// chords · flute
const flute = note("<~@57 A B C B C B C B C D@2 E ~@29>".pickRestart({
  A: "~@9 [d5,f#5] ~@3 [d5,f#5] ~@2", B: "~ [e5,g5] ~@3 [e5,g5] ~@3 [f#5,a5] ~@3 [f#5,a5] ~@2",
  C: "~ [e5,g5] ~@3 [e5,g5] ~@3 [d5,f#5] ~@3 [d5,f#5] ~@2", D: "~ [c5,e5] ~@3 [c5,e5] ~@3 [d5,f#5] ~@3 [d5,f#5] ~@2",
  E: "~ [c5,e5] ~@3 [c5,e5] ~@10", // C
})).s("gm_flute").gain(0.2).pan(0.3)

// chords · harpsichord
const harpsichord = note("<~@57 A@3 B@2 C D E F ~@32>".pickRestart({
  A: "[~@9 f#4@2 d4@2 f#4@2 f#4@2 g4@2 d4@2 f#4@2 g4@2 a4@2 d4@2 f#4@2 a4@2 g4@2 f#4 [f#4,g4] e4@2 d4@2 f#4@5 ~ a4]/3", // Gmaj7
  B: "[b4 c5@2 b4@2 a4@2 g4@2 a4@4 f#4@2 e4@10 ~@2 [g4,b4] [a4,c5] [g4,b4]@2 [f#4,a4]]/2", // G Am G F#m
  C: "[g4,b4] [f#4,a4]@2 [e4,g4]@2 [e4,g4]@2 [e4,g4]@2 ~@2 [e4,g4] [f#4,a4] [e4,g4]@2 [d4,f#4]", // G F#m Em F#m Em D
  D: "[e4,g4] [d4,f#4]@2 [c4,e4]@2 [c4,e4]@4 [b3,c4]!7", // Em D C Cmaj7
  E: "b3 c4@2 a3@2 c4@2 d4@2 ~ [e3,g3] [f#3,a3] [g3,b3] [a3,c4] [b3,d4] [c4,e4]", // Em F#m G Am Bm C
  F: "[d4,f#4] [e4,g4] [f#4,a4] [g4,b4] [a4,c5] [b4,d5] [c5,e5] [d5,f#5] ~@8", // D Em F#m G Am Bm C D
})).s("gm_harpsichord").gain(0.41).pan(0.7)

// chords · acoustic guitar steel · B G
const acoustic_guitar_steel_2 = note("<~@28 [e5@3 [b4,b5]@3 [g4,g5]@2 ~@8] ~@69>")
  .s("gm_acoustic_guitar_steel").gain(0.41).pan(0.7)

// other · pad new age
const pad_new_age = note("<~@65 A@4 ~@29>".pickRestart({
  A: "[~@9 d5@48 ~@7]/4",
})).s("gm_pad_new_age").gain(0.41).pan(0.7)

// chords · alto sax
const alto_sax = note(`<
  ~@15 A B C D E F@2 G@2 F@2 H@2 ~@8 I J K L@2 M N@2 O M P@2 Q R S@2 T U@4 ~@8 V@4 W X Y Z AA AB Y Z AC AD AE AF AG AD
  AE AH AI AD AE AF AJ AD AE AH AK ~@4
>`.pickRestart({
  A: "~ g4!2 d4 e4 g4!2 a4", B: "b4!2 d4 e4 ~@3 a4", C: "g4@2 a4@2 g4@2 g4@2 ~@4 g4@2 d4 c4", D: "b3@3 b3@5",
  E: "~@7 d4", F: "[f#4 [f#4,a4]@2 [d4,f#4] [f#4,a4]@2 [f#4,b4] [f#4,a4]@3 [d4,f#4] b3 a3@3 d4, ~@11 d4@4 ~]/2",
  G: "[f#4 [f#4,a4]@2 [d4,f#4] [f#4,a4]@2 [g4,b4] [f#4,a4]@3 ~@5 d4]/2", H: "c4!3 e4 c4!2 ~@2", I: "~@5 g4!2 d4",
  J: "e4 g4!2 a4 b4!2 d4 e4", K: "~@6 a4@2 g4@2 a4@2 g4 a4 g4@2", L: "[~@4 g4@2 d4 c4 b3@6 b3@10 ~@8]/2",
  M: "~@3 d4 f#4 [f#4,a4]@2 [d4,f#4]", // F#m D
  N: "[[f#4,a4]@2 [f#4,b4] [f#4,a4]@3 [d4,f#4] b3 a3@3 d4 f#4 [f#4,a4]@2 [d4,f#4], ~@7 d4@4 ~@5]/2", // F#m B5 F#m D F#m D
  O: "[f#4,a4]@2 [g4,b4] [f#4,a4]@3 ~@2", // F#m G F#m
  P: "[[f#4,a4]@2 [f#4,b4] [f#4,a4]@3 [d4,f#4] b3 a3@3 d4 c4!3 e4, ~@7 d4@4 ~@5]/2", Q: "c4!2 ~@2 c4!3 e4",
  R: "c4!2 ~ d4 f#4 [f#4,a4]@2 [d4,f#4]", // F#m D
  S: "[[f#4,a4]@2 [f#4,b4] [f#4,a4]@3 [d4,f#4] b3 a3 ~@2 d4 f#4 a4!2 f#4, ~@7 d4@2 ~@7]/2", T: "a4 f#4 b4 a4 ~@4",
  U: "[~@6 d4@3 f#4@2 [f#4,a4]@4 [d4,f#4]@2 [f#4,a4]@4 [f#4,b4]@2 [f#4,a4]@6 [d4,f#4]@2 b3@2 a3@2 ~@4 d4@2 c4@2 c4@2 c4@2 e4@2 e4@2 c4@2 ~@2 e4@2 e4@2 c4@2 ~@3, ~@31 d4@4 ~@29]/4", // F#m D F#m B5 F#m D
  V: "[~@13 f#4@2 e4@2 ~@12 f#4@2 a4@2 g4 f#4 g4@2 ~@8 f#4@2 e4@2 ~@15]/4", W: "~@6 g4!2", X: "g4 a4!4 b4!3",
  Y: "c5 ~@3 b4!4", Z: "~@2 g4@2 ~@2 g4@2 g4 e4 d4@6, b4 ~@7, ~ a4@2 ~@13", AA: "g4@10 ~@2 b4@2 b4!2",
  AB: "c5 ~@2 c5!2 b4!3", AC: "g4@5 ~@3", AD: "~@4 d4 f#4 [f#4,a4]@2",
  AE: "[d4,f#4] [f#4,a4]@2 [f#4,b4] [f#4,a4]@3 [d4,f#4]", AF: "b3 a3 ~@2 d4 f#4 [f#4,a4]@2, d4 ~@3",
  AG: "[d4,f#4] [f#4,a4]@2 [g4,b4] [f#4,a4]@3 ~", AH: "b3 a3 ~@2 d4 c4!3, d4 ~@3", AI: "e4 c4!2 ~@5",
  AJ: "[d4,f#4] [f#4,a4]@2 [f#4,b4] [f#4,a4]@3 ~", AK: "e4@2 ~ c4 d4@2 ~@10, ~ d4 ~@6",
})).s("gm_alto_sax").gain(0.51).pan(0.4)

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

// drums · snare
const snare = s("sd").struct(`<
  ~ A B C@3 D E@7 F G@3 H ~ E@7 I J E@7 K L@3 ~ J E@11 M@4 N M@7 O ~ P Q R S@7 ~ T U@14 V W X ~@2
>`.pickRestart({
  A: "~@4 x!4", B: "x!8", C: "~@4 x ~@2 x ~@4 x ~@3", D: "~@4 x ~@2 x!4 ~ x!3 ~", E: "~ x ~ x",
  F: "~@4 x ~@3 x!3 ~ x!3 ~", G: "x ~@3 x ~@3 x ~@3 x!2 ~@2", H: "x!2 ~@2", I: "x!5 ~@3", J: "~@3 x",
  K: "x!3 ~ x!3 ~ x ~@3 x ~@3", L: "x ~@3 x!2 ~@2 x ~@3 x ~@3", M: "~@5 x ~@7 x ~@2", N: "~ x ~@2 x ~@2 x ~@5 x ~@2",
  O: "~@5 x ~@10", P: "~@7 x ~ x ~@6", Q: "~@9 x ~@2 x ~@2 x", R: "~ x ~@2 x ~@2 x ~@2 x ~@3 x ~",
  S: "~@2 x ~@3 x!2 ~@2 x ~@3 x ~", T: "~@7 x", U: "~@3 x ~@3 x", V: "~@2 x!2 ~ x!3 ~ x!2 ~@2 x ~@2",
  W: "x ~@3 x ~@4 x ~@5 x", X: "~@3 x ~@4",
})).gain(0.41).pan(0.6)

// drums · hihat
const hihat = s("hh").struct("<~@15 A@3 B ~@17 C A@3 ~@29 D A@7 E ~@20>".pickRestart({
  A: "x!8", B: "x!4 ~@4", C: "~@4 x!4", D: "~@5 x!3", E: "x",
})).gain(0.41).pan(0.6)

// drums · low tom
const low_tom = s("lt").struct("<~@6 A ~@7 A ~@21 B ~@30 C ~@30>".pickRestart({
  A: "~@11 x ~@3 x", B: "~@3 x ~@3 x ~@8", C: "~@7 x ~ x ~@6",
})).gain(0.41).pan(0.6)

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 A ~@3 B ~@17 C ~@36 D ~@19>".pickRestart({
  A: "~@11 x ~@2 x ~", B: "~@7 x", C: "~@3 x ~@2 x ~@9", D: "~@5 x ~@2 x ~@7",
})).gain(0.41).pan(0.6)

// drums · high tom
const high_tom = s("ht").struct("<~@19 [~@8 x ~@2 x ~@4] ~@20 [~@14 x!2] [x ~@2 x ~@12] ~@36 [x!3 ~@2 x ~@10] ~@19>")
  .gain(0.41).pan(0.6)

// drums · ride
const ride = s("rd").struct("<~@7 A@7 B ~@13 C A@2 B C A@3 ~@59 D ~@2>".pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "~@2 x!2", D: "~@3 x ~@4",
})).gain(0.41).pan(0.6)

// drums · tambourine
const tambourine = s("tb").struct("<~@18 A ~ B@7 ~@13 C D B@10 E F B@3 G ~@19 H I B@14 J ~@4>".pickRestart({
  A: "~@8 x!7 ~", B: "x!16", C: "x!7 ~@9", D: "~@8 x!8", E: "x!8 ~@8", F: "~@9 x!7", G: "x", H: "~@2 x!7 ~@7",
  I: "~@10 x!6", J: "x!2 ~@14",
})).gain(0.41).pan(0.6)

// … 20 more lines

More by No Doubt