Strudelify
Under My Thumb cover art

Aftermath

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, A@4 for four bars: 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 ~@3 g1@5 ~@6]/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@5 ~@17 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 ~@3 g1@3 ~@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 AK BG ~
>`.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: "[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 N O D E F U P V R S W M X O Y Z AA U P AB R AC W AD X AE Y Z AA
  U AF AB AG AC W AD X AH C AI AJ AK AF AB I AC AL ~
>`.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: "~@3 x ~@8 x ~@12 x ~@6",
  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: "x ~@8 x ~@12 x ~@9", V: "~@6 x ~@8 x ~@12 x ~@3", W: "~ x ~@12 x ~@8 x ~@8", X: "~@7 x ~@12 x ~@8 x ~@2",
  Y: "x ~@12 x ~@12 x ~@5", Z: "~@3 x ~@12 x ~@12 x ~@2", AA: "~@6 x ~@12 x ~@12", AB: "~@5 x ~@8 x ~@12 x ~@4",
  AC: "~@11 x ~@8 x ~@11", AD: "~@4 x ~@12 x ~@8 x ~@5", AE: "~@10 x ~@12 x ~@8", AF: "~@2 x ~@8 x ~@12 x ~@7",
  AG: "~@9 x ~@7 x ~@12 x ~", AH: "~@9 x ~@12 x ~@8 x", AI: "~@2 x ~@13 x ~@12 x ~@2", AJ: "~@5 x ~@12 x ~@12 x",
  AK: "~@8 x ~@12 x ~@10", AL: "x",
})).gain(0.51)

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

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D E C D E C D E C D E F G E F G H F I E F I J F I J F I J F I J K I J K L J K I M N I M N O M P O Q P O Q P O R
  P S Q T S Q T S U T V U T W X ~
>`.pickRestart({
  A: "x ~@16 x ~@14", B: "~@3 x ~@7 x ~@8 x ~@11", C: "~@6 x ~@7 x ~@8 x ~@8", D: "x ~@8 x ~@7 x ~@8 x ~@5",
  E: "~@3 x ~@7 x ~@8 x ~@8 x ~@2", F: "~@5 x ~@8 x ~@8 x ~@7 x", G: "~@8 x ~@8 x ~@8 x ~@5",
  H: "~@2 x ~@8 x ~@16 x ~@3", I: "~@8 x ~@7 x ~@8 x ~@6", J: "~@2 x ~@8 x ~@7 x ~@8 x ~@3",
  K: "~@5 x ~@8 x ~@7 x ~@8 x", L: "~@16 x ~@8 x ~@6", M: "~@2 x ~@7 x ~@8 x ~@8 x ~@3", N: "~@5 x ~@7 x ~@8 x ~@8 x",
  O: "~@7 x ~@8 x ~@8 x ~@6", P: "~@4 x ~@8 x ~@8 x ~@7 x ~", Q: "~ x ~@8 x ~@8 x ~@7 x ~@4", R: "~ x ~@8 x ~@7 x ~@13",
  S: "~@7 x ~@8 x ~@7 x ~@7", T: "~@4 x ~@7 x ~@8 x ~@8 x ~", U: "~ x ~@7 x ~@8 x ~@8 x ~@4", V: "~@6 x ~@8 x ~@16",
  W: "~@7 x ~@7 x ~@8 x ~@7", X: "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 ~ A ~ L ~ M ~ D ~ E ~@2 N ~ O ~ H ~ I ~ P ~@2 Q ~ R ~ L ~ S ~ T ~ U
  ~@2 N ~ V ~ B ~ C ~ P ~@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 ~@4", M: "~@9 x ~@6", N: "~@3 x ~@28",
  O: "~@9 x ~@22", P: "~@13 x ~@2", Q: "x", R: "~@3 x ~@12", S: "~@17 x ~@14", T: "~@23 x ~@8", U: "~@29 x ~@2",
  V: "~ x ~@2",
})).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 C D B C D B E D B E D B E D B E F B E F G E F G E H G E H I E H I E H I E H I J H K J H K J H K L H M N
  O M N O M N O M N O M N P M ~@2
>`.pickRestart({
  A: "~@10 x ~@8 x ~@8 x ~@3", B: "~@4 x ~@8 x ~@7 x ~@8 x ~", C: "~@7 x ~@8 x ~@7 x ~@7",
  D: "~ x ~@8 x ~@8 x ~@7 x ~@4", E: "~@6 x ~@8 x ~@8 x ~@7", F: "~ x ~@8 x ~@7 x ~@8 x ~@4",
  G: "~@4 x ~@7 x ~@8 x ~@8 x ~", H: "x ~@8 x ~@7 x ~@8 x ~@5", I: "~@3 x ~@8 x ~@8 x ~@7 x ~@2",
  J: "~@6 x ~@8 x ~@7 x ~@8", K: "~@3 x ~@8 x ~@7 x ~@8 x ~@2", L: "~@6 x ~@7 x ~@8 x ~@8",
  M: "~@2 x ~@8 x ~@7 x ~@8 x ~@3", N: "~@5 x ~@8 x ~@7 x ~@8 x", O: "~@8 x ~@8 x ~@8 x ~@5",
  P: "~@8 x ~@8 x ~@7 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 E ~@3 H ~@3 I ~>".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", I: "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