Strudelify
A Farewell to Kings cover art

A Farewell To Kings

A Farewell to Kings

Rush

KeyA majorTempo132 bpm
0:00/0:00
// A Farewell to Kings — Rush
// 132 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: track names are the Roland MT-32 patch names at their program numbers ("Acoustic Piano 3" on 2, "Acoustic Piano 3" on 2, "Electric Piano 1" on 3, "Pipe Organ 2" on 13, "Harpsichord 2" on 17, "Acoustic Piano 3" on 2, "Acoustic Piano 3" on 2), so with no bank select the whole file is read through the MT-32 patch table: ch 8 "Electric Piano 1" Elec Piano 1 -> epiano1; ch 11 "Pipe Organ 2" Pipe Org 2 -> church organ; ch 12 "Harpsichord 2" Harpsi 2 -> harpsichord
// note: duplicate parts dropped: ch 8 "Electric Piano 1" epiano1 (copy of ch 1 "Acoustic Piano 3" piano); ch 9 "Acoustic Piano 2" piano (copy of ch 2 "Acoustic Piano 1" piano); ch 10 "Electric Piano 1" piano (copy of ch 3 "Acoustic Piano 3" piano); ch 11 "Pipe Organ 2" church organ (copy of ch 4 "Electric Piano 3" epiano2); ch 12 "Harpsichord 2" harpsichord (copy of ch 5 "Electric Piano 2" epiano1); ch 13 "Acoustic Piano 3" piano (copy of ch 6 "Acoustic Piano 1" piano); ch 14 "Acoustic Piano 3" piano (copy of ch 7 "Acoustic Piano 1" piano)
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(132/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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.

// other · piano · "Acoustic Piano 1"
const piano = note(`<
  A ~ B C D ~ E F G ~ H I ~@8 J K L ~ M N O P Q R@3 ~ S T S T U V W X Y@2 Z X AA AB AC@2 AA AB AD@2 AE AF@3 AG AH@3 AI
  AJ@3 AK AL AM AN S T S T U V W X Y@2 Z X AA AB AC@2 AA AB AD@2 AE AF@3 AG AH@3 AI AJ@3 AK AL AM AN AO@4 AP@3 AQ AR AQ
  AS AT AU AV AW AX AY ~ AZ@2
>`.pickRestart({
  A: "~@2 e3 d4", B: "~@6 d4 b3", C: "g3 ~@2 c#4 f#3 a#3 b3 ~", D: "b3 ~ e3 ~ d4@2 d4 ~", E: "~@4 d4 b3 g3 ~",
  F: "~ c#4 f#3 a#3 b3 ~ b3 ~", G: "e3@2 d4@2 d4 ~@3", H: "~@5 b3 ~@2", I: "d4 ~ c#4 ~ c#4@3 ~", J: "~@4 f#4 ~ f#4 ~",
  K: "e4 a4 ~@2", L: "~@2 b3@5 ~", M: "~@2 f#4 ~ f#4 ~ e4@2", N: "a4 ~@3", O: "b3", P: "a3@3 b3@3 d4 ~",
  Q: "c#4@2 a3@3 b3@3", R: "[d4 ~ c#4@2 a3@3 b3@3 d4 ~ c#4@2 c#4@10]/3", S: "e3", T: "~ a3@5 f#3@2",
  U: "e4@2 ~ e4@2 ~ e4@2", V: "c4@2 ~ c4@2 ~ f4@2", W: "d4!3 ~", X: "b3@3 ~",
  Y: "[e4@2 ~ e4@2 e4@2 c4@2 c4@2 ~@2 f4@2 ~]/2", Z: "d4 ~ d4 ~", AA: "c#4 ~@2 d4@3 ~@2", AB: "c#4 ~@2 d4@3 g4 ~",
  AC: "[g4 e4@15]/2", AD: "[g4 a4@15]/2", AE: "d4 ~ d4 ~ d4 ~ d4 ~", AF: "[d4 ~ d4 ~ d4@3 c#4@17]/3",
  AG: "b4 ~@2 g4@2 ~@3", AH: "[b4@2 ~@2 g4@3 e4@17]/3", AI: "g4 ~ g4 ~ g4 ~ g4 ~",
  AJ: "[g4@2 ~@2 g4@2 ~@3 g4@5 e4@34]/3", AK: "b4 ~@2 b4@4 ~", AL: "a4@2 ~ d4@2 d4@3", AM: "c#4 ~@2 f#4 ~@4", AN: "d4",
  AO: "[b4 ~ b4 ~ b4 ~ b4 b4@3 b4 ~ g4@3 e4@17]/4", AP: "[b4@2 b4@2 b4@2 b4 g4@2 ~@2 g4@2 ~@2 e4@4 f#4 f#4@3 d4]/3",
  AQ: "d4 ~@3", AR: "d4@2 ~ d4 d4@2 ~ d4", AS: "e4@2 ~ e4 e4@2 ~ e4", AT: "e4 ~@2 d4", AU: "~ d4 d4@2 ~ d4 d4@2",
  AV: "~@4 e4@2 ~ e4", AW: "e4@2 ~ e4 e4@2 ~@2", AX: "~@2 d4@2 ~ d4 d4@2", AY: "~ d4 d4@4 ~@2", AZ: "[~@2 d4@3 ~@3]/2",
})).s("gm_piano").gain(0.36)

// other · piano · "Acoustic Piano 3"
const piano_2 = note(`<
  ~@3 A B ~@2 C D ~@2 E F ~@7 G H ~@2 I J ~ K L M N ~@6 O P Q R S@2 T R U V W@2 U V X@2 Y Z AA AB AC AD@3 AE AF@3 AG AH
  AI AJ ~@4 O P Q R S@2 T R U V W@2 U V X@2 Y Z AA AB AC AD@3 AE AF@3 AG AH AI AJ AK@4 AL@3 AM AN AM AO AP AQ AR AS AT
  AU ~ AV@2
>`.pickRestart({
  A: "~@6 f#3 ~", B: "f#3 ~@3 a3@2 a3 ~", C: "~@4 f#3 ~ f#3 ~", D: "~@2 a3@2 a3 ~@3", E: "~@4 a3@3 a3",
  F: "c#4 e4 a4@2 ~@4", G: "~@4 d4 ~ d4 ~", H: "c#4 f#4 ~@2", I: "~@2 d4 ~ d4 ~ c#4@2", J: "f#4 ~@3", K: "~@6 a3 ~",
  L: "a3 ~@3", M: "a3 ~ a3@2 ~@4", N: "~@2 a3 ~ a3@2 ~@2", O: "c#4@2 ~ c#4@2 ~ c#4@2", P: "a3@2 ~ a3@2 ~ c4@2",
  Q: "b3!3 ~", R: "g#3@3 ~", S: "[c#4@2 ~ c#4@2 c#4@2 a3@2 a3@2 ~@2 c4@2 ~]/2", T: "b3 ~ b3 ~", U: "a3 ~@2 b3@3 ~@2",
  V: "a3 ~@2 b3@4 d4", W: "[d4 c#4@15]/2", X: "[d4 e4@15]/2", Y: "b3 ~ b3 ~ b3 ~ b3 ~", Z: "b3 ~ b3 ~ a3@3 ~",
  AA: "~ e3 a3@6", AB: "~ e3 a3@2 ~ e3 a3@2", AC: "g4 ~@2 d4@2 ~@3", AD: "[g4@2 ~@2 d4@3 c#4@17]/3",
  AE: "d4 ~ d4 ~ d4 ~ d4 ~", AF: "[d4 ~ d4 ~ d4@3 c#4@17]/3", AG: "g4 ~@2 g4@4 ~", AH: "d4@2 ~ a3@2 a3@3",
  AI: "~@3 d#4 ~@4", AJ: "b3", AK: "[g4 ~ g4 ~ g4 ~ g4 g4@3 g4 ~ d4@3 c#4@17]/4",
  AL: "[g4@2 g4@2 g4@2 g4 d4@2 ~@2 d4@2 ~@2 c#4@4 d#4 d#4@3 b3]/3", AM: "b3 ~@3", AN: "a3@2 ~ a3 a3@2 ~ b3",
  AO: "d4@4 ~@2 c#4@2 c#4@5 ~ b3@2", AP: "b3 ~@2 a3", AQ: "~ a3 a3@2 ~ b3 b3@2", AR: "~@4 d4@2 ~ c#4",
  AS: "c#4@2 ~ b3 b3@2 ~@2", AT: "~@2 a3@2 ~ a3 a3@2", AU: "~ b3 b3@4 ~@2", AV: "[~@7 b3@13 ~@12]/2",
})).s("gm_piano").gain(0.36)

// other · epiano2 · "Electric Piano 3"
const epiano2 = note(`<
  ~@11 A ~@8 B C D ~ E F ~@21 G@2 ~@2 H@2 ~@4 I J ~ K ~@3 K L ~ M N ~@14 G@2 ~@2 H@2 ~@4 I J ~ K ~@3 K L ~ M N O@2 P K ~
  Q@2 R S T U R V W X ~ Y ~ Z@2
>`.pickRestart({
  A: "a3 ~ a3 ~@5", B: "~@4 b3 ~ b3 d3", C: "a3@2 a3@2 a3 c#3 e3 d3", D: "b2 e2 ~@6", E: "~@2 b3 ~ b3 d3 a3@2",
  F: "a3@2 a3 c#3 e3 d3 b2 e2", G: "[b3 a3@15]/2", H: "[b3 c#4@15]/2", I: "d4 ~@7", J: "d4 ~@3",
  K: "~ e3 a3@2 ~ e3 a3@2", L: "d4 ~@2 d4@4 ~", M: "~@3 b3 ~@4", N: "g3", O: "[d4 ~ d4 ~ d4 ~ d4 d4@3 d4 ~@5]/2",
  P: "~ e3 a3@6", Q: "[~@7 a3@4 b3 b3@3 g3]/2", R: "g3 ~@3", S: "~@7 g3", T: "g3@2 c#3 d3 e3 f#3 b2@2",
  U: "a3@2 ~ g3 g3@2 ~ g3", V: "~@5 g3 g3@2", W: "c#3 d3 e3 f#3 a3@2 ~ g3", X: "g3@2 ~ g3 g3@2 ~@2", Y: "~ g3 g3@4 ~@2",
  Z: "[~@3 b2@7 ~@6]/2",
})).s("gm_epiano2").gain(0.36)

// other · epiano1 · "Electric Piano 2"
const epiano1 = note("<~@12 A B C D E B C D F G H I J K L M N O P@2 ~@91 Q@2>".pickRestart({
  A: "~@4 g3 e3 g3 b3", B: "b3 g3 e3 g3 f#3 d3 f#3 b3", C: "b3 f#3 d3 f#3 g3 e3 g3 c4", D: "c4 g3 e3 g3 g2 d3 b3 g3",
  E: "a3 d3 a3 f#3 g3 e3 g3 b3", F: "a3 d3 a3 f#3!2 ~ f#3 ~", G: "e3@2 d5@2 f#3 c#5 e5 d5", H: "b4 a4 ~ b2!2 e3 b2 e2",
  I: "e3 ~@2 d3 g3@2 ~ c#3", J: "f#3@2 f#3 ~ f#3 ~ e3@2", K: "d5@2 f#3 c#5 e5 d5 b4 a4", L: "~ b2!2 e3 b2 e2 e3@2",
  M: "d3 a2 d3 e3 b2 e3 f#3 ~", N: "f#3@2 d3 a2 d3 e3 b2 e3", O: "f#3 ~ f#3@2 d3 a2 d3 e3",
  P: "[b2 e3 f#3 ~ f#3@2 a3@10]/2", Q: "[~@5 f#2@15 ~@12]/2",
})).s("gm_epiano1").gain(0.36)

// other · piano · "Acoustic Piano 1"
const piano_3 = note(`<
  A@4 B C@2 D E F@2 G@5 H@4 I J K@3 L M N O P@3 ~ Q R Q R S T U V S W X V Y Z AA AB Y Z AA AB AC AD@3 AE AF@3 AG AH@3 AI
  AJ AK AI Q R Q R S T U V S W X V Y Z AA AB Y Z AA AB AC AD@3 AE AF@3 AG AH@3 AI AJ AK AI AC AL@3 AE AM@2 AN AO AP AQ
  AR AS AT AU AV AW ~ AX@2
>`.pickRestart({
  A: "[b2@3 c#3 a2@2 d3@3 c#3 e3 d3 b2 e2 g#2@7 e2 g2@4 f#2@4 b2 ~]/4", B: "b2 c#3 a2 ~ d3@2 d3 c#3",
  C: "[e3 d3 b2 e2 g#2@7 e2 g2@4]/2", D: "f#2@4 b2 ~ b2 c#3", E: "a2@2 d3@2 d3 c#3 e3 d3",
  F: "[b2 e2 g#2@7 e2 f#2@3 g2@3]/2", G: "[a2 ~ a2 ~ e3@8 b2@8 b2@8 c3@8 ~@4]/5", H: "[f#3 ~@3 b2@8 b2@8 c3@8 ~@4]/4",
  I: "f#3 ~@3 b2 ~ b2 ~", J: "a2@2 ~@2 d3 ~@3", K: "[~@2 g#2@8 g2@4 f#2@4 b2 ~ b2 ~ a2@2]/3", L: "~@2 d3 ~@5", M: "g#2",
  N: "f#2@3 g2@3 a2 ~", O: "a2@2 f#2@3 g2@3", P: "[a2 ~ a2@2 f#2@3 g2@3 a2 ~ a2@2 e3@10]/3", Q: "a2@3 g2@2 f#2 e2@2",
  R: "d3@3 c#3@2 e3 b2@2", S: "a2@3 a2@3 a2@2", T: "f2@3 e2@3 d2@2", U: "g2@3 g2@3 g2@2", V: "e2 e1!2 e2 e2@2 e2@2",
  W: "f2@3 f2@3 d2@2", X: "g2@3 g2 g2@4", Y: "f#2 ~@2 g2@2 d2 g2 d2", Z: "f#2 ~@2 g2@2 d2 g2@2",
  AA: "g2 a2@2 a2!3 ~ a2", AB: "e3@3 e2 a2 a2@2 a2", AC: "g2 ~ g2 ~ g2 f#2 g2 d2",
  AD: "[g2 ~ g2 ~ f#2 g2 f#2 a1@4 a2 a2@3 a1@4 a2 a2@4]/3", AE: "g2 ~ g2 ~ g2 f#2 e2 d2",
  AF: "[g2 f#2 g2 f#2 g2 f#2 g2 a1@4 a2 a2@3 a1@4 a2 a2@4]/3", AG: "g2 f#2 e2 d2 ~ c#2 d2 e2",
  AH: "[~ d2 c#2 b1 ~ c#2 b1 a1@4 a2 a2@3 a1@4 a2@5]/3", AI: "g2", AJ: "f#2@3 e2@2 d2 c#2 b1", AK: "a1 ~@2 b1 ~@4",
  AL: "[g2 ~ g2 ~ g2 f#2 g2 a1@4 a2 a2@3 a1@4 a2 a2@4]/3", AM: "[g2@2 g2@2 g2 f#2 e2 a1@4 b1 b1@3 g2]/2",
  AN: "g2@2 e2 f#2 g2 f#2 e2@2", AO: "d2@2 ~ f#1 f#1@2 ~ g1", AP: "g1@2 c#2 d2 e2 f#2 b1@2", AQ: "a1@2 ~ a2 a2@2 ~ g2",
  AR: "g2@2 e2 f#2 g2 f#2 d2@2", AS: "~ f#1 f#1@2 ~ g1 g1@2", AT: "c#2 d2 e2 f#2 a1@2 ~ a2",
  AU: "a2@2 ~ g2 g2@2 e2 f#2", AV: "g2 f#2 d2@2 ~ f#1 f#1@2", AW: "~ g1 g1@4 ~@2", AX: "[~ b1@4 ~@3]/2",
})).s("gm_piano").gain(0.36)

// other · piano · "Acoustic Piano 1"
const piano_4 = note("<~@20 [~@4 b4 ~ b4 c#5] [a4@2 d5@2 ~ c#5 e5 d5] [b4 a4 e4@2 ~ e4 ~@2] ~@102>")
  .s("gm_piano").gain(0.36)

stack(piano, piano_2, epiano2, epiano1, piano_3, piano_4)

More by Rush