Strudelify

Gimme Shelter

The Rolling Stones

KeyE majorTempo118 bpm
0:00/0:00
// Gimme Shelter — The Rolling Stones
// 118 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 8 "intro echo" guitar harmonics (copy of ch 1 "lead guitar" acoustic guitar nylon); ch 2 "rhythm guitar" electric guitar jazz (copy of ch 7 "rhythm guitar 2" electric guitar muted)
// note: Full arrangement: all 94 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(118/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 · acoustic guitar nylon · "lead guitar"
const acoustic_guitar_nylon = note(`<
  ~@3 A@4 B@2 C D E@2 F G H C I J K@2 L M N O ~@3 P Q@2 ~ R@2 S T@2 U V W@2 X Y Z O ~@3 P Q@2 ~ R@2 S T@2 U V W@2 AA
  AB@3 AC AD AE ~@12 R@2 S AF@3 S AF@3 S T@2 ~
>`.pickRestart({
  A: "[~@5 b4 c#5 c#5@6 c#5 b4 g#4@7 g#4 a4@9]/4", B: "[f#4 g#4@2 ~ e4 b4 c#5 c#5@7 g#4 a4]/2", C: "g#4 a4 g#4@6",
  D: "b4 c#5@3 b4 c#5@2 g#4", E: "[a4@2 g#4@6 e4@2 b4@2 c#5@2 c#5@14 g#4@2 g#4 a4]/2", F: "g#4", G: "e4 a4@3 c#5@4",
  H: "e4 b4 c#5 b4 g#4 a4 g#4 a4", I: "g#4 f#4@4 g#4 e4 b4", J: "c#5 b4@4 f#4 g#4@2",
  K: "[~ f#4 g#4@2 b4 c#5 b4 c#5@4 e4 g#4 f#4 e4 b4]/2", L: "c#5 b4@3 a4@4", M: "a4@4 f#4 g#4 f#4 e4",
  N: "b4@2 c#5@2 b4@2 e4@2 e4@2 g#4@2 f#4 e4 c#4@2", O: "c#4", P: "~@5 b3 c#4 e4", Q: "[g#4 ~ e4@2 c#4 b3 c#4 c#4@9]/2",
  R: "[~@10 c#4@2 e4@2 g#4@5 b3 b3@4 ~@8]/2", S: "~@2 c#4@2 e4@2 c#4@2 g#4@2 e4@2 c#4 b3 g#3@2",
  T: "[~@2 g#4!2 f#4 e4 c#4 c#4@5 ~@4]/2", U: "~@4 b3 c#4 e4 f#4", V: "g#4 c#4@3 [b3,e4] c#4 ~@2",
  W: "[~ g#4!4 e4 c#4 c#4@5 ~@4]/2", X: "~@5 c#5!3", Y: "c#5 b4 f#4 ~ f4 c#4@3", Z: "g#4 f#4 b3 c#4@5",
  AA: "[b3,e4] c#4 e4 c#4@4 ~", AB: "[~@2 c#4 ~ [b3,e4] c#4 e4 g#4@2 b4 g#4 f#4 e4 f#4 e4 c#4@5 ~@3 f#4]/3",
  AC: "g#4 b4 g#4 f#4 e4 c#4@3", AD: "~ f#4 g#4 b4 g#4 b4 ~ f#4", AE: "g#4 b4 e4 ~@5",
  AF: "[~@4 g#4@2 g#4@2 f#4@2 e4@2 c#4@2 c#4@10 ~@2 c#4@2 e4@2 g#4@5 b3 b3@4 ~@8]/3",
})).s("gm_acoustic_guitar_nylon").gain(0.57).pan(0)

// other · harmonica
const harmonica = note("<~@60 A B C D E F G H ~@26>".pickRestart({
  A: "~@5 a#4@2 c#5", B: "c#5!3 c#5@5", C: "~ a#4@2 c#5!2 c#5@3", D: "~ a#4@2 c#5 c#5@4",
  E: "~@2 a#4 c#5 a#4@2 c#5@2 c#5@2 c#5@6", F: "a#4 c#5 ~ c#5@5", G: "~@2 g4@4 b4@2 b4@3 c#5 ~@4", H: "~ c#5@2 c#5!5",
})).s("gm_harmonica").gain(0.57).pan(0.6)

// chords · piano
const piano = note("<~@15 A B@2 C@2 D E F G H ~@19 H ~@46 G I ~>".pickRestart({
  A: "~@5 [f#4,f#5]!2 [g#4,g#5]", B: "[~ c#7 c#6!2 c#7 c#6 c#7@2 ~@8, [c#2,c#3]]/2",
  C: "[~@2 [d#5,d#6]@2 f#6 c#6@3 ~@8, [c#2,c#3], ~ f#5 ~@2]/2", D: "[c#2,c#3,c#4,e4,g#4]", E: "[b1,b2,b3,d#4,f#4]",
  F: "[a1,a2,c#4,e4,a4]", G: "c#4 f#4 c#4 f#4 c#4 g#4 c#4 g#4", H: "[c#2,c#3,c#4,f4]", I: "[c#2,c#3,g#3,c#4,g#4,c#5]",
})).s("gm_piano").gain(0.57)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@8 A B C D E F E G F H F I J K L M N O P Q R S P T U V W M U V W M X S Y Z N O P Q R S P T U V W M U V W M X S Y Z AA
  AB AC AD U V W M U V W M U V W M U V W M U V W M U V W M ~@2
>`.pickRestart({
  A: "c#3@5 c#3@2 c#3", B: "b2@5 b2@2 b2", C: "a2@5 a2@2 a2", D: "a2@4 f#2@2 f#2 b1", E: "c#2@3 c#2@5",
  F: "c#2@3 c#2@4 c#2", G: "c#2@2 f#2 ~", H: "c#2@2 c#2 c#2@4 c#2", I: "c#2@3 c#2 a1@3 b1", J: "c#2@2 c#2!5 g#2",
  K: "b1!2 b1@2 f#2 b1@2 b1", L: "a1!2 e2 a1 e2 a1!3", M: "e2 a1 e2 a1 e2 b1 e2 b1", N: "c#2@3 c#2!5",
  O: "f#2 g2!2 g#2 c#3!2 f#2 g#2", P: "c#2@2 c#2@2 c#2@3 c#2 c#2@2 c#2@2 c#2@2 c#2@2", Q: "f#2 g2 g#2 c#2@2 c#2 b1 c2",
  R: "c#2!8", S: "f#2 g#2 f#2 g#2 c#3!2 f#2 g#2", T: "f#2 g2 g#2 c#2!3 b1 e1",
  U: "c#2@4 c#2@3 c#2 c#2@2 c#2@2 c#2@2 e1@2", V: "b1@2 b1@2 b1@3 b1 b1@2 b1@2 b1@2 e1@2",
  W: "a1@2 a1@2 a1@3 a1 a1@2 a1@2 a1@2 a1@2", X: "c#2@2 c#2@2 c#2!4", Y: "c#2!2 c#2@2 c#2!4",
  Z: "f#2 g#2 f#2 g#2 c#3 g#2 b2 c#3", AA: "c#2@3 c#2 c#2@3 c#2 c#2@2 c#2@2 c#2@4", AB: "e2 f#2 g2 g#2@2 g#2 e2 g#2",
  AC: "c#2@2 c#2@2 c#2@3 c#2 c#2@2 c#2@2 c#2@4", AD: "f#2 g2@2 g#2 c#3 c#2 b1 c2",
})).s("gm_electric_bass_finger").gain(0.57)

// chords · electric guitar muted · "rhythm guitar 2"
const electric_guitar_muted = note(`<
  A B C D E F G D H I J D K L M@2 K L N@2 O P Q R S T@2 U V W@2 X Y Z AA R AB AC AD AE S AF@2 AG S T@2 U V W@2 X Y Z AA
  R AB AC AD AE S AF@2 U V U V U Y Z AA R Y Z AA R Y Z AA R Y Z AA R Y Z AA R Y Z AA R ~@2
>`.pickRestart({
  A: "g#3 c#4 [d#4,f#4] d#4!2 g#3 [c#4,f#4]!2, ~@2 f#4 ~", B: "f#3 [b3,d#4] c#4 f#3 c#4 f#3 [c#4,e4] [b3,e4], ~ e4!2 ~",
  C: "[e3,a3] a3 [b3,d#4] a3 e3 [b3,d#4] [a3,c#4] e3", // A5 B A
  D: "[b3,d#4] a3 e3 [a3,c#4] [c#4,e4]!2 [b3,d#4] [f#3,b3], ~ c#4@2 ~@5", // B A C#m B B5
  E: "g#3 [c#4,f4] [d#4,f#4] f#4 [d#4,f#4] [c#4,f#4]!2 [c#4,f4]", F: "f#3 b3 c#4!2 [c#4,e4]!3 [b3,e4], ~ e4@3 ~@4",
  G: "e3 [a3,c#4] [b3,d#4] [a3,c#4] e3 [b3,d#4] [a3,c#4] e3", // A B A B A
  H: "g#3 [c#4,f4] d#4 g#3 [d#4,f#4] [c#4,f#4]!2 [c#4,f4], ~ f#4 ~@2", // C# D#m F#5 C#
  I: "f#3 [b3,d#4] c#4 f#3 [c#4,e4]!3 [b3,e4], ~ e4 ~@2", J: "e3 [a3,c#4] [b3,d#4] [a3,c#4] e3 [b3,d#4] a3 e3, ~@3 c#4",
  K: "f4!2 f#4!2 g#4 [f#4,g#4] [e4,g#4] [c#4,g#4], c#4@3 c#4@3 ~@2", // F#sus2 E C#5
  L: "~ d#4 ~@2 f#4 [e4,f#4] [d#4,f#4] [b3,f#4], b3@3 b3@3 ~@2, ~ [e4,f#4] ~@2", // Esus2 D#m B5 Esus2
  M: "[~ [c#4,e4] [d#4,f#4] [c#4,e4] ~ [d#4,f#4] ~@2 [d#4,f#4] ~@2 [c#4,e4] [d#4,f#4] [e4,f#4] [d#4,f#4] [b3,d#4], a3@4 a3@3 a3@3 a3@2 ~@4, ~@6 [c#4,e4]@2 ~ [c#4,e4]@2 ~@5]/2", // C#m D#m C#m D#m C#m D#m Esus2 D#m …
  N: "[~ [c#4,e4] [d#4,f#4] [c#4,e4] ~ [d#4,f#4] ~@2 [d#4,f#4] ~@2 [c#4,e4] [d#4,f#4] [e4,f#4] [d#4,f#4] [b3,d#4], a3@3 a3@3 [c#4,e4]@2 ~ [c#4,e4]@2 ~@5, ~@7 a3@3 a3@2 ~@4]/2", // C#m D#m C#m D#m C#m D#m Esus2 D#m …
  O: "~ c#4 f#4@2 f#4!2 e4 c#4, ~@2 g#4 ~", P: "~ b3 e4@2 e4!2 d#4 b3, ~ f#4",
  Q: "~@2 [b3,d#4] [a3,c#4] ~ [b3,d#4] [a3,c#4] a2, a2@4 a2@3 ~", // B A B A
  R: "[b2,e3,g#3,b3] [a2,e3,a3,c#4] [b2,e3,g#3,b3] [a2,e3,a3,c#4] [b2,e3,g#3,b3] [b2,f#3,b3,d#4]!3", // E A E A E B
  S: "[c#3,g#3,c#4]@2 [c#3,g#3,c#4]@3 [c#3,g#3,c#4]@3", // C#5
  T: "[[c#3,b3,e4] [c#3,g#3,c#4] [c#3,a#3,c#4,f#4] [c#3,g#3,c#4]@2 [c#3,g#3] [c#3,b3] [c#3,g#3,c#4]@2 [c#3,g#3,c#4] [c#3,g#3,c#4]@3 [c#3,g#3,c#4]@3]/2", // C#m7 C#5 F# C#5 C#7 C#5
  U: "[c#3,b3,e4] [c#3,g#3,c#4] [c#3,a#3,c#4,f#4] [c#3,g#3,c#4]@2 [c#3,g#3,c#4]!2 [g#3,b3]", // C#m7 C#5 F# C#5 G#m
  V: "[c#3,g#3,c#4]@4 [c#3,g#3,c#4]@3 [c#3,g#3,c#4] [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@6", // C#5
  W: "[[c#3,b3,e4]@2 [c#3,g#3,c#4]@2 [c#3,b3,c#4,f#4]@2 [c#3,g#3,c#4,f#4]@4 [c#3,g#3]@2 [c#3,b3]@2 [c#3,g#3,c#4]@4 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@3 [c#3,g#3,c#4] [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2]/2", // C#m7 C#5 F#sus4 C#sus4 C#5 C#7 C#5
  X: "[c#3,b3,e4] [c#3,g#3,c#4] [c#3,a#3,c#4,f#4] [c#3,g#3,c#4]@2 [c#3,g#3] [c#3,b3]!2", // C#m7 C#5 F# C#5 C#7
  Y: "[c#3,g#3,c#4]@4 [c#3,g#3,c#4]@3 [c#3,g#3,c#4] [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 ~@2", // C#5
  Z: "[b2,f#3,b3,d#4]@4 [b2,f#3,b3,d#4]@3 [b2,f#3,b3,d#4] [b2,f#3,b3,d#4]@2 [b2,f#3,b3,d#4]@2 [b2,f#3,b3,d#4]@2 [b2,f#3,b3,d#4]@2", // B
  AA: "[a2,e3,a3,c#4]@4 [a2,e3,a3,c#4]@3 [a2,e3,a3,c#4] [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@2", // A
  AB: "~@2 [c#3,g#3,c#4,f4]@2 [c#3,g#3,c#4,f4]@3 [c#3,g#3,c#4,f4] [c#3,g#3,c#4,f4]@2 [c#3,g#3,c#4,f4]@2 [c#3,g#3,c#4,f4]@2 [c#3,g#3,c#4,f4]@2", // C#
  AC: "~@2 [b2,f#3,b3,e4]@2 [b2,f#3,b3,e4]@3 [b2,f#3,b3,e4] [b2,f#3,b3,e4]@2 [b2,f#3,b3,e4]@2 [b2,f#3,b3,e4]@2 [b2,f#3,b3,e4]@2", // Bsus4
  AD: "[a2,e3,a3,c#4]@4 [a2,e3,a3,c#4]@3 [a2,e3,a3,c#4] [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@2 ~@2 [b3,d#4]@2", // A B
  AE: "[a3,c#4] e3 [b3,d#4] [a3,c#4] [b2,f#3,b3,d#4]!4", // A B A B
  AF: "[[c#3,b3,e4]@2 [c#3,g#3,c#4]@2 [c#3,a#3,c#4,f#4]@2 [c#3,g#3,c#4]@4 [c#3,g#3]@2 [c#3,b3]@2 [c#3,g#3,c#4]@6 [c#3,g#3,c#4]@3 [c#3,g#3,c#4] [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@6]/2", // C#m7 C#5 F# C#5 C#7 C#5
  AG: "[c#3,b3,e4] [c#3,g#3,c#4] [c#3,a#3,c#4,f#4] [c#3,g#3,c#4]@2 [b4,e5]!2 [g#4,c#5]", // C#m7 C#5 F# C#5 E5 C#5
})).s("gm_electric_guitar_muted").gain(0.57).pan(0.8)

// other · overdriven guitar · "solo guitar"
const overdriven_guitar = note("<~@41 A B C ~@24 D E F G@2 H@2 I J K L M ~@14>".pickRestart({
  A: "~@5 c#5!3", B: "c#5 b4 f#4 ~ f4 c#4@3", C: "g#4 f#4 b3 c#4@5", D: "~@2 g#4 ~ f4 c#4 b3 c#4",
  E: "f4 c#4 b3 c#4@2 e4 c#4 e4", F: "g#4 c#5 g#4 f#4 e4 f#4 e4 f#4", G: "[g#4!4 f#4 e4 c#4 c#4@5 ~@4]/2",
  H: "[~ b3 c#4 ~ f4 c#4@7 ~@4]/2", I: "~ g#4!4 f#4 f4 c#4", J: "c#4",
  K: "c#5@2 c#5@2 c#5@2 c#5@2 c#5 b4 b4@2 f#4@2 e4@2", L: "c#4@4 b3 c#4 e4 g#4", M: "~@2 c#4 ~ b3 c#4 e4 g#4",
})).s("gm_overdriven_guitar").gain(0.57)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A@15 B C@3 D C@7 B C@3 E C@3 E C@11 B C@3 E C@3 E C@7 B C@3 E C@3 E C@3 E C@3 E C@3 E C@3 E ~@2
>`.pickRestart({
  A: "~@2 x ~@2 x ~ x", B: "~ x!3", C: "~ x ~ x", D: "x!2 ~@2", E: "x",
})).gain(0.57)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@20 A B@2 ~ A B@6 C A B@2 ~ A B@2 ~ A B@3 A B@6 C A B@2 ~ A B@2 ~ A B@6 C A B@2 ~ A B@2 ~ A B@2 ~ A B@2 ~ A B@2 ~ A
  B@2 ~@3
>`.pickRestart({
  A: "~@2 x!6", B: "x!8", C: "x!4 ~@4",
})).gain(0.57)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@3 A ~@19 A ~@11 B ~@3 B ~@15 B ~@3 B ~@11 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@2
>`.pickRestart({
  A: "~@3 x", B: "~@2 x!2",
})).gain(0.57)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@3 A ~@19 A ~@11 B ~@3 B ~@15 B ~@3 B ~@11 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@2
>`.pickRestart({
  A: "~ x", B: "~ x ~@2",
})).gain(0.57)

// drums · crash
const crash = s("cr").struct(`<
  ~@20 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@5
>`.pickRestart({
  A: "x",
})).gain(0.57)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@4 A@7 B A@3 C D@2 C@2 A@3 C A@7 C A@3 C A@3 C A@11 C A@3 C A@3 C A@11 C A@3 C A@3 C A@3 C A@3 C A@3 C ~@2
>`.pickRestart({
  A: "~@3 x ~@3 x", B: "~@3 x ~ x ~ x", C: "~ x ~ x ~ x ~ x", D: "~@2 x!2 ~ x ~ x",
})).gain(2.9)

// drums · shaker
const shaker = s("sh").struct("<~@60 [x!16]!32 ~@2>").gain(0.57)

// drums · guiro
const guiro = s("guiro:0").struct(`<
  ~@4 A@7 B A@3 ~ A@3 ~ A@3 ~ A@4 B A@6 ~ A@3 ~ A@8 B A@6 ~ A@3 ~ A@11 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~@3
>`.pickRestart({
  A: "x!2", B: "x",
})).gain(12.07)

stack(
  acoustic_guitar_nylon, harmonica, piano, bass, electric_guitar_muted, overdriven_guitar, kick, snare, hihat, mid_tom,
  high_tom, crash, cabasa, shaker, guiro
)

More by The Rolling Stones