Strudelify

Star Wars Jedi Fallen Order Menu Theme

Gordy Haab and Stephen Barton

KeyG majorTempo40 bpm
0:00/0:00
// Star Wars Jedi Fallen Order Menu Theme — Gordy Haab and Stephen Barton
// 40 bpm, 3/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, 3/4 at bar 8) are rendered on a constant 3/4 grid of one bar per cycle
// note: ch 1 "Flutes" named as a pipe, played on flute (its pizzicato strings patch is not one); ch 2 "Oboes" named as a reed, played on oboe (its tremolo strings patch is not one); ch 5 "Horns in F" named as a brass, played on brass section (its tremolo strings patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5936610; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 26 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(40/3)

// 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 · flute · "Flutes"
const flute = note("<~@3 A B@2 ~@20>".pickRestart({
  A: "~@38 g#6@3 ~ g6@3 e6 [c6,d#6] b5", B: "[c6 [c#6,e6] g#6 b6@10 c7 b6@20 ~ g6@2 d#6@2 c6@2 ~ b5@49 ~@5]/2",
})).s("gm_flute").gain(0.3)

// other · oboe · "Oboes"
const oboe = note(`<
  ~@17
  [d5@8 a5@4 e5@4 d5@24 f5@3 e5@2 c5@3]
  [c5@2 d5 e5 d5@6 d5@2]
  [f5@2 g#5 g5 f5@2 f5@6]
  ~
  f4
  [f4@3 g4@2 g#4@35 ~@8]
  ~@3
>`).s("gm_oboe").gain(0.25)

// other · brass section · "Horns in F"
const brass_section = note("<~ A@3 ~@7 B C D@2 E F G H I J K L ~@3>".pickRestart({
  A: "[~@32 [b3,e4]@6 [g4,b4]@6 ~ [a4,c#5]@29 ~@3 [e4,g4]@3 [b3,f#4]@3 [e4,g4]@3 [b3,f#4]@3 ~ [b3,c4]@45 ~@9]/3", // E5 G A Em B5 Em B5 Cmaj7
  B: "a4@2 c5 b4 b4@2 e4@4 [e4,e5]@2", C: "[e4,e5] f4@5",
  D: "[d4@4 ~@2 d5 b4 [e4,b4]@4 [f4,c5]@8 ~@12 a4@16, ~ e4 ~@3 e4@7]/2", E: "~@3 a4@2 d4", F: "d4@2 c4 a3 d4@6 e4 g4",
  G: "a4", H: "c4@2 d4@3 ~", I: "~ c5@2 d#5@2 f4", J: "g4@2 g#4@3 g4", K: "f4", L: "f4@3 g4@2 g#4@27 ~@16",
})).s("gm_brass_section").gain(0.3)

// chords · string ensemble 1 · "Men"
const string_ensemble_1 = note("<A@6 ~ B C D E F G H I J K L M N O P Q ~@3>".pickRestart({
  A: "[~@29 e6@51 e6@205 ~@3]/6", B: "d4@2 f4 e4 d4@6 d4@2", C: "d4@2 c4 a3 d4@8",
  D: "d4@2 f4 e4 d4@6 d4@2, [d3,a3] [d3,a#3]@2", E: "d4 e4 a4 c5@2 d5", F: "a5@2 c6 b5 b5@2 e5@4 e6@2",
  G: "e6@4 d6@6 f6 e6", H: "d6@4 a6@4 a6@4 e6@4 d6@2 c6 b5 a5@4", I: "~ b5 e5@6 d5@4",
  J: "d6@2 f6 e6 d6@6 d6@2, [d3,a3] [d3,a#3]@2", K: "d6@2 c6 a5 f3@4 e3@2 [d3,a5]@2, [c3,a3] a#3@2, ~@2 d6@3 ~",
  L: "d6@8 a6@4 e6@4 [a#3,d6]@24 [c4,f6]@3 ~@2 c6@3, [d3,a3]@4 d3@7 a#3, ~@43 e6@3 ~@2", // A# F5 D5
  M: "c6@2 d6 e6 d6@6 d6@2, [e3,a3] [d3,a#3]@2", N: "f6@2 g#6 g6 f6@2 c7@4 f6@2, c4 c4@2",
  O: "a#6@3 g#6@2 g6@3 g6@8 g6@8 c6@16 d#6@8, [d#3,a#3]@2 [c3,f3,c4]@3 ~", P: "f6 d#6 c6", Q: "g#5@5 ~",
})).s("gm_string_ensemble_1").gain(0.25)

// other · pizzicato strings · "Violin II"
const pizzicato_strings = note("<A@6 ~ B C B D E F G H I J K L M N O P ~@3>".pickRestart({
  A: "[~@29 e6@102 ~@61 e1@3 ~@3 e1@3 ~@13 e1@6 ~@68, ~@131 e6@154 ~@3]/6", B: "d4@2 f4 e4 d4@6 d4@2",
  C: "d4@2 c4 a3 d4@8", D: "d4 e4 a4 c5@2 d5", E: "a5@2 c6 b5 b5@2 e5@2 ~@4", F: "e6@4 d6@6 f6 e6",
  G: "d6@4 a6@4 a6@4 e6@4 d6@2 c6 b5 a5@4", H: "~ b5 e5@6 d5@4", I: "d5@2 f5 e5 d5@6 d5@2", J: "d5@2 c5 a4 d5@6 a4@2",
  K: "d5@8 a5@4 e5@4 d5@24 f5@3 e5@2 c5@3", L: "c5@2 d5 e5 d5@6 d5@2", M: "f5@2 g#5 g5 f5@2 c6@4 f5@2",
  N: "a#5@3 g#5@2 g5@3 g5@8 g5@8 c5@16 d#5@8", O: "c#5 c5!2", P: "c#5@2 ~",
})).s("gm_pizzicato_strings").gain(0.3)

// other · string ensemble 1 · "Violoncello"
const string_ensemble_1_2 = note("<A@5 ~@2 B@2 C D E F G H I J K L M N ~@2 O P ~>".pickRestart({
  A: "[~@29 e4@128 g#3@25 e3@51 ~@7]/5", B: "[a3@2 g3]/2", C: "d3 a#2@2", D: "c4", E: "a3 g3@2", F: "f3", G: "~ a2@2",
  H: "g2", I: "d3 a#3@2", J: "a3@2 a#3 f3 e3 d3", K: "d3@4 a#3@6 c4 a#3", L: "a3 a#3@2", M: "f3 g#3@2",
  N: "d#3@2 f3@3 ~", O: "f3@2 c4@2 ~ f3", P: "f3!2 ~",
})).s("gm_string_ensemble_1").gain(0.15)

// other · string ensemble 1
const string_ensemble_1_3 = note("<A@2 ~ B ~@3 C D E ~ F G H I J K L M N O ~@2 P Q ~>".pickRestart({
  A: "[~@29 e1@58 ~@9]/2", B: "~@13 e1@26 ~@9", C: "d2 f2@2", D: "e2 g1@2", E: "d2 a#1@2", F: "a3 g3@2", G: "f3",
  H: "~ a2@2", I: "g2", J: "d2 a#2@2", K: "a2@2 a#2 f2 e2 d2", L: "d2@4 a#2@6 c3 a#2", M: "a2 a#2@2", N: "f2 g#2@2",
  O: "d#2@2 f2@3 ~", P: "[c#2,g#2]@2 ~", Q: "a#2@2 ~",
})).s("gm_string_ensemble_1").gain(0.15)

// other · orchestral harp · "Harp"
const orchestral_harp = note(`<
  ~@11
  [a3 e4 a4@2 g3@2 e4@2 ~@4]
  [f3 d4 f4@2 ~@8]
  ~@10
  [c#2 g#2 c3@2 ~@2]
  [d#2 a#2 g3@2 ~@2]
  ~
>`).s("gm_orchestral_harp").gain(0.3)

// other · timpani
const timpani = note(`<
  ~@8
  [~@16 g2 a2 g2 a2 g2 a2 g2 a2 g2 a2 g2 a2 g2 a2 g2 a2 g2 a2 g2 a2 g2 a2 g2 a2 g2 a2 g2 a2 g2 a2 g2 a2]
  ~@5
  [~@46 d3!2]
  [d3 ~@2]
  ~@10
>`).s("gm_timpani").gain(0.2)

stack(
  flute, oboe, brass_section, string_ensemble_1, pizzicato_strings, string_ensemble_1_2, string_ensemble_1_3,
  orchestral_harp, timpani
)