Strudelify

eve of the war

Jeff Wayne

KeyG majorTempo135 bpm
0:00/0:00
// eve of the war — Jeff Wayne
// 135 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 6/4 at bar 10, 4/4 at bar 12, 6/4 at bar 31, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5363927; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(135/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.

// other · trumpet · "B♭ Trumpet 1"
const trumpet = note(`<
  A B@2 C@8 D@2 E@2 D@2 E@2 ~@8 F@2 G@8 H@3 ~@3 I@6 J@3 K@3 L@3 K@3 M@2 N@2 O P@2 Q R@2 S@2 T@8 ~@4 U@8 V@2 W X@2 ~@2
  Y@2 Z AA ~@2 O P@2 Q AB AC AD AE AF@2 AG@7 AH@2
>`.pickRestart({
  A: "~@9 a4@4 a4@3", B: "g4/2", C: "[g4@4 g4@4 f4@32 a4@3 a4@4 g4@32 g4@4 e4@3 d4@42]/8", D: "[a4@3 a4@3 g4@26]/2",
  E: "[g4@3 g4@3 f4@26]/2", F: "[a5@3 a5@3 g5@26]/2",
  G: "[g5@3 e5@3 d5@34 d5 e5 f5 d5 e5 f5 e5@26 c#5 d5 e5 c#5 d5 e5 d5@26 d5 e5 f5 d5 e5 f5 e5@18]/8",
  H: "[~@8 c#5 d5 e5 c#5 d5 e5 d5@26 ~@8]/3",
  I: "[~@8 d5 e5 f5 d5 e5 f5 e5@26 c#5 d5 e5 c#5 d5 e5 d5@26 d5 e5 f5 d5 e5 f5 e5@18]/6", J: "[~@8 e5@3 c5@3 a4@34]/3",
  K: "[c4 g4 d5@6]/3", L: "[d4 a4 f5@6]/3", M: "[d4@3 a4@3 f5@10]/2", N: "[d4 ~ e4 ~ f4 ~ g4 ~ a4 ~ c5@4 d5@10 ~@8]/2",
  O: "~@14 d5 e5", P: "[d5 c5 a#4 a#4@2 d5 f4@9 ~]/2", Q: "~@10 d5 c5 d5 c5 d5 c5",
  R: "[d5@3 e5@3 c5 ~ d5 e5 g5@8 f5@4 e5 d5 d5@6 d5 e5]/2", S: "[f5@3 e5@3 d5 ~ d5@10 ~@4 f5@2 e5@8]/2",
  T: "[f5@2 g5@2 d5 e5 f5 d5 e5 f5 e5@26 c#5 d5 e5 c#5 d5 e5 d5@26 d5 e5 f5 d5 e5 f5 e5@26 c#5 d5 e5 c#5 d5 e5 d5@22]/8",
  U: "[~@4 d5 e5 f5 d5 e5 f5 e5@26 c#5 d5 e5 c#5 d5 e5 d5@26 d5 e5 f5 d5 e5 f5 e5@26 e5@3 c5@3 a4@10 a4@12]/8",
  V: "[~@10 d5 c5 d5@3 e5@3 c5 ~ d5@3 e5@3 c5 ~ d5@3 e5]/2", W: "c5 ~ d5@8 d5 e5 f5@2 e5@2",
  X: "[d5 a#4@2 d5 a4@9 ~@3]/2", Y: "[~@10 d5 e5 f5@3 e5@3 d5 ~ d5@8 ~@4]/2", Z: "~ f5 e5@4 f5@2", AA: "d5",
  AB: "d5@3 e5@3 c5 ~ d5@2 e5@2 g5@4", AC: "f5@3 e5@3 d5@2 d5@6 d5 e5", AD: "f5@3 e5@3 d5 ~ d5@8", AE: "~@3 f5 e5@4",
  AF: "[f5 d5@4 ~@3]/2",
  AG: "[~@4 e5@3 e5@3 d5@26 f5@3 f5@3 e5@26 e5@3 c5@3 a4@8 c5 ~@2 d5@7 c5 ~@2 d5@9 c5 ~@2 d5@2 ~ c5@2]/7",
  AH: "[~ d5@2 ~ c5@2 ~@2 d5@24]/2",
})).s("gm_trumpet").gain(0.45)

// other · trumpet · "B♭ Trumpet 2"
const trumpet_2 = note(`<
  A B@2 C@8 D@2 E@2 D@2 F@2 G@2 H@2 D@2 E@2 D@2 I@8 J@3 ~@3 K@6 L@3 ~@11 M N O P@2 ~@2 Q R S@7 T@3 ~@3 U@8 ~@3 V@6 W X
  ~@2 Q P@2 M Y Z AA AB AC@7 AD@2 AE@2
>`.pickRestart({
  A: "~@9 f4@4 f4@3", B: "e4/2", C: "[e4@4 e4@4 d4@32 f4@3 f4@4 e4@32 e4@4 c4@3 a3@42]/8", D: "[f4@3 f4@3 e4@26]/2",
  E: "[e4@3 e4@3 d4@26]/2", F: "[e4@3 e4@3 d4@22 f4@4]/2", G: "[f4@3 e4@11 ~@2]/2", H: "[f4@5 f4@9 ~@2]/2",
  I: "[e4@3 c4@3 a3@34 f5 g5 a5 f5 g5 a5 g5@26 e5 f5 g5 e5 f5 g5 f5@26 f5 g5 a5 f5 g5 a5 g5@18]/8",
  J: "[~@8 e5 f5 g5 e5 f5 g5 f5@26 ~@8]/3",
  K: "[~@8 f5 g5 a5 f5 g5 a5 g5@26 e5 f5 g5 e5 f5 g5 f5@26 f5 g5 a5 f5 g5 a5 g5@18]/6", L: "[~@8 g5@3 e5@3 d5@34]/3",
  M: "~@10 d5 c5 d5 c5 d5 c5", N: "d5@3 e5@3 c5 ~ d5@3 e5@3 c5 ~", O: "d5@3 e5 c5 ~ d5@8 d5 e5",
  P: "[f5 e5 d5 a#4@2 d5 a4@9 ~]/2", Q: "~@14 d5 e5", R: "d5@3 c5@3 a#4 ~ a#4@8",
  S: "[~@6 d5@2 c5@12 f5 g5 a5 f5 g5 a5 g5@26 e5 f5 g5 e5 f5 g5 f5@26 f5 g5 a5 f5 g5 a5 g5@22]/7",
  T: "[~@4 e5 f5 g5 e5 f5 g5 f5@26 ~@12]/3",
  U: "[~@4 f5 g5 a5 f5 g5 a5 g5@26 e5 f5 g5 e5 f5 g5 f5@26 f5 g5 a5 f5 g5 a5 g5@26 g5@3 e5@3 d5@10 d5@12]/8",
  V: "[~@12 f5@14 e5 f5 d5@16 d5@3 e5@3 c5 ~ d5@2 e5@2 g5@4 f5@3 e5@3 d5@2 d5@6 d5 e5 f5@3 e5@3 d5 ~ d5@8 ~@4]/6",
  W: "~ f5 e5@4 f5@2", X: "d5", Y: "d5@3 e5@3 c5 ~ d5@2 e5@2 g5@4", Z: "f5@3 e5@3 d5@2 d5@6 d5 e5",
  AA: "f5@3 e5@3 d5 ~ d5@8", AB: "~@3 f5 e5@4",
  AC: "[f5@4 a5@3 a5@3 g5@26 g5@3 g5@3 f5@26 a5@3 a5@3 g5@26 g5@3 e5@3 d5@6]/7",
  AD: "[~@2 e5 ~@2 f5@7 e5 ~@2 f5@9 e5 ~@2 f5@2 ~ e5@2]/2", AE: "[~ f5@2 ~ e5@2 ~@2 f5@24]/2",
})).s("gm_trumpet").gain(0.45)

// other · french horn · "Horn in F"
const french_horn = note(`<
  A B@2 C@8 ~@7 D E@2 F@2 G@2 H@2 G@2 I@3 J K L M N O P Q R S@3 J T L M U V@2 W X@3 Y@3 X@3 Y@3 ~@6 Z AA@3 AB@2 AC@2
  AD@2 AE@2 AF AG AH@2 AB@2 AC@2 AI@3 AJ ~ AK AL@2 AM@4 AN AO ~@7 AP AQ AR AS@7 AT@2 AU@2
>`.pickRestart({
  A: "~@9 f4@4 f4@3", B: "e4/2", C: "[e4@4 e4@4 d4@32 f4@3 f4@4 e4@32 e4@4 c4@3 a3@42]/8", D: "~@12 a4 a#4 [b4,c5] c#5",
  E: "[d5@3 a#4@3 c5@22 g4@2 a4@2]/2", F: "[a#4@4 c5@6 a4@18 f4 ~ g4 ~]/2", G: "[a4@3 a4@3 g4@26]/2",
  H: "[g4@3 g4@3 f4@26]/2", I: "[e4@3 c4@3 a3@34 ~@8]/3", J: "~@8 c#4 d4 e4@4 c#4 d4", K: "e4@5 ~@3",
  L: "~@8 f4 g4 a4@4 f4 g4", M: "a4@9 ~@7", N: "~@8 g3 a3 a#3@4 g3 a3", O: "a#3@9 ~@7", P: "~@8 d4 e4 f4@4 d4 e4",
  Q: "f4@5 ~@3", R: "~@2 a#4 a4 a#4@2 a4 g4 a4@2 g4 f4 g4@2 f4 e4",
  S: "[f4@2 e4 d4 e4@2 d4 c4 d4@4 e4@2 f4@6 g4@2 a4@6 c5@2 d5@10 ~@8]/3", T: "e4@9 ~@7", U: "~@8 g4 a4 a#4@4 g4 a4",
  V: "[a#4@8 ~@6 d5@8 c5 ~ d5@6 c5 ~]/2", W: "d5 ~ c5 ~ d5 ~ c5 ~ d5@4 ~@4", X: "[c3 g3 d4@6]/3", Y: "[d3 a3 f4@6]/3",
  Z: "~@14 d4 e4", AA: "[f4@3 e4@3 d4 ~ d4@10 ~@4 f4@2 e4@12 ~@12]/3", AB: "[~@4 c#4 d4 e4@4 c#4 d4 e4@9 ~@11]/2",
  AC: "[~@4 f4 g4 a4@4 f4 g4 a4@9 ~@11]/2", AD: "[~@4 g3 a3 a#3@4 g3 a3 a#3@9 ~@11]/2",
  AE: "[~@4 d4 e4 f4@4 d4 e4 f4@9 ~@9 a#4 a4]/2", AF: "a#4@2 a4 g4 a4@2 g4 f4 g4@2 f4 e4 f4@2 e4 d4",
  AG: "e4@2 d4 c4 d4@4 e4@2 f4@6", AH: "[g4 a4@3 c5 d5@5 ~@6]/2",
  AI: "[~@4 g3 a3 a#3@4 g3 a3 a#3@8 ~@6 d5@8 c5 ~ d5@6 c5 ~ d5 ~ c5 ~]/3", AJ: "d5 ~ c5 ~ d5@4 ~@8",
  AK: "~@10 d4 e4 f4@2 e4@2", AL: "[d4 a#3@2 d4 a3@9 ~@3]/2",
  AM: "[~@12 d4@3 e4@3 c4 ~ d4@2 e4@2 g4@4 f4@3 e4@3 d4@2 d4@6 d4 e4 f4@3 e4@3 d4 ~ d4@8 ~@4]/4", AN: "~ f4 e4@4 f4@2",
  AO: "d4 a4", AP: "~@14 a#3 c4", AQ: "d4@3 c4@3 a#3 ~ a#3@8", AR: "~@3 f4 e4@4",
  AS: "[f4@4 f4@3 f4@3 e4@26 e4@3 e4@3 d4@8 [d4,d#4] [e4,f4,f#4,g4] a4@6 [a4,a#4] [b4,c5] d5@8 f4@3 f4@3 e4@26 e5@3 c5@3 a4@6, ~@52 g#4 ~@7 c#5 ~@51]/7", // D#maj7 A#maj7 Cmaj7
  AT: "[~@2 g4 ~@2 a4@7 g4 ~@2 a4@9 g4 ~@2 a4@2 ~ g4@2]/2", AU: "[~ a4@2 ~ g4@2 ~@2 a4@24]/2",
})).s("gm_french_horn").gain(0.4)

// bass · tuba
const bass = note(`<
  A B@2 C@8 D@8 E@2 F@2 D@6 G H I@2 J@6 K@2 L@2 M@2 J@4 N@2 O P Q R S T U P Q R S T U V W X Y Z AA W AB AC AD@2 AE@2
  AF@2 AG@2 AH@2 AI@2 AF@4 AE@2 AJ@2 AK AL AM AN AO AP AQ AR@3 AS AT V W X Y Z AA W AU AV AW@7 AX@2 AY@2
>`.pickRestart({
  A: "~@9 d2@2 ~ d2@2 d2@2", B: "d2/2", C: "[d2@2 ~ d2@2 d2@2 ~ d2@32 d2@2 d2@2 ~ d2@2 d2@32 d2@2 d2@2 ~ d2@2 d2@42]/8",
  D: "[d3@3 d3@3 d3@26]/2", E: "[d2@4 a2 ~ d2@22 a1@4]/2", F: "[d2@4 f2 ~ d2@22 ~@4]/2", G: "d2@3 d2@3 d2@8 c2 ~",
  H: "d2@6 c2 ~ d2 ~ c2 ~ d2 ~ c2 ~", I: "[d2@4 f2 ~ e2 ~ d2@3 d2@3 d2@18]/2",
  J: "[~@2 a1 ~ a#1 ~ c2 ~ d2@3 d2@3 d2@18]/2", K: "[~@4 a1@4 d2@4 a2 ~ d2@18]/2",
  L: "[~@2 a1@2 f2@2 e2@2 d2@2 ~@2 f2 ~ d2@18]/2", M: "[~@2 a1 ~ a#1 ~ c2 ~ d2@3 d2@2 ~ d2@18]/2",
  N: "[~@2 a1 ~ a#1 ~ c2 ~ d2@3 d2@3 d2@8 c2 ~ d2@6 c2 ~]/2", O: "d2 ~ c2 ~ d2 ~ c2 ~ d2@8", P: "c3@7 d#3",
  Q: "e3@3 c3@3 g2 ~", R: "g3@3 e3@3 c3@2", S: "d3@7 e3", T: "f3@3 d3@3 a2 ~", U: "a3@3 f3@3 d3@2",
  V: "c3@3 c3 g2@2 c3@4 b2@2 c3@2 c#3@2", W: "d3@3 d3 a2@2 d3@4 f3@2 d3@2 c3@2",
  X: "a#2@3 a#2 f2@2 a#2@4 a#2@2 c3@2 c#3@2", Y: "d3@3 d3 a2@2 d3@4 a2@2 c3@2 c#3@2",
  Z: "d3@3 d3 f3@2 d3@4 f3@2 d3@2 c#3@2", AA: "c3@3 c3 g3@2 c3@4 b2@2 c3@2 c#3@2", AB: "a#2@3 f3 a#3 f3 a#2 b2",
  AC: "c3", AD: "[~@4 d2@3 d2@3 d2@18 ~@2 a1 ~]/2", AE: "[a#1 ~ c2 ~ d2@3 d2@2 ~ d2@18 ~@2 a1 ~]/2",
  AF: "[a#1 ~ c2 ~ d2@3 d2@3 d2@18 ~@2 a1 ~]/2", AG: "[a#1 ~ c2 ~ d2@3 d2@3 d2@18 ~@4]/2",
  AH: "[a1@4 d2@4 a2 ~ d2@18 ~@2 a1@2]/2", AI: "[f2@2 e2@2 d2@2 ~@2 f2 ~ d2@18 ~@2 a1 ~]/2",
  AJ: "[a#1 ~ c2 ~ d2@3 d2@3 d2@8 c2 ~ d2@6 c2 ~ d2 ~ c2 ~]/2", AK: "d2 ~ c2 ~ d2@8 c3@3 c3",
  AL: "g2@2 c3@4 b2@2 c3@2 c#3@2 d3@3 d3", AM: "a2@2 d3@4 f3@2 d3@2 c3@2 a#2@3 a#2",
  AN: "f2@2 a#2@4 a#2@2 c3@2 c#3@2 d3@3 d3", AO: "a2@2 d3@4 a2@2 c3@2 c#3@2 d3@3 d3",
  AP: "f3@2 d3@4 f3@2 d3@2 c#3@2 c3@3 c3", AQ: "g3@2 c3@4 b2@2 c3@2 c#3@2 d3@3 d3",
  AR: "[a2 d3@2 f3 d3 c3 a#2@3 f2 a#2 f2 a#1 b1 c2@8 ~@2]/3", AS: "d3!8", AT: "d3 c3 d3 c3 d3 c3 d3 c#3",
  AU: "a#2@3 f2 a#2 f2 a#1 b1", AV: "c2", AW: "[~@4 d2@3 d2@3 d2@26 d2@3 d2@3 d2@26 d2@3 d2@3 d2@26 a1@3 a1@3 d2@6]/7",
  AX: "[~@2 c2 ~@2 d2@7 c2 ~@2 d2@9 c2 ~@2 d2@2 ~ c2@2]/2", AY: "[~ d2@2 ~ c2@2 ~@2 d2@24]/2",
})).s("gm_tuba").gain(0.4)

stack(trumpet, trumpet_2, french_horn, bass)

More by Jeff Wayne