Strudelify

Under My Thumb

The Rolling Stones

KeyG majorTempo130 bpm
0:00/0:00
// Under My Thumb — The Rolling Stones
// 130 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 75 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/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 · electric bass finger · "Bass"
const bass = note(`<
  ~@2 A@3 B C@2 D@3 E F G H@3 I J@2 K L@4 M N O P Q R@2 S@2 T U@2 V W@2 X Y Z@2 AA AB@4 AC AD AE@2 AF AG AH@3 AI@3 AJ@3
  AK@2 AL AM@2 AN@4 AO ~
>`.pickRestart({
  A: "[~@6 e2@4 d2@4 b1@5 e2@4 ~@4 e2@9 ~@5 d2@4 c2@4 a1@4 d2@5 ~@4 d2@8 ~@5 c2@4 a#1@5 g1@5 c2@4 ~@3]/3",
  B: "~ c2@9 ~@4 c2@4 a#1@4 ~ g1@4 c2@4 ~", C: "[~@4 c2@9 ~@4 e2@4 d2@4 b1@5 e2@4 ~@4 e2@9 ~@5 d2@5 c2@3 a1@4]/2",
  D: "[~ d2@5 ~@4 d2@8 ~@5 c2@4 a#1@4 g1@5 c2@4 ~@5 c2@9 ~@4 c2@4 a#1@4 g1@5 c2@4 ~@5 c2@9 ~@4 e2@3]/3",
  E: "~ d2@4 b1@5 e2@4 ~@4 e2@9 ~@5", F: "d2@4 c2@4 a1@4 d2@5 ~@4 d2@8 ~@3", G: "~@2 c2@4 a#1@5 g1@5 c2@4 ~@4 c2@8",
  H: "[~@5 c2@4 a#1@4 ~ g1@4 c2@4 ~@5 c2@9 ~@4 e2@4 d2@4 b1@5 e2@4 ~@4 e2@9 ~@5 d2@5 c2@3 a1@5 d2@5 ~@3]/3",
  I: "~ d2@8 ~@5 c2@4 a#1@4 g1@5 c2@4 ~", J: "[~@4 c2@9 ~@4 c2@4 a#1@4 g1@5 c2@4 ~@5 c2@9 ~@4 g1@11 ~]/2",
  K: "~ g1@4 ~@17 g1@10",
  L: "[~@3 g1@4 ~@14 g1@4 c2@10 ~@3 c2@6 ~@8 c2@8 a1@9 ~@4 a1@5 ~@8 a1@9 e2@11 ~@2 e2@5 ~@8 e2@7]/4",
  M: "~@2 d2@9 ~@4 d2@4 c2@10 ~@3", N: "c2@4 ~ g1@10 ~@3 g1@4 ~@10", O: "~@7 g1@11 ~@3 g1@5 ~@6",
  P: "~@11 g1@10 ~@2 g1@4 ~@5", Q: "~@13 g1@10 ~@3 g1@4 ~@2",
  R: "[~@16 e2@4 d2@4 b1@5 ~ e2@4 ~@4 e2@9 ~@4 d2@5 c2@3 a1@5]/2",
  S: "[d2@5 ~@4 d2@8 ~@5 c2@4 a#1@4 g1@5 c2@4 ~@5 c2@9 ~@4 c2@4 a#1@3]/2", T: "~ g1@5 c2@4 ~@5 c2@9 ~@4 e2@4",
  U: "[d2@4 b1@5 e2@4 ~@4 e2@9 ~@5 d2@4 c2@4 a1@5 d2@5 ~@3 d2@8 ~@4]/2", V: "~@2 c2@4 a#1@4 g1@5 c2@4 ~@4 c2@9",
  W: "[~@5 c2@4 a#1@4 g1@5 c2@4 ~@4 c2@9 ~@4 g1@11 ~@2 g1@4 ~@8]/2", X: "~@10 g1@11 ~@2 g1@4 ~@5",
  Y: "~@8 g1@5 c2@10 ~@3 c2@6", Z: "[~@7 c2@9 a1@9 ~@4 a1@5 ~@8 a1@8 e2@11 ~@3]/2", AA: "e2@5 ~@8 e2@9 d2@9 ~",
  AB: "[~@3 d2@4 c2@10 ~@3 c2@4 ~ g1@10 ~@3 g1@4 ~@17 g1@11 ~@2 g1@5 ~@17 g1@10 ~@3 g1@3 ~@18]/4",
  AC: "~ g1@10 ~@3 g1@4 ~@14", AD: "~@4 e2@4 d2@4 b1@5 e2@4 ~@4 e2@7",
  AE: "[~@7 d2@4 c2@4 a1@5 d2@5 ~@4 d2@8 ~@5 c2@4 a#1@4 g1@5 c2@4 ~@5]/2", AF: "c2@9 ~@4 c2@4 a#1@4 g1@5 c2@3 ~@3",
  AG: "~@2 c2@9 ~@5 e2@3 d2@4 ~ b1@5 e2@3",
  AH: "[~@5 e2@8 ~@6 d2@4 c2@4 a1@4 d2@5 ~@4 d2@8 ~@5 c2@4 a#1@4 ~ g1@4 c2@4 ~@5 c2@9 ~@4 c2@4 a#1@4]/3",
  AI: "[~ g1@4 c2@4 ~@5 c2@9 ~@4 g1@11 ~@2 g1@4 ~@18 g1@10 ~@3 g1@4 ~@13 g1@4]/3",
  AJ: "[~ c2@10 ~@2 c2@6 ~@8 c2@8 a1@9 ~@5 a1@5 ~@8 a1@8 e2@11 ~@2 e2@5 ~@8]/3",
  AK: "[~ e2@8 d2@9 ~@4 d2@5 c2@10 ~@3 c2@4 g1@11 ~@2 g1@4 ~@3]/2", AL: "~@15 g1@11 ~@2 g1@4",
  AM: "[~@18 g1@10 ~@3 g1@3 ~@19 g1@10 ~]/2",
  AN: "[~@2 g1@4 ~@18 g1@11 ~@2 g1@4 ~@17 g1@11 ~@3 g1@5 ~@17 g1@10 ~@2 g1@4 ~@18]/4", AO: "~ g1@31",
})).s("gm_electric_bass_finger").gain(0.36)

// chords · pizzicato strings · "Pitz Strings"
const pizzicato_strings = note(`<
  ~@2 A B@2 C D E F@3 G@3 H I J K L@2 M N O P@2 Q R S T U V W X@3 Y@2 Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO@2
  AP AQ AR@2 AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH ~
>`.pickRestart({
  A: "~ e4@2 ~@3 g4@3 a4@5 b4@4 ~ e4@3 ~@6 e4@3 ~",
  B: "[~@4 d4@4 f#4@4 ~ g4@4 a4@4 ~ d4@4 ~@4 d4@4 ~@5 c4@4 e4@5 f4@4 g4@4 c4@3 ~@5]/2",
  C: "~ c4@4 ~@5 c4@4 e4@4 f4@5 g4@4 c4@4 ~", D: "~@4 c4@4 ~@5 e4@2 ~@2 g4@4 a4@5 b4@4 e4@2",
  E: "~@7 e4@3 ~@6 d4@4 f#4@4 g4@4 ~ a4@3",
  F: "[~ d4@3 ~@6 d4@3 ~@6 c4@4 e4@4 f4@4 g4@4 ~ c4@3 ~@5 c4@3 ~@6 c4@4 e4@5 f4@4 g4@4 ~ c4@4 ~@4 c4@4 ~@5 e4@2 ~@3 g4@3]/3",
  G: "[a4@5 b4@5 e4@3 ~@6 e4@3 ~@5 d4@4 f#4@4 ~ g4@4 a4@4 ~ d4@4 ~@4 d4@3 ~@6 c4@4 e4@5 f4@4 g4@4 c4@3 ~@6 c4@4 ~@4]/3",
  H: "~ c4@4 e4@4 f4@4 g4@4 ~ c4@4 ~@5 c4@4 ~", I: "~@4 e4@2 ~@2 g4@4 a4@5 b4@4 e4@3 ~@6 e4@2",
  J: "~@7 d4@4 f#4@4 g4@4 ~ a4@4 d4@3 ~@5", K: "~ d4@3 ~@6 c4@4 e4@4 f4@4 g4@4 ~ c4@3 ~@2",
  L: "[~@3 c4@3 ~@6 c4@4 e4@5 f4@4 g4@4 ~ c4@4 ~@4 c4@4 ~@5 e4@2 ~@3 [g4,d5]@2 ~@10]/2", // G5
  M: "~ [g4,d5]@2 ~@20 d5@2 ~@7, ~@22 g4@3 ~@7", N: "~@4 [g4,d5]@2 ~@19 [c4,g4]@4 ~@3",
  O: "~@6 [c4,g4]@3 ~@19 [a3,e4]@2 ~@2", P: "[~@9 [a3,e4]@2 ~@20 [e4,b4]@3 ~@10 [e4,b4]@2 ~@18]/2",
  Q: "~@2 [d4,a4]@4 ~@13 [c4,g4]@3 ~@10", R: "~@5 [g4,d5]@2 ~@11 [g4,d5]@2 ~@7 g4@2 ~@3, ~@27 d5 ~@4",
  S: "~@8 g4@2 ~@11 g4@2 ~@7 g4@2, ~@8 d5 ~@12 d5 ~@8 d5 ~", T: "~@11 [g4,d5] ~@12 [g4,d5] ~@7",
  U: "[g4,d5] ~@12 g4@2 ~@12 [g4,d5] ~@4, ~@13 d5 ~@18", V: "~@3 [g4,d5] ~@12 g4@4 a4@5 b4@4 ~ e4@2",
  W: "~@7 e4@3 ~@5 d4@4 f#4@4 g4@5 a4@4",
  X: "[d4@4 ~@5 d4@4 ~@5 c4@4 e4@4 f4@4 ~ g4@4 c4@3 ~@6 c4@3 ~@6 c4@3 e4@5 f4@4 g4@4 ~ c4@4 ~@5 c4@4 ~@5 e4@2 ~@2 g4@4]/3",
  Y: "[a4@4 b4@4 ~ e4@3 ~@6 e4@3 ~@5 d4@5 f#4@4 g4@4 a4@4 ~ d4@3 ~@6 d4@3 ~@5 c4@3]/2",
  Z: "~@2 e4@4 f4@4 g4@4 ~ c4@3 ~@5 c4@3 ~@6", AA: "c4@4 e4@4 f4@5 g4@4 ~ c4@4 ~@4 c4@4 ~@2",
  AB: "~@3 e4@2 ~@2 [g4,d5]@2 ~@11 [g4,d5]@2 ~@10", AC: "~@10 [g4,d5]@2 ~@11 [g4,d5]@2 ~@7",
  AD: "~@13 [c4,g4]@4 ~@9 [c4,g4]@3 ~@3", AE: "~@16 [a3,e4]@2 ~@11 [a3,e4]@2 ~", AF: "~@19 [e4,b4]@3 ~@10",
  AG: "[e4,b4] ~@10 [d4,a4]@2 ~@3", AH: "~@7 [c4,g4]@3 ~@15 [g4,d5]@2 ~@5",
  AI: "~@6 [g4,d5]@2 ~@6 g4@2 ~@11 g4@2 ~@3, ~@14 d5 ~@12 d5 ~@4", // G5
  AJ: "~@9 d5 ~@7 g4@2 ~@11 [g4,d5] ~, ~@8 g4@2 ~@7 d5 ~@14", AK: "~@11 [g4,d5] ~@8 g4@2 ~@10, ~@20 d5 ~@11",
  AL: "~ g4@2 ~@11 [g4,d5] ~@8 [g4,d5] ~@8, ~ d5 ~@30", AM: "~@4 g4@4 a4@4 ~ b4@4 e4@3 ~@6 e4@3 ~@3",
  AN: "~@3 d4@4 f#4@4 g4@4 ~ a4@4 d4@4 ~@5 d4@3",
  AO: "[~@6 c4@4 e4@4 f4@4 g4@4 ~ c4@3 ~@5 c4@3 ~@6 c4@4 e4@4 f4@5 g4@4 ~ c4@4 ~@2]/2",
  AP: "~@2 c4@4 ~@5 e4@2 ~@3 g4@3 a4@5 b4@4 ~ e4@3", AQ: "~@6 e4@3 ~@5 d4@4 f#4@4 ~ g4@4 a4@4 ~",
  AR: "[d4@3 ~@5 d4@3 ~@6 c4@4 e4@4 f4@4 ~ g4@4 c4@3 ~@6 c4@4 ~@5 c4@4 e4@4 f4@4]/2",
  AS: "g4@4 ~ c4@4 ~@5 c4@4 ~@5 e4@3 ~ [g4,d5]@2 ~@3", AT: "~@4 [g4,d5] ~@10 [g4,d5]", AU: "~@11 [g4,d5]@2 ~@19",
  AV: "~ [c4,g4]@4 ~@9 [c4,g4]@3 ~@15", AW: "~@4 [a3,e4]@2 ~@11 [a3,e4]@2 ~@13",
  AX: "~@7 [e4,b4]@3 ~@10 [e4,b4]@2 ~@10", AY: "~@9 [d4,a4]@4 ~@14 [c4,g4]@3 ~@2",
  AZ: "~@12 [g4,d5]@2 ~@11 [g4,d5]@2 ~@5", BA: "~@2 g4@2 ~@11 [g4,d5]@2 ~@11 [g4,d5] ~@3, ~@2 d5 ~@29",
  BB: "~@5 g4@2 ~@11 [g4,d5] ~@12 [g4,d5], ~@5 d5 ~@26", BC: "~@8 g4@2 ~@11 g4@2 ~@9, ~@8 d5 ~@12 d5 ~@10",
  BD: "~@2 [g4,d5] ~@8 [g4,d5] ~@12 d5@2 ~@6, ~@24 g4 ~@7", BE: "~@5 d5@2 ~@7 [g4,d5] ~@12 [g4,d5]@3 ~@2, ~@5 g4 ~@26",
  BF: "~@8 [g4,d5] ~@7 g4@2 ~@11 g4@2 ~, ~@16 d5 ~@12 d5 ~@2", BG: "~@11 [g4,d5] ~@7 [g4,d5] ~@12", BH: "[g4,d5]",
})).s("gm_pizzicato_strings").gain(0.36)

// chords · acoustic guitar steel · "Pedal Guitar"
const acoustic_guitar_steel = note("<~@21 A@5 B C D@2 ~@11 E@4 F@5 G H I J@6 ~ K@3 L M@6 ~@5>".pickRestart({
  A: "[~@21 [c5,g5]@27 ~@7 [a4,e5]@31 ~@5 [b4,e5]@29 ~@5 [a4,d5]@14 ~@4 [g4,c5]@17]/5", B: "~@3 [g4,d5]@12 ~",
  C: "~ [g4,d5]@7", D: "[~@6 [g4,d5]@30 ~@5 [g4,d5]@23]/2",
  E: "[~@9 [c5,g5]@27 ~@7 [a4,e5]@31 ~@5 [b4,e5]@29 ~@5 [a4,d5]@14 ~]/4", // C5 A5 E5 D5
  F: "[~@3 [g4,c5]@17 ~@5 [g4,d5]@24 ~@7 [g4,d5]@30 ~@4 [g4,d5]@30 ~@5 g4@24 ~@11, ~@31 d5@6 ~@3]/5", // C5 G5
  G: "~ [b4,e5]@6 ~", H: "~@3 [a4,d5]@25 ~@4", I: "~@3 [g4,c5]@13",
  J: "[~@9 [g4,c5]@26 ~@13 [b4,e5]@23 ~@7 [a4,d5]@25 ~@10 [g4,c5]@28 ~@7 [g4,c5]@26 ~@18]/6", // C5 E5 D5 C5
  K: "[~@29 [c5,g5]@27 ~@7 [a4,e5]@31 ~@2]/3", L: "~@2 [b4,e5]@29 ~",
  M: "[~@5 d5@14 ~@4 [g4,c5]@17 ~@5 [g4,d5]@24 ~@6 [g4,d5]@30 ~@5 g4@30 ~@4 [g4,d5]@24 ~@24, ~@4 a4@14 ~@91 d5@30 ~@53]/6", // C5 G5
})).s("gm_acoustic_guitar_steel").gain(0.36)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B C D E F G H I J K L M N O D E F G P Q R S T M U O V W X Y Z AA R S AB AC AD AE AF W X Y Z AG AH AI AJ AK AD AE
  AF AL AM AN AO AP AQ AI AJ AR AS AT C AU AV AW AO AP AX AY AZ ~
>`.pickRestart({
  A: "~@6 x ~@12 x ~@8 x ~@3", B: "~@9 x ~@12 x ~@7 x ~", C: "~@12 x ~@12 x ~@6", D: "~ x ~@12 x ~@12 x ~@4",
  E: "~@4 x ~@12 x ~@12 x ~", F: "~@7 x ~@12 x ~@11", G: "~ x ~@8 x ~@12 x ~@8", H: "~@4 x ~@8 x ~@12 x ~@5",
  I: "~@7 x ~@8 x ~@12 x ~@2", J: "~@10 x ~@8 x ~@12", K: "x ~@12 x ~@7 x ~@10", L: "~@3 x ~@12 x ~@7 x ~@7",
  M: "~@5 x ~@12 x ~@8 x ~@4", N: "~@8 x ~@12 x ~@8 x ~", O: "~@11 x ~@12 x ~@7", P: "~@2 x ~@3 x ~@6 x ~@2",
  Q: "~@7 x ~@7 x ~@12 x ~@3", R: "~@9 x ~@8 x ~@12 x", S: "~@12 x ~@8 x ~@10", T: "~@2 x ~@12 x ~@8 x ~@7",
  U: "~@8 x ~@12 x ~@7 x ~@2", V: "x ~@13 x ~@12 x ~@4", W: "~@3 x ~@12 x ~@12 x ~@2", X: "~@6 x ~@12 x ~@12",
  Y: "x ~@8 x ~@12 x ~@9", Z: "~@3 x ~@8 x ~@12 x ~@6", AA: "~@6 x ~@8 x ~@12 x ~@3", AB: "~@2 x ~@12 x ~@7 x ~@8",
  AC: "~@5 x ~@12 x ~@7 x ~@5", AD: "~@7 x ~@12 x ~@8 x ~@2", AE: "~@10 x ~@12 x ~@8", AF: "x ~@12 x ~@12 x ~@5",
  AG: "~@6 x ~@7 x ~@12 x ~@4", AH: "~@9 x ~@7 x ~@12 x ~", AI: "~@11 x ~@8 x ~@11", AJ: "~ x ~@12 x ~@8 x ~@8",
  AK: "~@4 x ~@12 x ~@8 x ~@5", AL: "~@2 x ~@13 x ~@12 x ~@2", AM: "~@5 x ~@12 x ~@13", AN: "x ~@7 x ~@12 x ~@10",
  AO: "~@2 x ~@8 x ~@12 x ~@7", AP: "~@5 x ~@8 x ~@12 x ~@4", AQ: "~@8 x ~@8 x ~@12 x ~", AR: "~@4 x ~@12 x ~@7 x ~@6",
  AS: "~@7 x ~@12 x ~@7 x ~@3", AT: "~@9 x ~@12 x ~@8 x", AU: "~@2 x ~@12 x ~@12 x ~@3", AV: "~@5 x ~@12 x ~@12 x",
  AW: "~@8 x ~@12 x ~@10", AX: "~@4 x ~@3 x ~@6 x", AY: "~@11 x ~@7 x ~@12", AZ: "x",
})).gain(0.51)

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

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A ~ B ~ C ~ D ~ E ~@2 F ~ G ~ H ~ I ~ J ~@2 K ~ L ~ M ~ N ~ D ~ O ~@2 P ~ Q ~ H ~ R ~ S ~@2 T ~ U ~ V ~ W ~ X ~ Y
  ~@2 Z ~ AA ~ AB ~ C ~ AC ~@3
>`.pickRestart({
  A: "~@7 x ~@24", B: "~@13 x ~@18", C: "~@19 x ~@12", D: "~@3 x", E: "~@15 x", F: "~ x ~@6", G: "~@5 x ~@10",
  H: "~@15 x ~@16", I: "~@21 x ~@10", J: "~@27 x ~@4", K: "~ x ~@30", L: "~@3 x ~@12", M: "~@3 x ~@4", N: "~@9 x ~@6",
  O: "~@29 x ~@2", P: "~@3 x ~@28", Q: "~@9 x ~@22", R: "~@5 x ~@2", S: "~@13 x ~@2", T: "x", U: "~@5 x ~@26",
  V: "~@11 x ~@20", W: "~@17 x ~@14", X: "~@23 x ~@8", Y: "~@7 x", Z: "~ x ~@14", AA: "~ x ~@2", AB: "~@7 x ~@8",
  AC: "~@25 x ~@6",
})).gain(0.31)

// drums · crash
const crash = s("cr").struct("<~@19 A ~@6 B ~@12 C ~@5 D ~@12 E ~@6 F ~@3 G ~@3 H ~>".pickRestart({
  A: "~@5 x ~@2", B: "~@5 x ~@26", C: "~@7 x ~@24", D: "~@25 x ~@6", E: "~@27 x ~@4", F: "~@3 x ~@4", G: "~@3 x",
  H: "x",
})).gain(0.51)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@2 A B C D B E D F E D F E G F H G I H G I H J I K J L K M N K M N K O N P O Q P R Q P R Q S R T S U T V U W V U W X
  Y Z X Y Z AA AB AC AA AB AC AA AD AC ~@2
>`.pickRestart({
  A: "~@10 x ~@8 x ~@8 x ~@3", B: "~@4 x ~@8 x ~@8 x ~@7 x ~", C: "~@7 x ~@8 x ~@8 x ~@6",
  D: "~ x ~@8 x ~@8 x ~@7 x ~@4", E: "~@7 x ~@8 x ~@7 x ~@7", F: "~@4 x ~@8 x ~@7 x ~@8 x ~",
  G: "~ x ~@8 x ~@7 x ~@8 x ~@4", H: "~@7 x ~@7 x ~@8 x ~@7", I: "~@4 x ~@7 x ~@8 x ~@8 x ~",
  J: "~ x ~@7 x ~@8 x ~@8 x ~@4", K: "~@6 x ~@8 x ~@8 x ~@7", L: "~@3 x ~@8 x ~@8 x ~@8 x ~",
  M: "x ~@8 x ~@8 x ~@8 x ~@4", N: "~@3 x ~@8 x ~@8 x ~@7 x ~@2", O: "x ~@8 x ~@8 x ~@7 x ~@5",
  P: "~@6 x ~@8 x ~@7 x ~@8", Q: "~@3 x ~@8 x ~@7 x ~@8 x ~@2", R: "x ~@8 x ~@7 x ~@8 x ~@5",
  S: "~@6 x ~@7 x ~@8 x ~@8", T: "~@3 x ~@7 x ~@8 x ~@8 x ~@2", U: "x ~@7 x ~@8 x ~@8 x ~@5",
  V: "~@5 x ~@8 x ~@8 x ~@8", W: "~@2 x ~@8 x ~@8 x ~@8 x ~@2", X: "~@5 x ~@8 x ~@8 x ~@7 x",
  Y: "~@8 x ~@8 x ~@8 x ~@5", Z: "~@2 x ~@8 x ~@8 x ~@7 x ~@3", AA: "~@5 x ~@8 x ~@7 x ~@8 x",
  AB: "~@8 x ~@8 x ~@7 x ~@6", AC: "~@2 x ~@8 x ~@7 x ~@8 x ~@3", AD: "~@8 x ~@7 x ~@8 x ~@6",
})).gain(1.82)

// drums · shaker
const shaker = s("sh").struct("<~@19 A ~ B ~@4 C ~@12 D ~ E ~@3 B ~@12 F ~@2 G ~@3 H ~@3 I ~@3 J ~>".pickRestart({
  A: "~@5 x ~@2", B: "~@25 x ~@6", C: "~@5 x ~@26", D: "~@7 x ~@24", E: "~@13 x ~@18", F: "~@27 x ~@4", G: "~ x ~@30",
  H: "~@3 x ~@4", I: "~@3 x", J: "x ~@4 x ~@26",
})).gain(0.51)

stack(bass, pizzicato_strings, acoustic_guitar_steel, kick, snare, hihat, open_hat, crash, cabasa, shaker)

More by The Rolling Stones