Strudelify

The Last Song

Elton John

KeyC majorTempo62 bpm
0:00/0:00
// The Last Song — Elton John
// 62 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 2 "harp" orchestral harp (copy of ch 9 "bass" synth bass 1); ch 8 "synth string" synth strings 1 (copy of ch 6 "brass" brass section)
// note: Full arrangement: all 50 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(62/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 · piano
const piano = note("<~@2 A B C@8 D@7 E@8 F@5 G H I J K L M@3 N O P Q R S@2 T ~>".pickRestart({
  A: "c4@6 ~ e4, [c3,g3], e4@7 ~, ~@3 c4", // C5
  B: "a3@5 ~@2 c4 a3@4 [a3,e4]@4, [f2,c4,e4] [g2,f3,c4,d4], ~@5 e3@3 ~@8, ~@3 a3 ~@4", // A5 Fmaj7 Gsus4
  C: "[~@4 c4@4 [c2,c3,e3,g3,c4]@16 ~ c4 c4@14 ~@6 [c4,b4]@9 e4 [a3,c4] [a3,c4,f4] ~@7 d4@3 ~@18 c4@2 [a3,d4]@4 ~@11 d4 c4@2 c4@2 ~@2 b4@9 ~@8 b3, [g2,g3,b3,d4]@8 ~@16 [c2,c3,e3,g3,d4]@16 [a2,e4]@15 ~ [f2,c3,g4]@14 e4@13 c3 e3 a3@3 ~@4 [a3,d4]@12 ~@4 c4@11 ~ g2@6 g2@2, ~@40 c4@6 ~@12 c4@10 d4@3 ~ g3@2 g2@14 ~@6 f4@10 ~@5 c5@10 ~@9, ~@42 e3@13 ~@3 [f3,a3,f4]@13 ~ c2@16 [d2,f3]@16 [a1,a3]@15 ~ [g1,b3,d4,a4]@8, ~@44 [a3,c5]@11 ~@9 e4@5 c4@2 ~ c4@4 c3 e3 g3@10 ~@5 e4@9 e4@2 ~@18 g4@6]/8", // C Cmaj7 Am F D5 G C A5 …
  D: "[~@6 g3!2 d4@4 ~@8 g3@3 d4 ~@8 e5@7 ~@8 a4@8 c4 ~@2 f4@4 ~@5 f4 ~@2 e4@2 ~@14 d4@2 ~@2 d4@2 ~@2 d4@2 d4@3 ~ d4@3 a3 a3@6 a3@2, [d4,g4]@8 g3@12 ~@10 e4@9 ~@3 e3@14 ~@16 g3@4 c3@6 g3@2 c4@4 ~@5 d3 a3@5 f4@5 ~@8, ~@4 g2@4 [g2,d3,g4]@16 [c2,g2,c3,e3,g3,d4]@15 ~ [a2,c4,e4]@15 ~ [f2,c3,f3,a3,c4]@15 ~ c2@16 d2@16 ~@8, ~@12 [d4,a4]@12 ~@2 c4@13 ~ a3@4 [a3,c5]@11 ~@7 f4@5 ~ f4@3 ~ c4@6 e3@10 [f3,a3]@6 f3@10 ~@8, ~@14 [f3,b4]@10 ~@7 g4@8 ~@7 b4@9 ~ g4@8 g4@5 g4@2 ~@3 g2@14 ~@4 a2@12 [a2,c4]@8]/7", // G5 C Am F D5 Am F Fdim …
  E: "[~@6 a4@2 a4@2 g4@4 ~@14 c5@2 c5@7 ~@3 g3@2 e5@2 c5!2 ~@9 d5 [g3,b4,e5]@2 g3@2 [g4,b4,d5] d4 d4@4 ~@3 d5 b4 ~@3 c5@2 e4!2 ~@8 c5@2 d3@2 ~@13 g4 ~@14 e4 d4 c4@4 ~@3 c5, ~@2 c5@6 [b3,d4]@7 b3@9 g4@2 d3@18 [c4,g4]@2 [g4,c5]@4 c4 g3 [c4,d4] g4 c5@2 [b3,g4]@4 b3@5 ~ g3@5 ~@3 e3@2 a3@2 e4@4 e3@2 c4 e4@3 ~@2 d3@3 d4@7 c5 b4 a4@2 f4@5 g4 a4@5 f3 g4 f4@2 ~ [e4,g4]@6 g4@2, ~@4 b4@4 g2@14 g4 g3 b4@4 g3@2 [f4,g4]@7 a3 c5@2 [c3,f5]@16 b2@16 [a2,d5]@16 g2@16 [f2,b4]@15 ~@6 e4@3, ~@10 d3@14 g2@32 ~@12 d4@3 ~ [e4,a4]@4 a4@12 b4@6 a4@2 b4@3 g3@5 c4@3 f3 c4@11 ~@5 c4@4, ~@14 g3@2 d4@23 d5 [g4,c5]@2 g3@2 e5@12 ~@2 d5 ~@8 b3@4 ~@5 c5@7 a3@5 [g3,d4]@4 g3@3 d3@9 ~@2 c3@13 ~ c3@8]/8", // Em G Bm C5 Csus2 Em Fsus2 F5 …
  F: "[c4@3 ~@3 d4 c4 ~@4 c3 ~@9 d4 e4 f4@2 f4@6 [g3,c4]@3 ~@3 d4@2 ~@12 d5@4 [a4,c5]@8 ~@4 [d4,d5]@4 ~@4 c4@3 ~, a3@7 ~ [c2,c4,e4,g4]@16 [g1,g2]@16 [c2,g2,c3,e3,g3,c4]@16 ~@24, e4@4 f4@3 ~@14 a3@3 [a3,c4]@8 [a3,e4]@8 ~@6 c5@10 ~@8 [c4,f4,a4,c5]@8 [g3,a3,g4]@8, ~@3 c4@4 ~@3 g2@14 ~@12 [g3,c4]@4 ~@7 d5 e5@8 ~@24, ~@5 e4@2 ~@7 d3@9 ~@12 d4@3 ~@7 g4@11 [e4,e5]@16 ~@8]/5", // C5 Am D C G C Am A5 …
  G: "~@8 e5@7 ~, [c2,g2,c3,e3,g3,d4]@15 ~, ~@2 c4@13 ~, ~@6 e4@9 ~, ~@7 g4@8 ~", // C
  H: "~@7 a4@8 c4, [a2,c4,e4]@15 ~, a3@4 [a3,c5]@11 ~, ~ e3@7, ~@6 b4@9 ~", // Am
  I: "~@2 f4@4 ~@5 f4 ~@2 e4@2, [f2,c3,f3,a3,c4]@15 ~, g4@8 g4@5 g4@2 ~, ~@6 f4@5 ~ f4@3 ~", // F
  J: "~@7 d4, c2@5 g3 c4@2, c4@3 e3@5, g3 c3@3, ~ g2@7",
  K: "~@2 d4@2 ~@2 d4@2 d4@3 ~ d4@3 a3, d2@6 a3@5 f4@5, [f3,a3]@5 d3@11, ~ a2@3, ~@3 f3@5", // F
  L: "a3@3 ~@4 a4, [a2,c4], ~@3 a3@5, ~@5 c5@3, ~@3 b4", // Am
  M: "[a4@2 g4@4 ~@14 c5@2 c5@7 ~@3 g3@2 e5@2 c5!2 ~@9 d5, g2@14 g4 g3 [g4,b4]@2 d3@18 [c4,g4]@2 [g4,c5]@4 c4 g3 [c4,d4] g4 c5@2, [b3,d4]@7 b3@13 g3@2 [f4,g4]@7 a3 c5@2 [c3,f5]@16, ~ d3@7 g2@16, ~@6 g3@2 d4@23 d5 [g4,c5]@2 g3@2 e5@12]/3", // G C5 Csus2 Bm Fsus2 F5 C5
  N: "[g3,b4,e5]@2 g3@2 [g4,b4,d5] d4 d4@4 ~@3 d5 b4 ~, b2, [b3,g4]@4 b3@5 ~ g3@5 ~, ~@2 d5 ~@8 b3@4 ~, ~@12 d4@3 ~", // Em G Em
  O: "~@2 c5@2 e4!2 ~@8 c5@2, [a2,d5]@12 c4 e4@3, [e4,a4] a4@3, ~ e3 a3 e4@2 e3@3, ~@4 c5@7 a3@5", // D5 A5
  P: "d3@2 ~@13 g4, g2@12 c5 b4 a4@2, b4@6 a4@2 b4@3 g3@5, [g3,d4]@4 g3@3 d3@9, ~@2 d3@3 d4@11", // G5
  Q: "~@14 e4 d4, [f2,b4]@11 f3 g4 f4@2 ~, f4@5 g4 a4@9 ~, c4@3 f3 c4@11 ~, ~@2 c3@13 ~", // Fdim
  R: "c4@4 ~@3 c5 c4@3 ~@3 d4 c4, c3@8 ~@3 c4@2 e4@2 ~, [e4,g4]@5 e4@3 e4@4 f4@3 ~, ~@4 c4@4 a3@7 ~, ~@6 g4@9 ~", // Em
  S: "[~@4 c3 ~@9 d4 e4 f4@2 ~@12 d4@2, c2@27 d4 [g3,c4]@4, [c4,e4,g4]@13 a3@3 c4@8 [a3,e4]@8, ~ g2@7 [g1,g2]@8, ~@6 d3@9 ~ a3@2 f4@14]/2", // C5 C A5 G
  T: "[c2,g2,c3,e3,g3,c4]", // C
})).s("gm_piano").gain(0.48)

// other · tubular bells · "bells"
const tubular_bells = note("<~@29 [~@13 g5 c6 d6] [e6 d6 e6@2] [c6 d6 g5 c5] ~@18>").s("gm_tubular_bells").gain(0.48)

// chords · string ensemble 1 · "strings"
const string_ensemble_1 = note("<A@2 B@4 ~@7 C@8 D@8 E@2 F G@4 H I J@2 K L M N O@4 P@2>".pickRestart({
  A: "[f2,f3,f5,g5,c6,e6]/2", B: "[e5@3 [d4,d5]@2 [c4,c5]@2 ~]/4",
  C: "[~@8 [c4,g4]@16 a3@15 f5@17 c4@16 d5@16 a3@16 g3@24, ~ c5@8 ~@7]/8", // C5
  D: "[~ [c4,c5,e5]@2 [b3,b4,d5,g5]@2 [a3,a4,c5,e5,a5]@2 [g4,b4,d5,g5]@2 [f3,a4,f5]@2 [c4,g4] [a3,a4] g4@2 f5, ~@8 g4@13 ~@51 c5@56, ~@11 e5@4 ~, ~@13 g3@3]/8", // C G Am G F C5 A
  E: "[[g4,d5]@4 [e5,c6]@7 ~ a5@4, ~ c5@2 ~]/2", F: "f5 [a4,f5]", G: "[[c4,g4]@16 a3@15 f5@17 c4@16, c5]/4", H: "d5",
  I: "a3", J: "g3/2", K: "[c4,c5,e5], g4@13 ~@3", L: "[b3,b4,d5,g5]", M: "[a3,a4,c5,e5,a5]", N: "[g4,b4,d5,g5]",
  O: "[[f3,a4,f5]@2 [c4,g4] [a3,a4] g4@2 f5 [g4,d5], c5@7 ~, ~ e5@2 ~, ~ g3]/4", P: "[[e5,c6]@7 ~@9, c5]/2",
})).s("gm_string_ensemble_1").gain(0.24)

// chords · string ensemble 1 · "strings" · soft notes
const string_ensemble_1_soft = note("<~@2 A@2 ~@9 B@4 C@5 ~@6 D ~@2 E F@3 G H@2 I@2 ~@7 J ~@2>".pickRestart({
  A: "[e4@3 ~]/2", B: "[~@5 f4@2 [g4,e5], ~ e5@4 ~@3, ~@3 a4@4 ~]/4",
  C: "[~@8 [d4,f5]@16 [c5,e5]@16 d5@21 f5@6 ~@13, ~@8 a4@31 ~ [b4,g5]@32 ~@8]/5", D: "~ a4", E: "~ c5",
  F: "[~@2 f4, e5@2 ~, ~ a4@2]/3", G: "[g4,e5]", H: "[[d4,f5] [c5,e5], a4@31 ~]/2", I: "[d5@21 f5@6 ~@5, [b4,g5]]/2",
  J: "a4 ~",
})).s("gm_string_ensemble_1").gain(0.16)

// other · brass section · "brass"
const brass_section = note("<~@29 [~@13 g4 c5 d5] [e5 d5 e5@2] [c5@4 d5@4 g4@4 c4@3 ~] ~@18>")
  .s("gm_brass_section").gain(0.48)

// other · cello
const cello = note("<A@2 ~ B ~@17 C@6 D@3 E F ~@8 G H I J K L M@2 ~@2>".pickRestart({
  A: "f2/2", B: "f2 ~", C: "[~@4 c2@8 b2@7 c3 a2@8 g2@8 f2@7 g2 ~@4]/6", D: "[a2@8 g2@32 c2@5 e2 g2 c3]/3",
  E: "c2 b2 a2@2", F: "f2 g2", G: "~@3 g2", H: "b2@3 d3", I: "a2", J: "g2", K: "f2", L: "c3@3 b2 a2@4", M: "g2/2",
})).s("gm_cello").gain(0.4)

// other · cello · soft notes
const cello_soft = note("<~@2 A B@3 ~@20 C ~@13 D ~@7 E ~>".pickRestart({
  A: "c2", B: "[~@8 g2@16 c2@17 ~@7]/3", C: "~ c3", D: "c2@3 ~", E: "c2@15 ~",
})).s("gm_cello").gain(0.24)

// bass · synth bass 1 · "bass"
const bass = note(`<
  ~@2 A B C D E F G H I J K L M N O P Q R S C T U R V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AD K AM AN Y@2 ~@2
>`.pickRestart({
  A: "c2!2 c2@2", B: "f1@8 g1@7 ~", C: "g1@8 c1@7 ~", D: "c1@4 c2@4 c1@7 ~", E: "c1@8 a1@3 ~ a1@3 ~",
  F: "a1@4 a1@4 f1@7 ~", G: "f1@8 c1@7 ~", H: "c1 d1", I: "d1@8 a1@7 ~", J: "a1 g1", K: "g1@7 ~ g1@8",
  L: "g1@4 g1@4 c1@7 ~", M: "c1@8 a1@7 ~", N: "a1@8 f1@3 ~ f1@4", O: "f1 c1", P: "c1@8 d1@7 ~", Q: "d1 a1",
  R: "a1@8 g1@7 ~", S: "g1@7 ~ g1@4 g1@4", T: "c1@8 b1@7 ~", U: "b1@8 a1@7 ~", V: "g1 f1", W: "f1@2 c2!2",
  X: "a1!2 g1@2", Y: "g1!2", Z: "g1 c2", AA: "c2 b1 a1@2", AB: "f1 g1", AC: "c1@7 ~ c1@8, g1 ~@15", AD: "a1@7 ~ a1@8",
  AE: "f1@3 ~ f1@4 f1@8", AF: "c1!2", AG: "d1@7 ~ d1@8", AH: "a1!2", AI: "g1@7 ~ g1@7 ~", AJ: "g1!2 g1@2",
  AK: "c1@7 ~ c1@8", AL: "b1@7 ~ b1@8", AM: "f1!2", AN: "c2!2 a1!2",
})).s("gm_synth_bass_1").gain(0.48)

stack(piano, tubular_bells, string_ensemble_1, string_ensemble_1_soft, brass_section, cello, cello_soft, bass)

More by Elton John