Strudelify
As Tears Go By cover art

December’s Children (And Everybody’s)

As Tears Go By

The Rolling Stones

KeyE♭ majorTempo120 bpm
0:00/0:00
// As Tears Go By — The Rolling Stones
// 120 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · electric guitar jazz · "Guitar"
const electric_guitar_jazz = note("<~@53 A B C D A B C D E F G H I J K D ~@44>".pickRestart({
  A: "~@4 eb3@3 ~ f3@3 ~ g3@3 ~", B: "f3@3 ~ f3@3 ~ c3@3 ~ eb3@3 ~", C: "eb3@7 ~@3 c3@2 eb3@3 ~", D: "d3@13 ~@3",
  E: "~@4 ab3@2 ab3@2 ab3@2 g3@5 ~", F: "f3@5 ~ f3@2 eb3@2 f3@5 ~", G: "~@2 g3@2 g3@5 ~ f3@2 eb3@3 ~", H: "c3@13 ~@3",
  I: "~@4 c4@3 ~ c4@3 ~ c4@3 ~", J: "c4@5 ~ c3@2 d3@3 ~ eb3@3 ~", K: "f3@7 ~@3 eb3@2 f3@2 eb3@2",
})).s("gm_electric_guitar_jazz").gain(0.47)

// chords · string ensemble 2 · "Str...."
const string_ensemble_2 = note(`<
  ~@21 A B C D A B C D C D A E C F D@2 A B C D A B C D C D A E C F D@2 A B C D A B C D C D A E C F D@2 A B C D A B C D C
  D A E C F D@2 A B C D A B C D C D A E C F D@2 G H I J G H I J G H I J
>`.pickRestart({
  A: "[eb4,g4,bb4]", B: "[f4,a4,c5]", C: "[eb4,ab4,c5]", D: "[d4,f4,ab4,bb4]", E: "[eb4,g4,c5]",
  F: "[eb4,ab4,c5]@2 [d4,g4,bb4] [c4,f4,ab4]", G: "[bb3,eb4,g4]", H: "[c4,f4,a4]", I: "[c4,eb4,ab4]",
  J: "[bb3,d4,f4,ab4]", // Bb7
})).s("gm_string_ensemble_2").gain(0.13)

// chords · epiano2 · "Piano"
const epiano2 = note(`<
  ~ A B C D E F G H E F G H G H I J K L H@2 E F G H E F G H G H I J K L H@2 E F G H E F G H G H I J K L H@2 E F G H E F
  G H G H I J K L H@2 E F G H E F G H G H I J K L H@2 E F G H E F G H G H I J K L H@2 E F G H E F G H E F G H
>`.pickRestart({
  A: "~@4 [c4,eb4]@3 ~ [d4,f4]@3 ~ [eb4,g4]@3 ~", B: "f4@3 ~ f4@3 ~ g4@3 ~ [eb4,f4,a4]@3 ~, [a3,c4,eb4]@5 ~@3",
  C: "[eb4,ab4]@3 bb4 [d4,f4]@3 ab4, c5@5 ~@3 bb4@5 ~@3", // Ab5 Dm
  D: "[c4,eb4,ab4]@3 ~ [bb3,d4,g4]@3 ~ [ab3,c4,f4]@3 ~ [ab3,c4,d4]@3 ~", // Ab Gm Fm Dm7b5
  E: "g4!2 bb4 g4!3 bb4 eb5, [bb3,eb4]@7 ~ [bb3,eb4]@7 ~", // Eb5
  F: "f4!2 a4 f4!3 a4 c5, [c4,eb4]@7 ~ [c4,eb4]@7 ~, a4 ~ a4 ~", // Cm
  G: "eb4@2 eb4@2 ab4@2 c5@3 ~ eb4@2 ab4@2 c5@2, c4@13 ~@3, ab4 ~@3",
  H: "d4@2 d4@2 f4@2 bb4@3 ~ d4@2 f4@2 bb4@2, [bb3,ab4]@13 ~@3, f4 ~@3", // Bb7
  I: "g4@2 g4@2 bb4@2 eb5@3 ~ g4@2 bb4@2 g4@2, [bb3,eb4]@13 ~@3", // Eb5
  J: "eb4@2 eb4@2 g4@2 c5@3 ~ eb4@2 g4@2 eb4@2, c4@13 ~@3, g4 ~@3",
  K: "eb4@2 eb4@2 ab4@2 c5@3 ~ eb4@2 ab4@2 eb4@2, [ab3,c4]@13 ~@3", // Ab
  L: "eb4@2 eb4@2 ab4@2 c5@2 [d4,g4,bb4]@3 ~ [c4,eb4,f4,ab4]@3 ~, [ab3,c4]@13 ~@3", // Gm Fm7 Ab
})).s("gm_epiano2").gain(0.21)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A B C D A B E F A B E F E F A G E H F@2 A B E F A B E F E F A G E H F@2 A B E F A B E F E F A G E H F@2 A B E F A B
  E F E F A G E H F@2 A B E F A B E F E F A G E H F@2 A B E F A B E F E F A G E H F@2 A B E F A B E F A B E F
>`.pickRestart({
  A: "eb2@4 ~@2 eb2 ~ eb2@6 ~@2", B: "f2@4 ~@2 f2 ~ f2@6 ~@2", C: "ab2@4 ~@2 ab2 ~ bb2@6 ~@2",
  D: "ab2@4 ~@2 ab2 ~ f2@3 ~ bb2@3 ~", E: "ab2@4 ~@2 ab2 ~ ab2@6 ~@2", F: "bb2@4 ~@2 bb2 ~ bb2@6 ~@2",
  G: "c2@4 ~@2 c2 ~ c2@3 ~ g2@3 ~", H: "ab2@4 ~@2 ab2 ~ g2@3 ~ f2@3 ~",
})).s("gm_electric_bass_finger").gain(0.23)

// drums · kick
const kick = s("bd").struct("<~ A@3 B A@15 B A@31 B A@15 B A@44>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~@2 x",
})).gain(0.46)

// drums · rim
const rim = s("rim").struct("<~@5 [~ x ~ x]!31 [~ x ~@2] ~@76>").gain(0.46)

// drums · snare
const snare = s("sd").struct("<~ A@3 B ~@31 C A@15 D A@15 E A@15 F A@15 F A@12>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@5 x!3 ~@3", C: "~@5 x ~@2", D: "~@2 x ~ x ~@4 x ~ x!2 ~@3", E: "~@4 x ~@4 x ~ x!2 ~@3",
  F: "~@2 x ~@2 x ~@2",
})).gain(0.46)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<[~@10 x!2 ~@4] ~@4 [~ x ~ x ~ x ~ x]!15 [~ x ~ x ~@4] [~ x ~ x ~ x ~ x]!11 ~@81>")
  .gain(0.17)

// drums · mid tom
const mid_tom = s("mt").struct("<~@36 [~@7 x] ~@47 [~@14 x!2] ~@15 [~@7 x] ~@12>").gain(0.46)

// drums · open hat
const open_hat = s("oh").struct("<A ~@3 B ~@15 C ~@31 B ~@15 B ~@44>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@5 x ~ x",
})).gain(0.46)

// drums · high tom
const high_tom = s("ht").struct("<~@36 [~@3 x] ~@47 [~@3 x] ~@15 [~@12 x!2 ~@2] ~@12>").gain(0.46)

// drums · crash
const crash = s("cr").struct("<~@5 A ~@15 A ~@15 A ~@31 A ~@15 A ~@27>".pickRestart({
  A: "x",
})).gain(0.4)

// drums · ride
const ride = s("rd").struct("<~ A@3 B ~@48 A@15 B ~@32 A@9 B ~@2>".pickRestart({
  A: "x!8", B: "x!5 ~@3",
})).gain(0.4)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@110 [~@5 x!3] [x!8]!2>").gain(0.12)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<A ~@4 B C@15 B C@10 D@4 E F D@14 E ~@16 F D@14 E F D@14 E ~@12>".pickRestart({
  A: "x!3 ~", B: "~ x!3", C: "x!4", D: "x!8", E: "x!5 ~@3", F: "~ x!7",
})).gain(1.17)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct(`<
  [~@10 x!2 ~@4]
  ~@4
  [~ x ~ x ~ x ~ x]!15
  [~ x ~ x ~@4]
  [~ x ~ x ~ x ~ x]!11
  ~@81
>`).gain(0.59)

stack(
  electric_guitar_jazz, string_ensemble_2, epiano2, bass, kick, rim, snare, hihat, hihat_soft, mid_tom, open_hat,
  high_tom, crash, ride, ride_soft, cabasa, cabasa_soft
)

More by The Rolling Stones