Strudelify
Lady Jane cover art

Aftermath

Lady Jane

The Rolling Stones

KeyG majorTempo95 bpm
0:00/0:00
// Lady Jane — The Rolling Stones
// 95 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 55 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(95/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 · fretless bass · "Bass"
const bass = note(`<
  ~@2 A B C D A E F D A G H I J K A H I A K@2 J A B C D A L M A D N A M I A O P D I E F D A G M I Q K A M I R S
>`.pickRestart({
  A: "d2@4 ~@2 d2 ~ d2@5 ~ d2 ~", B: "c2@4 ~@2 c2 ~ c2@6 g1@2", C: "c2@6 ~ c2!2 ~ c2@3 ~ c2@2",
  D: "g2@4 ~@2 g2 ~ g2@5 ~ g2 ~", E: "c2@5 ~ c2 ~ c2@6 g1 a1", F: "c2@5 ~ c2 ~ c2@4 ~@2 c2 ~",
  G: "e2@4 ~@2 e2 ~ e2@5 ~ e2 ~", H: "a1@6 a1 ~ a1 ~ a1@3 ~ a1 ~", I: "d2@6 d2 ~ d2 ~ d2@3 ~ d2 ~",
  J: "g2@6 g2 ~ g2 ~ g2@3 ~ g2 ~", K: "c2@4 ~@2 c2 ~ c2@5 ~ c2 ~", L: "e2@6 e2 ~ e2 ~ e2@3 ~ e2 ~",
  M: "a1@4 ~@2 a1 ~ a1@5 ~ a1 ~", N: "c2@6 c2 ~ c2 ~ c2@3 ~ c2 ~", O: "c2@5 ~ c2 ~ c2@7 ~",
  P: "c2@5 ~ c2 ~ c2@5 ~ c2 ~", Q: "g2@6 d2@2 g2 ~ g2@2 ~@2 g2 ~", R: "d2@5 ~ d2 ~ d2@5 ~ a1 b1", S: "d2@5 ~ d2 ~ d2@8",
})).s("gm_fretless_bass").gain(0.27)

// chords · piano
const piano = note(`<
  ~@2 A B@2 C D E@2 F D G H I C J K L M D N@2 O A N@2 P D Q R S T U K V D@2 E@2 O W X@2 T M Y Z AA F U AB H AC AD@2
>`.pickRestart({
  A: "~@10 d4@4 f#4 ~, [f#4,a4]@15 ~, d4@5 ~@3, d3!2, ~@6 d2@9 ~", // F#m
  B: "[~@26 c4@2 c4@2 e4 ~, c3@31 ~, c4@15 c5@16 ~, [e4,g4,c5]@8 [e5,g5]@23 ~, ~@7 c6@8 g4 e4@6 c4@2 [e4,g4]@6 ~@2]/2", // C Em
  C: "d4@5 d4 b3 g3, [g3,b3]@3 ~", D: "[a3,d4,f#4]@9 ~ d3@2 [a3,d4,f#4]@3 ~",
  E: "[~@16 c4@6 ~@2 c5@3 ~@3 e4 ~, c5@14 g4@14 c5@3 ~, g4@12 e4@4 e4@13 g4@2 ~, e4@10 c4@6 c5@6 c4@5 c4@5, c4@6 c3@25 ~]/2",
  F: "[g4,b4,d5]@7 g4@2 ~@3 b4@2 d5 ~, g2@7 ~, ~@7 d5@7 ~@2, ~@7 b4@5 ~@4, ~@5 g4@2 ~", // G
  G: "[b3,d4,e4,g#4]@12 e4 g#4 b4 e5", H: "[a3,c4,e4]@7 ~", I: "[c4,d4,f#4,a4]@12 d4 f#4 a4 d5",
  J: "~@5 g4 e4 c4, [g3,c4,e4]@3 ~", K: "[c4,d4,f#4,a4]@3 ~@3 a4 c5, ~@3 d3@5, ~ d4, ~@5 f#4@3",
  L: "[a3,c4,e4]@12 a3 c4 e4 a4", M: "[a3,d4,f#4]@3 ~@3 a4 d5, ~@3 d3@5, ~ d4, ~@5 f#4@3",
  N: "[~@16 c4@6 ~@2 c5@3 ~@4 c4, [g4,c5]@14 g4@8 c4@5 c4@3 e4@2, [c4,e4]@12 c4@3 c5@9 ~@4 c5@4, ~@3 c3@13, ~@13 e4@11 [e4,g4]@5 g4@3]/2", // C5 C Em
  O: "[g3,b3,d4]@9 ~ g2@2 [g3,b3,d4]@3 ~", P: "g2@8 ~@2 g3@4 b3 ~, [b3,d4]@15 ~, g3@5 ~@3, ~@8 g2@7 ~",
  Q: "[b3,d4,e4,g#4]@9 ~ e3@2 [b3,d4,e4,g#4]@3 ~", R: "e4@5 e4 c4 a3, [a3,c4]@3 ~", S: "[c4,d4,f#4,a4]@7 ~",
  T: "[g3,b3,d4]@7 ~", U: "[c4,e4,g4]@7 c4@2 ~@3 e4@2 g4 ~, c2@7 ~, ~@7 g4@7 ~@2, ~@7 e4@5 ~@4, ~@5 c4@2 ~",
  V: "[a3,c4,e4]@3 ~@3 e4 a4, ~@3 a2@5, ~ a3, ~@5 c4@3", // Am
  W: "[d4,f#4,a4]@7 d4@2 ~@3 f#4@2 a4 ~, d2@7 ~, ~@7 a4@7 ~@2, ~@7 f#4@5 ~@4, ~@5 d4@2 ~", // D
  X: "[~@6 c4@4 c4@2 ~@2 e4@2 c4@6 c4@2 c4@3 ~@3 e4 g4, [c4,e4,g4]@6 g4@10 g4@8 g4@7 ~, ~ c3@7, ~@3 e4@4 ~ e4@6 c4@2, ~@12 c4@4 ~@11 g3@5]/2", // C
  Y: "[b3,d4,e4,g#4]@7 ~", Z: "[a3,c4,e4]@7 a3@2 ~@3 c4@2 e4 ~, a2@7 ~, ~@7 e4@7 ~@2, ~@7 c4@5 ~@4, ~@5 a3@2 ~",
  AA: "a4@5 a4 f#4 d4, [c4,d4,f#4]@3 ~", AB: "~@12 d4@2 f#4 ~, [f#4,a4]@15 ~, d4@10 c4@5 ~, c4 d3, d3@6 d2@9 ~",
  AC: "~@5 a4 f#4 d4, [a3,d4,f#4]@3 ~", AD: "[[f#3,a3,d4]@21 ~ d3@2 [f#3,a3,d4]@4 ~@4]/2",
})).s("gm_piano").gain(0.27)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<~@53 A@2>".pickRestart({
  A: "[~ [a5,f#6]@22 ~ [a5,f#6]@4 ~@4]/2", // D
})).s("gm_string_ensemble_1").gain(0.15)

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

// drums · rim
const rim = s("rim").struct("<A B C D@16 ~ D@16 ~ D@16 ~@2>".pickRestart({
  A: "x!2", B: "x!4", C: "~ x ~@2", D: "~ x ~ x",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct("<~@2 A ~@16 B ~@16 B ~@16 C D>".pickRestart({
  A: "~@10 x ~ x ~ x!2", B: "~@4 x!2 ~@2 x ~@3 x ~@3", C: "~ x ~ x", D: "~ x!2 ~",
})).gain(0.36)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@19 [~@3 x ~@3 x ~@3 x ~ x ~@2] ~@16 [~@3 x ~@3 x ~@3 x ~ x ~@2] ~@18>").gain(0.18)

// drums · low tom
const low_tom = s("lt").struct("<~@19 [~@7 x] ~@16 [~@7 x] ~@18>").gain(0.36)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 [~@9 x ~@6] ~@16 [~@9 x ~@6] ~@18>").gain(0.31)

// drums · open hat
const open_hat = s("oh").struct("<~@23 [~@15 x] ~@16 [~@15 x] ~@7 [~@15 x] ~@6>").gain(0.27)

// drums · crash
const crash = s("cr").struct("<~@3 A ~@16 A ~@16 A ~@15 A B>".pickRestart({
  A: "x", B: "~ x",
})).gain(0.31)

stack(bass, piano, string_ensemble_1, kick, rim, snare, snare_soft, low_tom, hihat, mid_tom, open_hat, crash)

More by The Rolling Stones