Strudelify

Final Reunion End Title

The Alan Parsons Project

KeyA minorTempo100 bpm
0:00/0:00
// Final Reunion   End Title — The Alan Parsons Project
// 100 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 6 "Marimba" marimba (copy of ch 3 "Rhodes 1" piano)
// note: Full arrangement: all 81 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · brass section · "Analog Brass"
const brass_section = note("<~@25 A@7 B@2 ~@26 C@2 D@3 E F G@8 H@4 I@2>".pickRestart({
  A: "[~@14 [c5,a5]@12 [d5,b5]@4 ~ e5@11 [g5,e6]@4 [e5,c6]@11 [d5,b5]@4 [c5,a5]@16 [d5,b5]@11 [c5,a5]@4 [d5,b5]@12 [e5,c6]@3 ~ [e5,c6]@12 [d5,b5]@4 [c5,a5]@16 [a4,c6]@11 [b4,d6]@4 [c5,e6]@8 [e5,a6]@8 ~ e6@11 [b4,d6]@4 [a4,c6]@15 [b4,d6]@12 [a4,c6]@4 [b4,d6]@6, ~@30 c6@11 ~@130 c5@11 ~@42]/7", // F G C G F G F G …
  B: "[~@2 [c5,e6]@6 ~ [c5,e6]@12 [b4,d6]@4 [a4,c6]@17 ~@22]/2", // C Bm Am
  C: "[~@21 [a3,a4]@7 ~ [b3,b4]@8 [c4,c5]@7 [e4,d5] ~@7 [c4,c5]@3 ~ b3@2 [a3,a4]@3 ~ [g3,g4]@2, ~@44 e5@8 ~@4 b4 ~@7]/2", // A B C E7 C A G
  D: "[~ a3@18 [g3,g4]@8 [a3,a4]@8 [b3,b4]@8 [d4,d5]@7 [c4,c5]@3 ~ [b3,b4]@3 [a3,a4]@3 ~ [g3,g4]@2 [a3,a4]@15 ~@5 [a2,a3]@7 [b2,b3]@6, a4@18 ~@36 a3 ~@2 b3 ~@38]/3", // G A B D C B A G …
  E: "~@2 [c3,c4]@8 [e3,e4]@7 [c3,c4]@11 [b2,b3]@2 ~@2", F: "~ [a2,a3]@15 ~ [g2,g3]@7 ~ a3@7, ~@3 a2",
  G: "[[b2,b3]@8 [d3,d4]@8 [c3,c4]@7 [b2,b3]@8 [a2,a3]@15 ~@2 [a2,a3,a5]@10 ~ a5@2 b5@2 [c3,c4]@7 ~@4 b5@2 ~ d6@2 ~@8 [b2,b3]@7 [a2,a3]@16 ~ d6@9 c6@2 [a2,a3,d6]@2 c6@2 [b2,b3,b5]@8 ~@3 c6@2 b5@2 [c3,c4]@12 [b2,b3]@2 ~@2 [a2,a3,e6]@16 [g2,g3,a5]@8 ~ g5@2 a5@2 b5@2 [b2,b3]@8 ~@3 b5@2 c6@2 d6@2 ~@11 [b2,b3]@4 [a2,a3]@16 [g2,g3]@7 [a2,a3]@8 [b2,b3]@4 [e6,g6], ~@58 g5@2 ~@3 c6@11 ~@2 c6@2 ~@2 e6@30 ~@26 b5@2 ~@3 a5@17 ~@30 c6@12 ~@6 e6@29 ~ d6@17 ~@3, ~@59 [b2,b3]@4 ~@8 [e3,e4]@7 ~ [c3,c4]@7 ~@24 [g2,g3]@12 ~@12 [d3,d4]@7 ~@40 [a2,a3]@7 ~@8 [d3,d4]@8 ~ [c3,c4]@11 ~@40]/8", // B D C B A C B A …
  H: "[~@3 [e6,g6] ~@3 [e6,g6] ~@3 [c3,c4]@11 [b2,b3]@2 ~@3 [a2,a3]@15 ~ a5@7 [a2,a3,e6]@8 [c3,c4,c6]@8 [e3,e4,a6]@7 ~ a6@7 ~@4 [b2,b3]@3 ~ e6@9 c6@6 ~@10 e6 ~@5 [b2,b3]@6 g6 ~, ~@3 [d3,d4]@8 [e6,a6]@31 [g2,g3]@8 ~@23 [c3,c4]@12 ~@4 [a2,a3]@15 [g2,g3]@9 [a2,a3]@7 ~@8, ~@81 d6@8 ~@16 d6@21 ~@2]/4", // Em C B A A5 C A5 B …
  I: "[~ g6@2 ~ g6@2 ~@3 [c3,c4]@10 [b2,b3]@5 [a2,a3]@15 ~@8 e6@8 ~@9, [d3,d4]@9 ~@31 [a2,a3]@17 ~@7, d6@5 ~@3 [e6,a6]@31 a5@8 ~@17]/2", // C B A D A A5
})).s("gm_brass_section").gain(0.36)

// chords · piano · "Rhodes 2"
const piano = note("<~ A@7 B@4 C@8 D@7 E F G H I J K L@8 ~@39>".pickRestart({
  A: "[~@32 a4@28 ~@2 [g4,a4]@30 ~@2 g4@27 ~@4 b4@26 ~@5 [a1,d4]@8 [a2,g3,a3,d4]@3 ~ [g3,a3,d4] ~ [g3,a3] ~@20 [g3,a3,d4]@24 ~@4 [g1,g2,f3,g3,c4] ~ [g1,g2,f3,g3] ~@2, ~@29 d4@30 ~@2 [d4,e4]@30 ~@2 [d4,e4]@28 ~@2 [d4,e4]@28 ~@5 [g3,a3]@7 ~@24 a1@27 ~@10, ~@30 e4@30 ~@110 d4@2 ~@17 a2@25 ~@10, ~@31 g4@29 ~@64 g4@27 ~@70 c4@2 ~]/7", // Gsus2 D5 Dsus4 Gsus2 Csus4 G7 Dsus2 Gsus2
  B: "[~@6 g3 [g1,g2,f3,c4] [g1,g2,f3,g3,c4] ~@9 [g2,f3,g3] [g1,c4] ~@2 [g1,g2,f3,g3] ~@7 [g3,a3,d4]@26 ~ [g3,a3,d4]@8 ~ [g3,a3,d4]@5 [a1,a2,g3,a3,d4] ~@20 [g3,a3,d4]@22 ~@6 [g1,g2,f3,g3,c4] ~ [g1,g2,c4]@2 ~@4, ~@22 c4@2 ~@2 a1@29 ~@2 [a1,a2]@13 ~@18 a1@26 ~@14, ~@28 a2@27 ~@35 a2@25 ~@7 [f3,g3] ~@5]/4", // Csus4 G7 C5 G7 Gsus2 Dsus4 Gsus2 Csus4 …
  C: "[~@4 [g1,g2,f3,g3,c4] ~ [g1,f3,g3,c4] ~@8 [g1,g2,f3,g3,c4] ~@3 [f3,g3,c4]@2 ~@6 [g3,a3,d4]@25 ~@3 [f3,a3]@29 ~@2 [g3,b3]@31 ~@4 [g3,a3,d4]@3 ~ [g3,a3,d4]@3 ~ [g3,a3,d4] ~ [g3,a3,d4] ~@21 [g3,a3,d4]@3 ~ [g3,d4]@2 ~ [g3,a3,d4] ~ [g3,a3,d4] ~@17 [f3,a3]@28 ~@3 [g3,b3]@31 ~@5 [g3,d4]@3 [g3,a3,d4]@2 ~@2 [g3,a3,d4] ~, ~@6 g2@2 ~@11 [g1,g2] ~@3 a1@29 ~@65 a1@16 ~@15 a1@17 ~@77 a1@14, ~@25 a2@27 ~@67 a2@14 ~@17 a2@15 ~@79 a2@12, ~@157 a3 ~@88 a3@3 ~@7]/8", // Csus4 Fsus2 Gsus2 F G Gsus2 G5 Gsus2 …
  D: "[[g3,a3,d4] ~@21 [g3,a3,d4]@3 ~ [g3,a3,d4]@2 ~@2 [g3,a3,d4] ~ [g3,a3,d4] ~@20 [g3,a3,d4]@3 ~ [g3,a3,d4]@2 ~@2 [g3,a3,d4] ~ [g3,a3] ~@20 [g3,a3,d4]@3 ~ [g3,a3,d4]@2 ~@2 [g3,a3,d4] ~ [g3,a3] ~@21 [g3,a3,d4]@3 ~ [g3,a3,d4]@2 ~@2 [g3,a3,d4] ~ [g3,a3,d4] ~@20 [g3,a3,d4]@3 ~ [g3,a3] ~@3 [g3,a3,d4] ~ [g3,a3] ~@20 [g3,a3,d4]@2 ~@2 [g3,a3,d4] ~@4 [b3,d4,g4]!2 ~@20 [g3,a3,d4]@3 ~ [g3,a3,d4] ~@3 [b3,d4,g4] ~ [b3,d4,g4] ~@4, ~@17 a1@18 ~@13 d4@2 a4@27 ~@3 a1@2 a2@12 d4@2 ~@15 a1@18 ~@14 a1@2 a2@6 d4@2 ~@4 d4@2 ~@15 a1@18 ~@13 a1@16 ~@3, ~@20 a2@16 ~@12 e4@28 ~@3 e4@29 ~@3 e4@28 ~@3 e4@28 ~@4 e4@27 ~@23, ~@49 g4@28 ~@3 g4@29 ~@2 [a3,d4]@2 a2@16 ~@14 g4@28 ~@3 g4@2 a2@16 ~@15 a2@15 ~@2, ~@49 a1@2 a2@12 d4@2 ~@14 d4@2 a4@28 ~@3 g4@27 ~@3 [a3,d4]@2 b4@27 ~@3 d4 a4@26 ~@23]/7", // Gsus2 G Gsus2 G D5
  E: "~@17 [f3,g3,c4]@3 ~ [f3,g3,c4] ~@3 [a3,c4,f4] ~ [a3,c4,f4] ~@4, ~@13 g1@18 ~, ~@14 g2@17 ~", // Fsus2 F
  F: "~@16 [g3,a3,d4]@2 ~@2 [g3,a3] ~@3 [b3,d4,g4] ~ [b3,d4,g4]@2 ~@4, ~@6 a1@9 ~, ~@7 a2@8 ~, ~@10 d4 ~@5", // Gsus2 G
  G: "~@15 [g3,a3,d4]@2 ~@2 [g3,a3] ~@3 [b3,d4,g4] ~ d4 [b3,g4] ~@5, ~@11 a1@21, ~@12 a2@19 ~, ~@19 d4@2 ~@11", // Gsus2 G Em
  H: "~@15 g3@2 ~ [g3,a3,d4] ~@4 [a3,b3,d4,g4] ~ [a3,d4,g4] ~@6, ~@5 a1@8 ~@3, ~@6 a2@7 ~@3, ~@7 [a3,d4] ~@8", // Gsus2 G Dsus4 D5
  I: "~@14 [f3,g3,c4]@2 ~@2 [f3,g3,c4] ~@3 [a3,c4,f4] ~ [a3,c4,f4] ~@7, ~@5 g1@9 ~@2, ~@3 g2@4 ~", // Fsus2 F
  J: "~@13 [g3,a3,d4]@2 ~@2 [g3,a3,d4] ~@3 [b3,d4,g4] a3 [b3,d4] ~@8, ~@9 a1@19 ~@4, ~@11 a2@17 ~@4, ~@23 g4@2 ~@7", // Gsus2 G Bm
  K: "~@11 a3 ~ [g3,g4]@2 ~@2 [d4,d5]@4 a2@2 [g3,a3,d4,g4,a4,d5] ~@8, ~ a1@2 ~, ~@11 a2@9 ~@12, ~@12 [a3,d4,a4,d5]@3 ~ [g3,a3,g4,a4]@5 a3 ~@10", // G D Gsus2 D5 Gsus2
  L: "[~@8 a2@2 a3@2 [g3,a3,d4,g4,a4,d5]@23 ~@221, ~ a1@31, ~@10 a2@25 ~@221]/8", // Gsus2
})).s("gm_piano").gain(0.36)

// chords · string ensemble 2 · "Soft Strings"
const string_ensemble_2 = note("<~ A@6 ~@6 B@8 ~@20 C D E@2 F G@3 ~@32>".pickRestart({
  A: "[~@62 b4@19 ~@15, ~@31 b3@132 ~@29, ~@63 d4@100 ~@29, ~@31 g4@23 ~@10]/6",
  B: "[~@23 c4@29 ~@2 d4@31 [e4,a4]@58 ~@5 f4@30 ~ g4@30 ~ [e4,a4]@46, ~@22 f4@31 g4@32 ~@62 c4@30 ~ d4@30 ~@48]/8", // A5
  C: "~@3 [c4,f4]@29", D: "~@2 [d4,g4]@29 ~", E: "[~ e4@29 ~@2, ~ a4@59 ~@4]/2", F: "[c4,f4]@15 ~",
  G: "[[d4,g4]@29 ~@2 e4@55 ~@10, ~@15 a4@28 ~@5]/3", // G5
})).s("gm_string_ensemble_2").gain(0.26)

stack(brass_section, piano, string_ensemble_2)

More by The Alan Parsons Project