Strudelify
The Last Time cover art

Out Of Our Heads

The Last Time

The Rolling Stones

KeyA♭ majorTempo81 bpm
0:00/0:00
// The Last Time — The Rolling Stones
// 81 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 72 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(81/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 · "FINGERDBAS"
const bass = note(`<
  ~@2 A B C D E F G H I J K@2 L M N O P Q R S T U V W X K Y L Z A B C D E F G H I J K@2 L M N O P Q R S T U V W X K Y L
  AA ~@2 A B C D E F G H I AB
>`.pickRestart({
  A: "eb2@4 ~@2 bb1@3 ~@3 db2@5 ~ ab1@4 ~@2", B: "eb2@4 ~@2 bb1@3 ~@3 db2@4 ~@2 ab1@3 ~@3",
  C: "eb2@4 ~@2 bb1@4 ~@2 db2@5 ~ ab1@3 ~@3", D: "eb2@4 ~@2 bb1@4 ~@2 db2@4 ~@2 ab1@3 ~@2 db2",
  E: "eb2@4 ~@2 bb1@2 ~@4 db2@4 ~@2 ab1@4 ~ bb1", F: "eb2@4 ~@2 bb1@4 ~@2 db2@4 ~ db2 ab1@3 bb1@3",
  G: "eb2@4 ~@2 bb1@4 ~@2 db2@5 ~ ab1@4 ~@2", H: "eb2@5 ~ bb1@5 ~ db2@4 ~ db2 ab1@4 ~@2",
  I: "eb2@4 ~ eb2 bb1@4 ~ bb1 db2@3 ~@2 db2 ab1@3 bb1@3", J: "eb2@3 ~@2 eb2 bb1@3 ~@3 db2@3 ~@2 db2 ab1@3 bb1@3",
  K: "ab1 ~ eb1 ~ ab1 ~ eb1 ~", L: "db2 ~ ab1 ~ db2 ~ ab1 ~", M: "db2 ~ ab1 ~ ab1 ~ eb1 ~",
  N: "ab1@3 ~@3 eb1@2 ~ ab1@2 ~ eb2@4 ~@2 bb1@3 ~@3", O: "db2@5 ~ ab1@4 ~@2 eb2@4 ~@2 bb1@3 ~@3",
  P: "db2@4 ~@2 ab1@3 ~@3 eb2@4 ~@2 bb1@4 ~@2", Q: "db2@5 ~ ab1@3 ~@3 eb2@4 ~@2 bb1@4 ~@2",
  R: "db2@4 ~@2 ab1@3 ~@2 db2 eb2@4 ~@2 bb1@2 ~@4", S: "db2@4 ~@2 ab1@4 ~ bb1 eb2@4 ~@2 bb1@4 ~@2",
  T: "db2@4 ~ db2 ab1@3 bb1@3 eb2@4 ~@2 bb1@4 ~@2", U: "db2@5 ~ ab1@4 ~@2 eb2@5 ~ bb1@5 ~",
  V: "db2@4 ~ db2 ab1@4 ~@2 eb2@4 ~ eb2 bb1@4 ~ bb1", W: "db2@3 ~@2 db2 ab1@3 bb1@3 eb2@3 ~@2 eb2 bb1@3 ~@3",
  X: "db2@3 ~@2 db2 ab1@3 bb1@3 ab1@3 ~@3 eb1@3 ~@3", Y: "ab1 ~ eb1 ~ db2 ~ ab1 ~",
  Z: "ab1@3 ~@3 eb1@3 ~@3 ab1@3 ~@3 eb1@2 ~ ab1@2 ~", AA: "ab1", AB: "eb2@3 ~@2 eb2 bb1@3 ~@3 db2@3 ~@2 db2 ~@6",
})).s("gm_electric_bass_finger").gain(0.47)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note("<A@12 B@2 C@3 D@9 E@4 F A@10 B@2 C@3 D@9 E@4 G A@11 H>".pickRestart({
  A: "ab3 db4@2 eb4 ~ db4 ~ c4, ~@2 db3 ab2",
  B: "[~@9 c4@3 ~@9 c4@3 ~@9 c4@3 ~@7 eb4@2 c4@2 ~, ab2@5 ~ ab2@5 ~ ab2@5 ~ ab2@6, ~@3 c4@4 eb4@9 ab4@11 c4@4 eb4@5 ~@3 c4@5 ~@4, ~@4 ab4@11 c4@4 eb4@9 ab4@10 ~@2 ab4@7 ~]/2",
  C: "[~@19 db5@2 ~@9 db5@3 ab4@2 ~@5 ab4 ~@4 c4@3 ~@9 c4@3 ab3@3 db4@6 eb4@3, db3@11 ~ db3@9 ~@3 db3@11 ~ ab2@11 ~ ab2@12 ~@12, ~@3 f4@4 ab4@5 ~@3 ab4@5 ~ ab4@2 ~@4 ab4@3 ~@13 eb4@8 ~ ab4@7 ~@13, ~@4 db5@7 ~ db5@5 ~@7 db5@5 ~@26 eb4@4 ~@13, ~@9 f4@6 ~ f4@5 ~ f4@5 ~ f4@7 ~@4 c4@6 ~@6 c4@5 ~@16]/3",
  D: "~ db4 ~ c4 ab3 db4@2 eb4, db3 ab2 ~@2",
  E: "[~@3 db4@3 ~@3 c4@3 ~@9 c4@3 ~@9 c4@3 ~@9 c4@3 ~@7 eb4@2 c4@2 ~@20 db5@2 ~@9 db5@3 ab4@2 ~, db3@6 ab2@6 ab2@10 ~@2 ab2@10 ~@2 ab2@10 ~@2 ab2@12 db3@11 ~ db3@9 ~@3 db3@11 ~, ~@15 c4@4 eb4@9 ab4@11 c4@4 eb4@5 ~@3 c4@5 ~@8 db5@7 ~ db5@5 ~@7 db5@5 ~@7, ~@16 ab4@11 c4@4 eb4@9 ab4@10 ~@2 ab4@7 ~@4 f4@4 ab4@5 ~@3 ab4@5 ~ ab4@2 ~@4 ab4@3 ~@6, ~@69 f4@6 ~ f4@5 ~ f4@5 ~ f4@7 ~]/4",
  F: "~@4 ab4 ~@4 c4@3 ~@9 c4@3, ab2@11 ~ ab2@12, ~@3 c4@6 ~@6 c4@4 eb4@4 ~, ~@7 eb4@8 ~ ab4@7 ~",
  G: "[ab2,c4,eb4,ab4]", H: "ab3@3 db4@6 eb4@3 ~@3 db4@4 ~@5, ~@2 db3 ~",
})).s("gm_electric_guitar_clean").gain(0.36)

// chords · electric guitar clean · "CLEAN GTR" · soft notes
const electric_guitar_clean_2 = note("<A@12 ~@4 B C@9 D ~@4 A@10 ~@4 B C@9 D ~@4 A@11 E>".pickRestart({
  A: "~@3 bb3@5 bb3@3 ~@3 ab3@3 ~@3 ab3@3 ~", B: "~@15 bb3@5 bb3@3 ~", C: "~@2 ab3@3 ~@3 ab3@3 ~@4 bb3@5 bb3@3 ~",
  D: "~@2 ab3@3 ~@3 ab3@3 ~@13", E: "~@3 bb3@5 bb3@3 ~@3 ab3@3 ~@7",
})).s("gm_electric_guitar_clean").gain(0.21)

// chords · acoustic guitar steel · "+12SNR GTR"
const acoustic_guitar_steel = note(`<
  ~ A B@10 C D E F G H@9 I J K L C B@10 C D E F G H@9 I J K M@2 ~ A B@9 N
>`.pickRestart({
  A: "~ eb4@10 ~ [ab2,db3,ab3,db4]@5 ~ [eb2,ab2,eb3,ab3]@5 ~, [eb2,bb2,eb3,bb3]@11 db2@6 ab1@6 ~", // Db5 Ab5 Eb5
  B: "[eb2,bb2,db3,g3,bb3,eb4]@3 [eb2,bb2,db3,g3,bb3,eb4]@2 [bb2,db3,g3,bb3,eb4] [eb2,bb2,db3,g3,bb3,eb4]@3 [eb2,bb2,db3,g3,bb3,eb4]@3 [db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3,db4]@2 [ab2,db3,ab3,db4] [ab1,eb2,ab2,c3,eb3,ab3]@3 [ab1,eb2,ab2,c3,eb3,ab3]@3", // Eb7 Db Db5 Ab
  C: "[eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@2 [eb2,ab2,c3,eb3,ab3] [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@2 [eb2,ab2,eb3,ab3] [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@3", // Ab Ab5 Ab
  D: "[eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@2 [ab2,c3,eb3,ab3] [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@2 [eb2,ab2,eb3,ab3] [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@3", // Ab Ab5 Ab
  E: "[db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3,db4]@2 [ab2,db3,f3,ab3,db4] [db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3,db4]@2 [ab2,db3,ab3,db4] [db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3,db4]@3", // Db Db5 Db
  F: "[db2,ab2,db3,f3,ab3]@3 [db2,ab2,db3,f3,ab3]@2 [ab2,db3,ab3] [db2,ab2,db3,f3,ab3]@3 [db2,ab2,db3,f3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@2 [eb2,ab2,c3,eb3,ab3] [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@3", // Db Db5 Db Ab
  G: "[eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@2 [eb2,ab2,eb3,ab3] [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@3 [eb2,bb2,db3,g3,bb3,eb4]@3 [eb2,bb2,db3,g3,bb3,eb4]@2 [bb2,db3,g3,bb3,eb4] [eb2,bb2,db3,g3,bb3,eb4]@3 [eb2,bb2,db3,g3,bb3,eb4]@3", // Ab Ab5 Ab Eb7
  H: "[db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3,db4]@2 [ab2,db3,ab3,db4] [ab1,eb2,ab2,c3,eb3,ab3]@3 [ab1,eb2,ab2,c3,eb3,ab3]@3 [eb2,bb2,db3,g3,bb3,eb4]@3 [eb2,bb2,db3,g3,bb3,eb4]@2 [bb2,db3,g3,bb3,eb4] [eb2,bb2,db3,g3,bb3,eb4]@3 [eb2,bb2,db3,g3,bb3,eb4]@3", // Db Db5 Ab Eb7
  I: "[db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3,db4]@2 [ab2,db3,ab3,db4] [ab1,eb2,ab2,c3,eb3,ab3]@3 [ab1,eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@2 [eb2,ab2,c3,eb3,ab3] [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@3", // Db Db5 Ab
  J: "[eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@2 [eb2,ab2,eb3,ab3] [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@2 [ab2,c3,eb3,ab3] [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@3", // Ab Ab5 Ab
  K: "[eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@2 [eb2,ab2,eb3,ab3] [eb2,ab2,c3,eb3,ab3]@3 [eb2,ab2,c3,eb3,ab3]@3 [db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3,db4]@2 [ab2,db3,f3,ab3,db4] [db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3,db4]@3", // Ab Ab5 Ab Db
  L: "[db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3,db4]@2 [ab2,db3,ab3,db4] [db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3]@3 [db2,ab2,db3,f3,ab3]@2 [ab2,db3,ab3] [db2,ab2,db3,f3,ab3]@3 [db2,ab2,db3,f3,ab3]@3", // Db Db5 Db Db5 Db
  M: "[[db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3,db4]@2 [ab2,db3,ab3,db4] [db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3]@3 [db2,ab2,db3,f3,ab3]@2 [ab2,db3,ab3] [db2,ab2,db3,f3,ab3]@3 ~@4 [eb3,ab3]@23, ~@7 [db2,ab2,db3,f3,ab3] [ab2,c3]@8, ~@11 eb2@12 ~]/2", // Db Db5 Db Db5 Db Ab5 Db Ab
  N: "[eb2,bb2,db3,g3,bb3,eb4]@3 [eb2,bb2,db3,g3,bb3,eb4]@2 [bb2,db3,g3,bb3,eb4] [eb2,bb2,db3,g3,bb3,eb4]@3 [eb2,bb2,db3,g3,bb3,eb4]@3 [db2,ab2,db3,f3,ab3,db4]@3 [db2,ab2,db3,f3,ab3,db4]@2 [ab2,db3,ab3,db4] ~@6", // Eb7 Db Db5
})).s("gm_acoustic_guitar_steel").gain(0.28).pan(0.6)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean_3 = note("<~@33 A B C D E F G@3 ~@30>".pickRestart({
  A: "~@3 eb5@5 [g4,bb4] [eb4,g4,eb5]@2 ~ [db4,f4,ab4,db5]@6 [c4,eb4,ab4,c5]@5 ~, [eb4,g4,bb4] ~@2", // Gm Eb Db Ab Eb
  B: "~@3 eb5@5 [g4,bb4] [eb4,g4,eb5]@2 ~ [db4,f4,ab4,db5]@5 ~ [c4,eb4,ab4,c5]@5 ~, [eb4,g4,bb4]@7 ~@17", // Gm Eb Db Ab Eb
  C: "[eb4,g4,bb4]@3 ~ eb5@8 ~@2 [f4,ab4,db5]@2 ~@4 [eb4,ab4,c5] ~@3", D: "~@3 [eb4,g4,bb4] ~@2 [eb4,g4,bb4]@13 ~@5",
  E: "~@2 eb4 gb4 ~ ab4@18 gb4", F: "ab4@3 gb4 ~ eb4@10 ~@5 db5@3 ~",
  G: "[db5@9 ~@2 ab4@9 gb4 eb4 ~ gb4@4 eb4 ~@2 eb4@2 ~@7 eb4 ~ gb4@3 eb4 gb4 ~ eb4@6 ~@19]/3",
})).s("gm_electric_guitar_clean").gain(0.4).pan(0.6)

// chords · electric guitar clean · "CLEAN GTR" · soft notes · Eb
const electric_guitar_clean_4 = note(`<
  ~@33
  [~@8 eb4 bb4@2 ~@13]!2
  [~@3 [eb4,g4,bb4]@7 ~@14]
  [~@6 ab4 ~@17]
  ~@3
  [~@14 db4 ~@6 ab4 ~@2]
  ~@31
>`).s("gm_electric_guitar_clean").gain(0.2).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@2 A@16 B A@21 C A@6 B A@11 ~@3 A@10>".pickRestart({
  A: "x!4", B: "x ~@2 x!2 ~ x ~@2 x ~@2", C: "x ~@2 x ~@2 x ~@2 x!2 ~",
})).gain(0.44)

// drums · snare
const snare = s("sd").struct(`<
  ~
  [~@7 x]
  [~ x ~ x ~ x ~ x]!28
  [~@3 x ~@5 x ~@5 x ~@5 x ~ x]
  [~ x ~ x ~ x ~ x]!28
  ~@2
  [~@7 x]
  [~ x ~ x ~ x ~ x]!10
>`).gain(0.44)

// drums · low tom
const low_tom = s("lt").struct("<~@11 A ~@3 B ~ C ~@8 D ~@4 E D F D@4 ~ D@2 ~@4 B@2 ~@8 G ~@7 H@8 ~>".pickRestart({
  A: "~@21 x!3", B: "~@10 x!2 ~@12", C: "~@5 x ~@18", D: "~@22 x!2", E: "~@23 x", F: "~@16 x!2 ~@6", G: "~@8 x!2 ~@14",
  H: "~@11 x",
})).gain(0.33)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@11 [~@5 x] ~@3 [~@3 x ~@4] ~@47 [~@5 x]!8 ~>").gain(0.33)

// drums · open hat
const open_hat = s("oh").struct("<~@31 [~@11 x] ~@40>").gain(0.33)

// drums · crash
const crash = s("cr").struct("<~@2 A@10 B A@2 C A D A@9 B A@3 B@2 A@5 B A@2 B A@3 C@2 A@8 E A@3 ~@3 A@10>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x!2 ~ x ~ x ~ x", C: "~ x ~ x!3 ~ x", D: "~ x!3 ~ x ~ x",
  E: "~@3 x ~@5 x!2 ~ x ~@2 x ~@5 x ~@2",
})).gain(0.22)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@24 B A@9 C D A@18 E ~@3 F@2 A@11>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x!3 ~ x ~ x", C: "~ x ~ x ~ x!3", D: "x!2 ~ x ~ x ~ x", E: "~ x ~ x ~@4", F: "x!8",
})).gain(0.38)

stack(
  bass, electric_guitar_clean, electric_guitar_clean_2, acoustic_guitar_steel, electric_guitar_clean_3,
  electric_guitar_clean_4, kick, snare, low_tom, hihat, mid_tom, open_hat, crash, tambourine
)

More by The Rolling Stones