Strudelify
All Those Years Ago cover art

1981 · Somewhere In England

All Those Years Ago

George Harrison

KeyD majorTempo126 bpm
0:00/0:00
// All Those Years Ago — George Harrison
// 126 bpm, 4/4, key D major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 118 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/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.

// chords · epiano1 · "Piano"
const epiano1 = note(`<
  A B C D E F G H I J K L@3 G M I J K N@2 O@2 P@2 Q@2 R S@2 G T I U@2 V@2 W K X@3 Y D E Z G M I J AA L@3 G H I J AA AB@4
  AC@2 Q@2 AD AE@2 G T I U@2 V@2 W K AF@3 AA AG@3 AH@6 AI@2 AJ@6 AK@2 AL@6 AK@2 AM@6 AK@2
>`.pickRestart({
  A: "~@16 f4 ~ g4@2 g#4@2 a4@2", B: "c5@3 ~ c5@6 a4@2 g#4@3 ~ g4@2 f4@3 ~ c#4@2", C: "d4@3 ~@7 [c4,f4]@14",
  D: "f4@3 ~ g4@6 f4@2 d4@12", E: "d5@3 ~ c5@2 a4@3 ~ g#4@2 g4@2 f4@2 ~ c4@2 ~ g#3@2 g3@2, ~@8 d4 ~@3",
  F: "f#3@3 ~ a4@2 [d4,f#4,a4]@3 ~ a4@2 [d4,f#4,a4]@3 ~ a4@2 [d4,f#4,b4]@3 ~ a4@2", G: "[f#4,a4,d5]@3 ~@3 f#3@4 g3 a3",
  H: "g3@9 b4@3 [e4,g4,b4]@3 ~ [e4,g4,b4]@4 c#5@2 b4@2", I: "[g4,a#4,c#5,e5]@4 f#5 e5 [e4,a#4,d5]@3 [e4,a#4,c#5,e5]@3",
  J: "[f#4,a4,d5]@4 c#5 d5 [e4,a4,c#5]@4 b4 a4", K: "[d4,g4,b4] d5 ~ [d4,g4,a#4]@3, ~@5 b4@2 ~@5",
  L: "[[d4,f#4,a4]@6 d5@6 [d#4,a4,b4]@6 f#4@3 ~ e4@2 e4@12 [g3,e4]@6 [b3,g4]@3 ~ [a3,f#4]@6 a4@2 [d4,f#4,a4]@3 ~ a4@2 [d4,f#4,a4]@6 [d4,f#4,b4]@3 ~ a4@2, ~@22 [g3,b3,d4]@15 ~@35]/3", // D B7 C Em D Bm G
  M: "g3@9 ~ b4@2 [e4,g4,b4]@3 ~ [e4,g4,b4]@4 c#5@2 b4@2", // Em
  N: "[[d4,f#4,a4]@6 d5@6 [d#4,a4,b4]@6 f#4@3 ~ [g3,b3,d4]@26, ~@22 e4@3 ~@23]/2", // D B7 G
  O: "[[c#4,e4,a4]@8 b4@2 c#5@2 [f#4,a4,d5]@6 f#5@3 ~ [e4,g4,b4]@15 ~@3 [e4,g4,c#5]@5 a4@3]/2", // A D Em C#dim
  P: "[[e4,a4,c#5]@3 ~ [e4,a4]@6 c#5@2 [e4,a4,c#5,e5]@6 c#5@3 ~ d4@2 d4@3 a3@3 g4@3 ~ f#4@6 a3@2 d4@6, ~@2 c#5@2 ~@7 a4@13, ~@11 f#4@4 ~@9]/2", // A A5 A
  Q: "[[c#4,e4,a4]@8 b4@2 c#5@2 [f#4,a4,d5]@6 f#5@3 ~ [e4,g4,b4]@15 ~@3 [e4,g4,b4]@5 a4@3]/2", // A D Em
  R: "~@4 [e4,g4,a4]@5 c#5@3 c#5@3 ~ [e4,g4,a4,d5]@2 e5@6, ~ c#5 ~@4", // A7 Em7
  S: "[~@4 [f4,g4,a4,c#5]@2 c#5@3 ~ d5@2 f#5@6 d5@3 ~ [f#4,d5]@11 a4@3 [d4,f#4,a4]@3 ~ [d4,f#4,a4]@4 b4@2 a4@2, ~@11 a4@5 ~@8]/2", // Faug D
  T: "g3@2 b4@2 a4@2 [e4,g4,b4]@3 ~ b4@2 [e4,g4,b4]@3 ~ b4@2 [e4,g4,c#5]@3 ~ b4@2", // Em C#dim
  U: "[[f#4,a4,d5]@4 c#5 d5 [e4,a4,c#5]@2 b4@2 ~@2 [d4,g4,b4]@2 d5@2 ~@2 [d4,g4,a#4]@6, ~@11 c#5@2 ~@4 b4@2 ~@5]/2", // D A G Gm
  V: "[[d4,f#4,a4]@6 d5@6 [d#4,a4,b4]@6 f#4@3 ~ [g3,b3,d4,e4]@14 [e4,g4]@6 [g4,b4]@6]/2", // D B7 Em7 Em G
  W: "[f#4,a4,d5]@4 c#5 d5 [e4,a4,c#5]@4 b4 c#5", // D A
  X: "[[d4,f#4,a4]@6 d5@6 [d#4,a4,b4]@6 f#4@3 ~ [g3,b3,d4]@26 c5@3 ~ c5@6 a4@2 g#4@3 ~ g4@2 f4@3 ~ d4@2, ~@22 e4@3 ~@47]/3", // D B7 G
  Y: "~@5 [c4,f4]@7", Z: "f#3@3 ~ a4@2 [d4,f#4,a4]@3 ~ a4@2 [d4,f#4,a4]@3 ~ a4@2 [d4,f#4,b4]@3 ~ a4@2, ~@3 f#4@2 ~@19",
  AA: "[d4,g4,b4] d5 b4 [d4,g4,a#4]@3", // G Gm
  AB: "[[d4,f#4,a4]@6 d5@6 [d#4,a4,b4]@6 f#4@3 ~ [g3,b3,d4]@26 [c#4,e4,a4]@8 b4@2 c#5@2 [f#4,a4,d5]@6 f#5@3 ~ [e4,g4,b4]@15 ~@3 [e4,g4,c#5]@5 a4@3, ~@22 e4@3 ~@71]/4", // D B7 G A D Em C#dim
  AC: "[[e4,a4,c#5]@3 ~ [e4,a4]@5 c#5@3 [e4,a4,c#5,e5]@6 c#5@3 ~ d4@2 d4@3 a3@3 g4@3 ~ f#4@6 a3@2 d4@6, ~@2 c#5@2 ~@7 a4@13, ~@22 f#4@9 ~@17]/2", // A A5 A
  AD: "~@4 [e4,g4,a4]@6 c#5@2 c#5@3 ~ [e4,g4,a4,d5]@2 e5@6, ~ c#5 ~@4", // A7 Em7
  AE: "[~@4 [f4,g4,a4,c#5]@2 c#5@3 ~ d5@2 f#5@6 d5@3 ~ [f#4,d5]@12 a4@2 [d4,f#4,a4]@3 ~ [d4,f#4,a4]@4 b4@2 a4@2, ~@11 a4@5 ~@8]/2", // Faug D
  AF: "[[d4,f#4,a4]@6 d5@6 [d#4,a4,b4]@6 f#4@3 ~ e4@3 ~@11 [e4,g4]@6 [g4,b4]@6 [f#4,a4,d5]@8 c#5@2 b4@2 [e4,a4,c#5]@8 b4@2 a4@2, ~@22 [g3,b3,d4]@27 ~@23]/3", // D B7 Em G D A G
  AG: "[[d4,f#4,a4]@6 d5@6 [d#4,a4,b4]@6 f#4@3 ~ [g3,b3,d4]@26 [c#5,e5]@12 [c#5,e5]@4 [d5,f#5]@4 [e5,g5]@4, ~@22 e4@3 ~@23 a4@24]/3", // D B7 G C#m D Em
  AH: "[~@6 [c5,f5]@3 ~ d5@18 g5@4 ~ g5@6 ~ f5@2 d5@3 ~ [g4,b4]@2 [g4,b4]@18 [g4,b4,e5]@3 ~@18 f#5@5 e5@2 ~@10 e5@2 f#5@2 e5@9 ~@3 [g4,b4]@4 d5@4 ~@2 a#4@2 d5@3 ~ e5@8, ~@5 a4@18 e5@10 ~@2 [g4,a#4]@13 [a4,d5]@6 [a4,c#5]@6 ~@6 [g4,a#4]@6, ~@94 f#5@10 ~@14 e5@7 ~@19]/6", // F5 G Em G Gm D5 A Gm
  AI: "[a4@6 d5@6 [d#4,f#4,b4]@6 f#4@3 ~@3 b3@12 b3@3 ~ a4@2 b4@3 ~ d5@2, [d4,f#4]@6 ~@5 e4@7 ~@6, ~@8 g3@5 ~@3]/2", // B D
  AJ: "[~@6 [c5,f5]@3 ~ d5@18 g5@4 ~@2 g5@6 f5@2 d5@3 ~ [g4,b4]@2 [g4,b4]@18 [g4,b4,e5]@3 ~@19 f#5@4 e5@2 ~@10 e5@2 f#5@2 e5@9 ~@3 [g4,b4]@4 d5@4 ~@2 a#4@2 d5@3 ~ e5@8, ~@5 a4@18 e5@10 ~@2 [g4,a#4]@13 [a4,d5]@6 [a4,c#5]@6 ~@6 [g4,a#4]@6, ~@94 f#5@10 ~@14 e5@7 ~@19]/6", // F5 G Em G Gm D5 A Gm
  AK: "[a4@6 d5@6 [d#4,f#4,b4]@6 f#4@3 ~@3 b3@12 b3@3 ~ a4@2 b4@3 ~ d5@2, [d4,f#4]@6 ~@5 e4@9 ~@4, ~@8 g3@5 ~@3]/2", // B D
  AL: "[~@6 [c5,f5]@3 ~ d5@18 g5@4 ~@2 g5@6 f5@2 d5@3 ~ [g4,b4]@2 [g4,b4]@18 [g4,b4,e5]@3 ~@18 f#5@5 e5@2 ~@10 e5@2 f#5@2 e5@9 ~@3 [g4,b4]@4 d5@4 ~@2 a#4@2 d5@3 ~ e5@8, ~@5 a4@18 e5@9 ~@3 [g4,a#4]@13 [a4,d5]@6 [a4,c#5]@6 ~@6 [g4,a#4]@6, ~@94 f#5@10 ~@14 e5@7 ~@19]/6", // F5 G Em G Gm D5 A Gm
  AM: "[~@6 [c5,f5]@3 ~ d5@18 g5@4 ~@2 g5@6 f5@2 d5@3 ~ [g4,b4]@2 [g4,b4]@18 [g4,b4,e5]@3 ~@19 f#5@4 e5@2 ~@10 e5@2 f#5@2 e5@9 ~@3 [g4,b4]@4 d5@4 ~@2 a#4@2 d5@3 e5@9, ~@5 a4@18 e5@10 ~@2 [g4,a#4]@13 [a4,d5]@6 [a4,c#5]@6 ~@6 [g4,a#4]@6, ~@94 f#5@10 ~@14 e5@7 ~@19]/6", // F5 G Em G Gm D5 A Gm
})).s("gm_epiano1").gain(0.45)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A@6 B C D C E F A@2 B C D C E G H F I J H F K@2 A@2 B C D C E F D C L G A@6 B C D C E F A@2 B C D C E G H F I J H F
  K@2 A@2 B C D C E F D C L F D C E F I A@2 F C D C E F A@2 F C D C E F A@2 F C D C E F A@2 F C D C E F
>`.pickRestart({
  A: "[d2,a2]@2 [d2,a2] [d2,b2]@2 [d2,b2] [d2,a2]@2 [d2,a2] [d2,b2]@2 [d2,b2]", // D5 G D5 G
  B: "[e2,b2]@2 [e2,b2] [e2,b2]@2 [e2,b2] [e2,b2]@2 [e2,b2] [e2,b2]@2 [e2,b2]", C: "e2@2 e2 e2@2 e2 g2@2 g2 g2@2 g2",
  D: "d2@2 d2 d2@2 d2 f#2@2 f#2 f#2@2 f#2", E: "d2@2 d2 c#2@2 c#2 b1@2 b1 f#2@2 f#2",
  F: "e2@2 e2 e2@2 e2 e2@2 e2 e2@2 e2", G: "e2@4 e2@2 e2@4 e2@2 e2@3 d2@3 c#2@3 b1@3",
  H: "a1@2 a1 a1@2 a1 d2@2 d2 d2@2 d2", I: "a1@2 a1 a1@2 a1 a1@2 a1 a1@2 a1", J: "d2@2 d2 d2@2 d2 d2@2 d2 d2@2 d2",
  K: "a1 a1@3 a1 a1@3", L: "d2@2 d2 c#2@2 c#2 b1@2 b1 d2@2 d2",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · synth strings 1 · "Strings"
const synth_strings_1 = note("<~ A@5 ~@35 A@5 ~@40 B C@3 ~@4 D C@3 ~@4 D C@3 ~@4 D C@3 ~@4>".pickRestart({
  A: "[~@6 d6@41 [c6,f6]@5 ~ [c6,f6]@3 [a5,d6]@63 ~]/5", B: "~@5 [c6,f6]@3 [a5,d6]@15 ~",
  C: "[~@4 [d6,g6]@3 ~@2 [a5,d6,g6]@6 ~ f6@2 d6@3 ~ [g5,b5,e6]@50, ~ a5 ~@22]/3", // G5 Dsus4 Em
  D: "[c6,f6]@3 ~@2 [c6,f6]@3 [a5,d6]@15 ~", // F5 D5
})).s("gm_synth_strings_1").gain(0.2)

// chords · synth strings 1 · "Strings" · soft notes
const synth_strings_1_soft = note("<~@87 A ~@7 A ~@7 A ~@7 A ~@6>".pickRestart({
  A: "~@15 a5@2 ~ a5@3 ~@3",
})).s("gm_synth_strings_1").gain(0.13)

// other · string ensemble 2 · "Strings 2"
const string_ensemble_2 = note("<~@21 A B@2 C D E ~@6 F@3 ~ F@3 ~@33 F@3 G F@3 G F@3 H@2 I ~@31>".pickRestart({
  A: "a4 d5", B: "e5/2", C: "d5", D: "a4 c#5", E: "e5", F: "[d6@5 c#6@6 b5@6 a#5@6 a5@7 ~@6]/3",
  G: "b5@5 c#6@6 d6@6 f#6@6 ~", H: "[b5@5 c#6@6 d6@6 f#6@6 e6@6 ~@6 e6@4 ~ f#6@3 ~ g6@3 ~]/2", I: "d6 ~@5",
})).s("gm_string_ensemble_2").gain(0.1)

// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  ~@11 A B@2 ~@21 A B@2 ~@10 C D E ~@5 C D E ~@30 F D E ~@5 F D E ~@5 F D E ~@5 F D E ~@2
>`.pickRestart({
  A: "~@11 e4", B: "[[e4,g4]@3 [d4,f#4]@2 ~ [g3,d4,e4]@2 ~ [b3,g4]@2 [a3,f#4]@7 ~@6]/2", C: "~@7 [e4,a#4,c#5,e5]",
  D: "[f#4,a4,d5]@2 [a4,c#5] [e4,a4,c#5]@2 ~", E: "[d4,g4,b4]@7 ~ b4@4 [d4,g4,a#4]@3 ~ [d4,g4,b4]@7 ~",
  F: "~@7 [e4,a#4,c#5]", // A#dim
})).s("gm_electric_guitar_clean").gain(0.45)

// other · electric guitar clean · "Guitar Lead"
const electric_guitar_clean_2 = note("<~@19 A@3 ~@2 B@2 C D E F G F ~@32 H@2 C D E F G I ~@46>".pickRestart({
  A: "[~@11 f5@9 ~ f#5@9 ~@6]/3", B: "[~@6 g5@3 ~ f#5@6 a4@2 d5@18 d5@12]/2", C: "e5@10 e5 c#5", D: "a4 a5@5",
  E: "~@3 a5@11 ~@10", F: "a4", G: "~@2 a4!2", H: "[~@4 a4@2 g5@3 ~ f#5@6 a4@2 d5@17 ~ d5@12]/2", I: "g4",
})).s("gm_electric_guitar_clean").gain(0.57)

// other · overdriven guitar · "Lead"
const overdriven_guitar = note("<~@44 A B C@2 ~@4 D@4 ~@62>".pickRestart({
  A: "~@21 a3 ~ b3", B: "~ d4@2 ~ f#4@5 ~ a3@2 ~ d4@2 b3@2 f4@5 ~ b3, ~@3 b3@2 ~@7 b3@2 ~@8 a3@2",
  C: "[~ d4@2 b3@3 ~@3 b4@5 ~@2 a4@2 f4@2 d4@2 e4@24 ~@2]/2",
  D: "[~@18 e5@3 e5@19 ~@2 b4@3 b4@19 ~@2 f#4@3 f#4@26 ~]/4",
})).s("gm_overdriven_guitar").gain(0.31)

// drums · kick
const kick = s("bd").struct("<~@3 A@2 B@36 C@2 A@2 B@15 D B@25 C@2 A@2 B@28>".pickRestart({
  A: "x!4", B: "x!2", C: "x", D: "x ~ x!2",
})).gain(0.22)

// drums · snare
const snare = s("sd").struct("<~@5 A@7 B A@14 ~ C A@12 ~ D ~ E A@15 F A@6 ~ C A@16 G ~@3 C A@3 H A@24>".pickRestart({
  A: "~ x ~ x", B: "~@3 x ~@2 x!6", C: "~@6 x!6", D: "x", E: "x!12", F: "~ x!3", G: "~@3 x ~@2 x ~ x!4",
  H: "~@3 x ~@5 x ~ x",
})).gain(0.22)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@13 A@14 B ~ A@12 B@2 ~@2 A@22 C@2 A@17 D@4 A@28>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x", C: "x!2 ~ x", D: "x!4",
})).gain(0.22)

// drums · mid tom
const mid_tom = s("mt").struct("<~@27 [~ x ~ x]!2 ~@38 [~ x ~ x]!2 ~@49>").gain(0.22)

// drums · crash
const crash = s("cr").struct(`<
  ~@13 A ~@3 B ~@10 C A ~@3 B ~@7 A@2 ~@2 A ~@3 B ~@7 B ~@10 C A ~@3 B ~@11 A ~@4 A ~@3 A ~@11 A ~@7 A ~@3
>`.pickRestart({
  A: "x", B: "~ x ~ x", C: "~ x ~@2",
})).gain(0.14)

// drums · tambourine
const tambourine = s("tb").struct("<~@3 A@2 B C@35 ~@2 A@2 D@11 E D@4 F C@7 G D@15 H ~@2 A@2 C@28>".pickRestart({
  A: "x!24", B: "~ x!3", C: "~ x ~ x", D: "x ~ x!2 ~ x!2 ~ x!2 ~ x", E: "x ~ x!2 ~ x ~@2 x!2 ~ x", F: "x!2 ~ x",
  G: "~@2 x!2 ~ x!2 ~ x!2 ~ x", H: "x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x ~@4 x",
})).gain(0.17)

stack(
  epiano1, bass, synth_strings_1, synth_strings_1_soft, string_ensemble_2, electric_guitar_clean,
  electric_guitar_clean_2, overdriven_guitar, kick, snare, pedal_hat, mid_tom, crash, tambourine
)

More by George Harrison