Strudelify
I'd Love To Change The World cover art

1971 · A Space in Time

I'd Love To Change The World

Ten Years After

KeyE minorTempo120 bpm
0:00/0:00
// I'd Love To Change The World — Ten Years After
// 120 bpm, 4/4, key E minor. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 2 "rhythm guitar" named as a guitar, played on electric guitar clean (its shakuhachi patch is not one)
// note: Full arrangement: all 82 bars on a 32-step grid, each part at one level. 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 · [...]/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 · electric guitar clean · "rhythm guitar"
const electric_guitar_clean = note(`<
  ~ A B C@2 D@2 E@2 A B C@2 F@4 G@2 ~@6 H@4 A B C@2 F@4 G@2 ~@6 H@4 I@4 J@6 K@4 L@2 H@4 G@2 ~@2 M@2 N@2 O@2 ~@3
>`.pickRestart({
  A: "[g4,b4,e5]@6 [g4,b4,e5] ~ [g4,b4,e5]@3 ~@21", B: "[g4,b4,d5]@6 [g4,b4,d5] ~ [g4,b4,d5]@3 ~@21",
  C: "[[e4,g4,c#5]@4 ~ [e4,g4,c#5] ~ [e4,g4,c#5]@3 ~@22 e5@15 ~@2 d#5@14 ~, ~@30 g4@16 ~ f#4@17, ~@31 c5@15 ~@2 b4@16]/2", // C#dim
  D: "[~ e6@22 ~ e6@4 d6@25 e6@5 ~@2 d6@3 ~]/2",
  E: "[c6@19 ~ d6@6 ~@2 e6@9 ~@2 e6@8 d#6@16 ~, ~@28 d6 ~@10 d6@2 ~@23]/2",
  F: "[g5@16 g5@3 ~ [a5,e6]@4 [a#5,d#6]@4 [b5,e6]@23 ~ b5@4 d#6@4 b5@3 ~ c6@16 e6@4 [c6,g6]@4 a6@3 ~ a6@3 ~@2 b6@5 ~@2 b6@7 ~ a6@4 g6@3 ~ e6@5 ~@3, e5@34 ~@17 e6@4 ~@5 e6@18 ~@14 c6@10 ~ c6@8 b5@7 ~ b5@6 ~@3, ~@96 a#6@2 ~@6 a#6 ~@23]/4", // A5 D#5 E5 C5
  G: "[[b5,e6]@63 ~]/2", // E5
  H: "[~@16 g5@3 ~ [a5,e6]@4 [a#5,d#6]@4 [b5,e6]@23 ~ b5@4 d#6@4 b5@3 ~ c6@16 e6@4 [c6,g6]@4 a6@3 ~ a6@3 ~@2 b6@5 ~@2 b6@7 ~ a6@4 g6@3 ~ e6@5 ~@3, e5@34 ~@17 e6@4 ~@5 e6@18 ~@14 c6@10 ~ c6@8 b5@7 ~ b5@6 ~@3, ~@96 a#6@2 ~@6 a#6 ~@23]/4", // A5 D#5 E5 C5
  I: "[[g4,b4,e5]@6 [g4,b4,e5] ~ [g4,b4,e5,g5]@2 b5@2 d6@2 e6@4 e6@5 ~ e6@3 ~@5 [g4,b4,d5]@6 [g4,b4,d5] ~@2 b5@2 d6@2 e6@4 ~ e6 e6@3 ~@10 [e4,g4,c#5]@4 ~ [e4,g4,c#5] ~@3 b5@2 d6@3 e6@4 e6 ~ e6@3 ~ e6@3 ~@5 f#6 g6@2 ~ e6@2 f#6@2 g6@2 f#6@2 e6@2 ~@3 f#6@2 e6@3 d#6@2 e6@2 d#6@3 e6@2 ~, ~@28 e6@11 g5@3 ~@14 e6@16 g5@2 ~@21 c5@15 ~@2 b4@16, ~@40 [g4,b4,d5]@3 ~@28 [e4,g4,c#5]@3 ~@20 g4@16 ~ f#4@17, ~@96 e5@15 g6@3 ~@14, ~@99 f#6@2 ~@9 f#6@2 ~ d#5@14 ~]/4", // Em G C#dim G C#dim
  J: "[f6@2 ~ e6@3 [g4,b4,e5] ~ [g4,b4,e5]@3 ~ e6 ~ e6@3 e6 ~ e6@3 ~ e6@2 ~@2 e6@3 ~@3 d6@3 e6@2 [g4,b4,d5] ~ [g4,b4,d5,e6]@3 e6 ~ e6@6 e6@3 ~ e6@2 ~@2 e6@4 ~@2 d6@3 ~ [e4,g4,c#5] ~@2 e6@4 ~ e6@4 e6@2 d6@3 ~ e6@7 ~ e6 ~ g6@2 ~@3 f#6@2 ~ f#6@2 ~ g6@2 ~ e6 ~@2 e6@4 d#6@2 e6@2 d#6@2 e6@2 d#6 ~ [g4,b4,e5]@6 [g4,b4,e5,e6] ~ [g4,b4,e5]@3 ~@3 e6@3 ~ e6@2 b5@2 d6@2 e6@2 d6@2 b5@3 ~ [g4,b4,d5,e6]@5 ~ [g4,b4,d5] ~ [g4,b4,d5]@3 ~@3 e6@4 b5@2 ~@3 b5@2 d6@2 e6@2 b5@2 d6, [g4,b4,e5]@6 ~@26 [g4,b4,d5]@6 ~@26 [e4,g4,c#5]@4 ~@3 [e4,g4,c#5]@3 ~@20 g4@16 ~ f#4@17 ~@64, f#6 ~@6 e6@4 ~@20 b5@2 ~@30 b5@2 ~@3 e6@3 ~@24 c5@15 ~@2 b4@16 ~@64, ~@96 e5@15 ~@2 d#5@14 ~@46 d6@2 ~@5 d6@2 ~@10, ~@96 f#6@2 ~ f#6 e6@4 g6@3 e6@2 ~ f#6@2 ~ f#6@2 ~@12 e6@6 ~@3 e6@5 ~@18 d6@2 ~@4 e6@7 b5@2 ~@7 e6@4 ~@7]/6", // Em G Em7 C#dim Em Em7 G Em …
  K: "[[e4,g4,c#5,e6]@4 ~ [e4,g4,c#5] ~ [e4,g4,c#5,e6]@2 b5@2 d6@2 e6@2 b5@2 d6@2 ~ b5@2 d6@2 ~ b5@2 d6@2 ~@4 d6@2 e6@2 b5@2 d6@2 e6@2 b5@2 ~@4 d#5@14 ~ [g4,b4,e5]@6 [g4,b4,e5] ~ [g4,b4,e5]@3 ~@3 e6@4 ~ e6@4 ~ e6 ~ e6 ~ e6 ~@3 [g4,b4,d5]@6 [g4,b4,d5] ~ [g4,b4,d5]@3 g5@2 b5@2 e6@2 g5@2 ~ e6@2 g5@2 b5@2 ~ g5@2 ~@3, ~@4 b5@3 ~@23 g4@16 ~ f#4@17 ~@64, ~@5 d6@2 ~@12 e6@3 ~@2 e6@3 ~@2 e6@2 c5@15 ~@2 [b4,d#6]@16 ~@64, ~@31 b5@3 ~@11 d6@4 ~@14 e6@6 ~ e6@7 ~@18 e6@13 ~@7 b5@3 ~@4 e6@6, ~@32 e5@15 ~@81]/4", // C#dim Em G B
  L: "[~@2 e6@3 [e4,g4,c#5] ~@2 e6@2 a5@2 ~ e6@2 a5@2 ~ e6@2 a5@2 ~@3 a5@5 ~@2 e5@14 ~@3 d#5@14 ~, [e4,g4,c#5]@4 ~@3 [e4,g4,c#5]@3 ~@20 g4@16 ~ f#4@17, a5@2 ~@3 a5@3 ~@15 e6@5 ~@18 d#6@18, ~ b5@4 ~ b5@3 ~@3 b5@3 ~@2 b5@3 ~@2 b5@4 ~@5 [c5,e6]@15 ~@2 b4@16]/2", // C#dim C
  M: "[e6@45 d6@3 ~ e6@3 ~ g6@3 ~ a6@2 ~@2 g6@2 ~]/2", N: "[~ b6@19 a6@4 g6@3 ~ e6@19 ~ d#6@15 ~, ~ a#6 ~@62]/2",
  O: "[e6@29 ~@3]/2",
})).s("gm_electric_guitar_clean").gain(0.45)

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

// drums · snare
const snare = s("sd").struct("<A B@3 C ~@3 A B@3 C ~@15 A B@3 C ~@15 A B@3 C B@3 C B@3 C B@3 C ~@17>".pickRestart({
  A: "~@15 x", B: "~@4 x ~@2 x ~ x ~@2 x ~@3", C: "~@4 x ~@2 x ~@7 x",
})).gain(0.44)

// drums · low tom
const low_tom = s("lt").struct("<A ~@3 A ~@3 A ~@3 A ~@15 A ~@3 A ~@15 A ~@3 A ~@3 A ~@3 A ~@3 A ~@17>".pickRestart({
  A: "~@13 x!2 ~",
})).gain(0.44)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@3 A ~@3 A ~@3 A ~@15 A ~@3 A ~@15 A ~@3 A ~@3 A ~@3 A ~@3 A ~@17>".pickRestart({
  A: "~@8 x!5 ~@3",
})).gain(0.44)

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

// drums · ride
const ride = s("rd").struct("<~ A B@3 ~@4 A B@3 ~@16 A B@3 ~@16 A B@3 A B@3 A B@3 A B@3 ~@17>".pickRestart({
  A: "~@5 x ~@3 x ~@2 x ~@3 x ~@2 x ~@4 x ~@3 x ~@3", B: "x!8",
})).gain(0.52)

stack(electric_guitar_clean, kick, snare, low_tom, mid_tom, crash, ride)