Strudelify

Let's Spend The Night Together

The Rolling Stones

KeyD majorTempo136 bpm
0:00/0:00
// Let's Spend The Night Together — The Rolling Stones
// 136 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 133 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(136/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 · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  A@6 B C A@2 B C A@2 B C A@2 D@2 B A D@2 E@2 A@6 B C A@2 B C A@2 B C A@2 D@2 B A D@2 E@2 A@6 F@2 G@2 H@2 G@2 I@2 B@2
  A@6 B C A@2 B C A@2 B C A@2 D@2 B A D@2 E@2 A@6 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@8 J
>`.pickRestart({
  A: "d2!8", B: "g2!8", C: "f#2!8", D: "c2!8", E: "b1!8", F: "[c2@15 ~]/2", G: "[g2@31 ~]/2", H: "[c2@31 ~]/2",
  I: "c3!8", J: "g1 ~@3",
})).s("gm_synth_bass_1").gain(0.6)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D@2 E F G H I J G H I J G H I K L M N O P Q R A B C D@2 E F G H I J G H I J G H I K L M S O P Q R A B C D@2 E T
  ~@11 U V W X@2 Y J G H I J G H I J G H I K L M Z O P Q R A B C D@2 E F G H I J G H I J G H I J G H I J G H I J G H I A
  B C D@2 E AA
>`.pickRestart({
  A: "~@2 d4 ~ [d3,d5,f#5,a5]@2 d4 ~ [d5,f#5,a5] ~ [d5,g5,b5]@2 d3 ~ [d5,a5,c6]@2, ~@8 d3@2 d4 ~@3 d4 ~", // D G D7
  B: "d3@2 [d5,a5,c6]@2 d3@2 [d4,d5,a5,c6] ~ [d3,d5,g5,b5]@2 d4 ~ [d3,d5,f#5,a5]@2 d4 ~, ~@2 d4 ~@13", // D7 G D
  C: "[d3,d5,f#5,a5]@2 d4@2 [d3,d5,f#5,a5]@2 d4 ~ [d5,f#5,a5] ~ [d5,g5,b5]@2 d3 ~ [d5,a5,c6]@2, ~@8 d3@2 d4 ~@3 d4 ~", // D G D7
  D: "[d3 ~ [d5,a5,c6]@2 d3@2 [d4,d5,a5,c6] ~ [d3,d5,g5,b5]@2 d4 ~ d3@2 d4 ~ d3@2 d4 ~ [d3,d5,f#5,a5]@2 d4 ~ [d5,f#5,a5] ~ [d5,g5,b5]@2 d3@2 [d5,a5,c6]@2, ~@2 d4 ~@9 [d5,f#5,a5]@7 ~@5 d3@2 d4 ~@3 d4 ~]/2", // D7 G D G D7 D
  E: "d3@2 [d5,a5,c6]@2 d3@2 [d4,d5,a5,c6] ~ [d3,d5,g5,b5]@2 d4 ~ d3@2 d4@2, ~@2 d4 ~@9 [d5,f#5,a5]@4", // D7 G D
  F: "g3@2 g4@2 [d5,g5,b5] ~ [g4,d5,g5]@2 [d5,g5,b5] ~ g4 ~ g3@2 g4 ~, d3 ~@3 g3@2 b5 ~ g3@2 [d5,g5,b5]@4 ~@2", // G G5 G
  G: "[b3,d5,f#5,b5]@2 b4 ~ b3@2 [d5,f#5,b5]@2 b3@2 b4 ~ b3@2 [b4,d5] ~, ~@6 b4 ~@3 [d5,f#5,b5]@5 ~", // Bm
  H: "d3@2 d4 ~ [d3,f#4,a4,d5]@2 d4 ~ [f#4,a4,d5] ~ [g4,b4]@2 d3 ~ [a4,c5]@2, ~@8 d3@2 d4 ~@3 d4 ~", // D G Am
  I: "d3 ~ [a4,c5]@2 d3 ~ [d4,a4,c5] ~ [d3,g4,b4]@2 d4 ~ [d3,f#4,a4]@2 d4 ~, ~@2 d4 ~@13", // Am D7 G D
  J: "g3@2 g4@2 [d5,g5,b5] ~ [g4,d5,g5]@2 [d5,g5,b5] ~ g4 ~ g3@2 g4 ~, ~@4 g3@2 b5 ~ g3@2 [d5,g5,b5]@4 ~@2", // G G5 G
  K: "c3@2 c4 ~ c3@2 c4 ~ [c3,c5]@2 [c4,g4,d5] ~ [g4,c5,e5] ~ [g4,c5,f5]@2, ~@8 g4 ~@3 c3@2 c4 ~", // C Csus2 C Csus4
  L: "c3@2 [g4,c5,e5]@2 c3@2 [g4,d5]@2 c3@2 c4 ~ c3@2 c4 ~, ~@2 c4 ~@3 c4 ~@3 [g4,c5]@5 ~", // C G5 C5
  M: "[g3,g4]@2 g4 ~ g3@2 g4@2 [b4,d5] ~ g4@2 g3 ~ d4 ~, b4@6 ~@2 g3@2 [b4,d5,g5]@5 ~", // G Bm G
  N: "d3@2 d4 ~ d3@2 [d5,f#5,a5]@2 d3@2 d4 ~ d3@2 d4 ~, [d5,f#5,a5]@4 ~@2 d4 ~@9, g5 ~@9 [d5,f#5,a5]@6", // D
  O: "c3@2 c4@2 c3@2 c4 ~ [c3,c5]@2 [g4,d5] ~ [g4,c5,e5] ~ [c4,g4,c5,f5]@2, ~@8 g4 ~ c4@2 c3@2 ~@2", // C G5 C Csus4
  P: "c3@2 [c4,g4,c5,e5]@2 c3@2 [c4,g4,d5]@2 c3@2 c4 ~ c3@2 c4 ~, ~@10 [g4,c5]@5 ~", // C Csus2 C5
  Q: "b2@2 b3 ~ b2@2 b3 ~ b2@2 b4@2 b2@2 b3@2, [f#4,b4,d5]@8 ~@2 [d5,f#5]@5 ~, ~@10 b3 ~@3 b4 ~", // Bm D
  R: "[b2,b4]@2 b3 ~ b2@2 [b4,d5,f#5]@2 b2@2 [b3,b4,d5,f#5]@2 ~@2 [b3,b4,d5,f#5]@2, [d5,f#5]@4 b4 ~ b3 ~@5 b2@4", // B Bm D
  S: "d3@2 d4 ~ d3@2 [f#5,a5]@2 d3@2 d4 ~ d3@2 d4 ~, a5@2 ~@3 [d5,f#5,a5]@3, g5 ~@5 d4 ~@9", T: "d3 ~@15",
  U: "~@4 [d5,f#5,a5]@2 ~@2 [d5,f#5,a5] ~ [d5,g5,b5]@2 ~@2 [d5,a5,c6]@2", // D G D7
  V: "~@2 [d5,a5,c6]@2 ~@2 [d5,a5,c6] ~ [d5,g5,b5]@3 ~ [d5,f#5,a5]@3 ~", // D7 G D
  W: "[d5,f#5,a5]@3 ~ [d5,f#5,a5]@2 ~@2 [d5,f#5,a5] ~ [d5,g5,b5]@2 ~@2 [d5,a5,c6]@2", // D G D7
  X: "[~@2 [d5,a5,c6]@3 ~ [d5,a5,c6] ~ [d5,g5,b5]@3 ~ [d5,f#5,a5]@7 ~ [d5,f#5,a5]@3 ~ [d5,f#5,a5] ~ [d5,g5,b5]@2 ~@2 [d5,a5,c6]@2]/2", // D7 G D G D7
  Y: "~@2 [d5,a5,c6]@3 ~ [d5,a5,c6] ~ [d5,g5,b5]@3 ~ [d5,f#5,a5]@4", // D7 G D
  Z: "d3@2 d4 ~ d3@2 [f#5,a5]@2 d3@2 d4 ~ d3@2 d4 ~, [d5,a5]@4 ~@2 d4 ~@9, g5 ~@9 [d5,f#5,a5]@6", // F#m D5 D
  AA: "g3 g4 ~@6, d3 ~@15",
})).s("gm_piano").gain(0.58)

// chords · piano · "A.PIANO 2" · G F#m G F#m
const piano_2 = note(`<
  ~@46
  [~@4 [g6,b6] ~ [g6,b6] ~ [g6,b6] ~ [g6,b6]@2 ~@4]
  [[f#6,a6] ~@5 a6@2 ~@8, ~@6 f#6 ~@9]
  ~@42
  [~@4 [g6,b6] ~ [g6,b6] ~ [g6,b6] ~ [g6,b6]@2 ~@4]
  [a6 ~@2 [f#6,a6] ~@4, f#6 ~@15]
  ~@41
>`).s("gm_piano").gain(0.58)

// chords · rock organ · "ORGAN 3"
const rock_organ = note("<~@58 A@2 B@2 C@2 B@2 D@2 E@2 F@2 G@2 H@2 ~@26 I@24 ~@6 J>".pickRestart({
  A: "[~@8 [g4,c5,e5]@23 ~]/2", B: "[[g4,b4,d5]@15 ~]/2", C: "[[g4,c5,e5]@31 ~]/2", D: "[[e5,g5,c6]@31 ~]/2",
  E: "[d5,g5,b5]/2", F: "[[d5,f#5]@15 ~]/2", G: "[[d5,f#5]@29 ~@3]/2", H: "[[d5,f#5]@31 ~]/2", I: "[d6@63 ~]/4",
  J: "g5 ~@3",
})).s("gm_rock_organ").gain(0.54)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@4 A@2 ~@12 B C D E F C G H ~@4 A@2 ~@12 B C D E F C G H ~@4 A@2 ~@8 I J K L ~@4 A@2 ~@12 B C D E F C G H ~@4 A@2
  ~@28 A@2 M
>`.pickRestart({
  A: "c4@7 ~ c4@7 ~", B: "~@4 [g4,c5] ~@7 [g4,c5] ~@3", C: "~@4 [g4,c5] ~@7 [g4,c5]@2 ~@2",
  D: "~@4 [g4,b4] ~@7 [g4,b4] ~@3", E: "~@4 a4 ~@7 [f#4,a4]@2 ~@2", F: "~@4 [g4,c5]@2 ~@6 [g4,c5] ~@3",
  G: "~@4 b4 ~@7 [f#4,b4] ~@3", H: "~@2 [f#4,b4] ~@3 [f#4,b4] ~",
  I: "c4@3 ~ [c4,g4]@3 ~ [c4,g4] ~ [c4,g4]@2 ~@2 [c4,g4]@2", J: "~@2 [c4,g4]@4 [c4,g4] ~ [c4,g4]@3 ~ [c4,g4]@3 ~",
  K: "[g3,d4]@3 ~ [g3,d4]@3 ~ [g3,d4] ~ [g3,d4]@3 ~ [g3,d4]@2", // G5
  L: "~@2 [g3,d4]@3 ~ [g3,d4]@3 ~ [g3,d4]@2 [g3,d4]@2 [g3,d4]@2", M: "[g3,d4] ~@7",
})).s("gm_overdriven_guitar").gain(0.72)

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

// drums · rim
const rim = s("rim").struct("<~@58 [~ x!7] [x!8]!3 ~@71>").gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B@5 C D@7 E B@7 C B@9 C D@7 E B@7 C B@6 ~@7 F B@13 C D@7 E B@7 C B@9 C B@3 C B@3 C B@3 C B@3 C B@3 C B@5 G H
>`.pickRestart({
  A: "~@8 x!8", B: "x!4", C: "x ~@3 x ~@3 x!8", D: "~ x ~ x", E: "~@4 x ~@3 x!8", F: "~@5 x!3",
  G: "x ~@3 x ~@3 x ~ x!6", H: "x",
})).gain(0.72)

// drums · low tom
const low_tom = s("lt").struct("<~@65 [~@5 x!3] ~@67>").gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@7 B A@3 B A@21 B A@3 B A@16 ~@4 C@2 D@2 A@15 B A@3 B A@46 E>".pickRestart({
  A: "x!8", B: "x!5 ~ x!2", C: "~ x ~@2", D: "~ x ~ x", E: "x",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<~@11 A ~@3 A ~@21 A ~@3 A ~@39 A ~@3 A ~@47>".pickRestart({
  A: "~@5 x ~@2",
})).gain(0.72)

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

stack(bass, piano, piano_2, rock_organ, overdriven_guitar, kick, rim, snare, low_tom, hihat, open_hat, crash)

More by The Rolling Stones