Strudelify

St. Paul's Suite Op.29 No.2

Gustav Holst

KeyD majorTempo225 bpm
0:00/0:00
// St. Paul's Suite Op.29 No.2 — Gustav Holst
// 225 bpm, 6/8, key D 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 (1/8 at bar 1, 6/8 at bar 1) are rendered on a constant 6/8 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/2110346; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 217 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(225/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 · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  A B C D E B F D G H ~@6 I J K L M J N L O P Q R S T U V W X Y Z W Z W AA AB AC AD AE AF AC AG AH AI AJ@2 AK@2 AL AM
  AK@2 ~@7 I J K L M J N L O ~ AN AO AP AQ AR AS AT B C D E B F D G ~@7 I J K L M J N L O AU@2 AV@2 AU@2 AV@2 ~@2 AW@2
  AX AY AZ BA ~@7 I J K L M J N L O J K L M J N L O BB BC@4 BD BE@4 BF BG@4 BH BI@2 BJ@3 BK@2 BL@2 BM@5 AQ BN@5 BO@2
  BP@2 BQ BR@4 BS BT BU@2 BV@2 ~@2 BW ~@3 BX ~@3 BY@2 BZ@2 ~@2 CA CB@2 CC CD
>`.pickRestart({
  A: "~@11 c4@5", B: "a3@5 f3@3 f3@5 f3@3", C: "a3@5 a#3@3 c4@3 a#3@2 a3@3", D: "a#3@5 g3@3 g3@5 g3@3",
  E: "a#3@5 c4@3 d4@3 c4@2 a#3@3", F: "f4@5 f4@3 e4@3 d4@2 c4@3", G: "g4@5 f4@3 e4@3 d4@2 c4@3", H: "f3@5 ~@11",
  I: "~@13 c5@3", J: "a4@5 f4@3 f4@5 f4@3", K: "a4@5 a#4@3 c5@3 a#4@2 a4@3", L: "a#4@5 g4@3 g4@5 g4@3",
  M: "a#4@5 c5@3 d5@3 c5@2 a#4@3", N: "f5@5 f5@3 e5@3 d5@2 c5@3", O: "g5@5 f5@3 e5@3 d5@2 c5@3", P: "a4 c5", Q: "a4 f4",
  R: "a#4 d5", S: "a#4 g4", T: "c5 e5", U: "c5 a4", V: "d5 f5", W: "d5 c5", X: "d#5 d5", Y: "c5 a#4", Z: "f5 e5",
  AA: "g4 f4", AB: "e4 c4", AC: "c4@5 a3@3 a3@5 a3@3", AD: "c4@5 d4@3 e4@3 d4@2 c4@3", AE: "d4@5 a#3@3 a#3@5 a#3@3",
  AF: "d4@5 e4@3 f4@3 e4@2 d4@3", AG: "a3@5 a3@3 a3@3 g3@2 a3@3", AH: "g3@5 g3@3 g3@5 g3@3",
  AI: "a#3@5 a#3@3 a3@3 g3@2 e3@3", AJ: "[d3@3 ~@5 f3@16 f3@8]/2", AK: "a#3/2", AL: "~ f3", AM: "f3!2", AN: "f4",
  AO: "f5", AP: "f5@5 e5@5 ~ d5@5", AQ: "c5@11 a4@5", AR: "f4@5 g4@5 ~ a4@5", AS: "a#4@11 g4@5", AT: "e4@5 f4@5 ~ g4@5",
  AU: "f4@5 c4@3 f4@5 c4@3", AV: "e4@5 c4@3 e4@5 c4@3", AW: "e5!2", AX: "c5 ~ d5 ~ c5 ~ a#4 ~",
  AY: "a4 ~ g5 ~ f5 ~ e5 ~", AZ: "d5 ~ c5 ~ a#4 ~ a4 ~", BA: "g4 ~@15", BB: "f5@3 ~@13",
  BC: "[~ f3@17 f4@17 f4@6 e4@6 d4@6 c4@11]/4", BD: "a3@6 f3@5 g3@5",
  BE: "[~ a3@6 a#3@11 g3@6 e3@6 f3@5 g3@6 a4@6 f4@3 f4@5 f4@3 a4@6]/4", BF: "a#4@3 c5@3 a#4@3 a4@2 a#4@5",
  BG: "[~ g4@3 g4@6 g4@3 a#4@5 c5@3 d5@3 c5@3 a#4@3 a4@5 f4@3 f4@6 f4@3 f5@6 f5@2 e5@3 d5@3 c5@3]/4",
  BH: "a#4@6 g4@3 g4@5 g4@2", BI: "[~ g5@6 f5@3 e5@3 d5@2 c5@3 a4@6 f4@3 f4@5]/2",
  BJ: "[~ f4@2 a4@6 a#4@3 c5@3 a#4@3 a4@3 a#4@5 g4@3 g4@6 g4@3 a#4@5 c5@3 d5@2]/3",
  BK: "[~ c5@3 a#4@3 a4@6 f4@2 f4@6 f4@3 f5@6 f5@2]/2", BL: "[~ e5@2 d5@3 c5@3 a#4@6 g4@3 g4@5 g4@3 g5@6]/2",
  BM: "[f5@3 e5@3 d5@3 c5@2 f4@34 ~ f5@17 f5@6 e5@5 d5@6]/5",
  BN: "[~ f4@6 g4@6 a4@5 a#4@11 ~ g4@5 e4@6 f4@6 g4@6 a3@5 f3@3 f3@6 f3@3 a3@5 a#3@3 c4@2]/5",
  BO: "[~ a#3@3 a3@3 a#3@6 g3@2 g3@6 g3@3 a#3@6 c4@2]/2", BP: "[~ d4@2 c4@3 a#3@3 a3@6 f3@3 f3@5 f3@3 f4@6]/2",
  BQ: "f4@3 e4@3 d4@3 c4@2 a#3@5", BR: "[~ g3@3 g3@6 g3@3 g4@5 f4@3 e4@3 d4@3 c4@3 d4@17 c4@3 ~@14]/4", BS: "a#3",
  BT: "~ a3@3 ~@12", BU: "[~@2 d4@17 c4@3 ~@10]/2", BV: "[~@5 f4@17 e4@3 ~@7]/2", BW: "~@9 a#3@3 ~@4", BX: "~@7 e4",
  BY: "[~ a4@6 a#4@3 c5@3 a#4@2 a4@3 ~@14]/2", BZ: "[~@12 a#4@6 c5@3 d5@2 c5@3 a#4@3 a4@3]/2",
  CA: "~@2 e3@3 f3@3 g3@3 a3@3 a#3@2",
  CB: "[~ c4@2 d4@3 e4@3 f4@3 g4@3 a4@3 a#4@3 c5@2 d5@3 e5 f5 [e5,f5] e5 f5 [e5,f5]]/2", // Fmaj7
  CC: "e5 [e5,f5] f5 e5 [e5,f5] f5 [e5,f5] e5 f5 [d5,e5] [e5,f5] f5@3 ~@2, ~@11 e5 ~@4", CD: "~@4 f5@3 ~@9",
})).s("gm_alto_sax").gain(0.37)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@9 A@8 B@8 C@2 D@2 E@2 F@2 G@2 H@4 I J K L M N K O M P Q@2 D@2 R S D@2 ~ T U V W X Y Z AA T ~@15 T I AB W X Y Z K L M
  N K O M P AC AD AE AF AC AD AE AF AG@2 AH@2 AG AI AJ AK ~@7 AL ~@8 AM AN AO AP AQ AR AS AT AU AV AW AX AU AY AW AZ BA
  ~ BB@8 BC@5 Y BD BE@2 BF@8 BG@3 I ~ BH BI BJ BK@8 BL@2 BM BN@2 BO@3 BP@3 ~ BQ@3 ~@2 BR@8 ~@3 BS
>`.pickRestart({
  A: "[~@5 c4 ~ b3 c4@29 c4 ~ b3 c4@29 c4 ~ b3 c4@29 c4 ~ b3 c4@24]/8", B: "[~ c4@3]/2", C: "f3/2", D: "g3/2",
  E: "a3/2", F: "a#3/2", G: "c4/2", H: "d4/2", I: "f4", J: "e4@13 c4@3", K: "a3@5 f3@3 f3@5 f3@3",
  L: "a3@5 a#3@3 c4@3 a#3@2 a3@3", M: "a#3@5 g3@3 g3@5 g3@3", N: "a#3@5 c4@3 d4@3 c4@2 a#3@3",
  O: "f4@5 f4@3 e4@3 d4@2 c4@3", P: "g4@5 f4@3 e4@3 d4@2 c4@3", Q: "[~ d3@2 d3]/2", R: "~ d3", S: "d3!2", T: "f3",
  U: "a#3@11 c4@5", V: "d4@5 e4@5 ~ d4@5", W: "c4@11 a3@5", X: "f3@5 g3@5 ~ a3@5", Y: "a#3@11 g3@5",
  Z: "e3@5 f3@5 ~ g3@5", AA: "a3", AB: "f4@5 e4@5 ~ d4@5", AC: "f4 e4", AD: "d4 c4", AE: "a#3 a3", AF: "g3 e3",
  AG: "f4@5 c4@3 f4@5 c4@3", AH: "e4@5 c4@3 e4@5 c4@3", AI: "a4@5 c4@3 a4@5 c4@3", AJ: "g4@5 c4@3 g4@5 c4@3",
  AK: "a#4@5 c4@3 a#4@5 c4@3", AL: "~@5 f3@3 e3@3 d3@2 c3@3", AM: "c3 c#3", AN: "d3 d#3", AO: "e3 f3", AP: "f#3 g3",
  AQ: "g#3 a3", AR: "a#3 b3", AS: "c4 c#4", AT: "d4 d#4", AU: "c#4", AV: "d4@3 ~@5 f3@3 ~@5", AW: "d#4",
  AX: "e4@3 ~@5 f3@3 ~@5", AY: "d4", AZ: "e4", BA: "d4@3 ~@13", BB: "[~@2 g3@34 ~ a3@34 d4@17 e4@17 f4@17 d4@3 ~@3]/8",
  BC: "[~@9 d4@2 f4@17 ~ f4@5 e4@6 d4@6 c4@11 a3@6 f3@6 g3@5 a3@6]/5", BD: "~ e3@6 f3@6 g3@3", BE: "[~ f4@15]/2",
  BF: "[~@5 f4@34 f4@34 f4@17 e4@17 a3@14 ~ f3@3 d3@3]/8", BG: "[~@14 d4@25 e4@9]/3", BH: "~ f4@7", BI: "~@3 g4@13",
  BJ: "~@5 f4@11", BK: "[~@6 e4@8 f4@9 g4@34 a4@17 c5@17 d5@17 ~ c5@17 a3@2]/8",
  BL: "[~@3 f3@3 f3@6 f3@3 a3@6 a#3@2 c4@3 a#3@3 a3@3]/2", BM: "a#3@6 g3@3 g3@5 g3@2",
  BN: "[~ a#3@6 c4@3 d4@3 c4@2 a#3@3 a3@6 f3@3 f3@5]/2",
  BO: "[~ f3@2 f4@6 f4@3 e4@3 d4@3 c4@3 a#3@5 g3@3 g3@6 g3@3 g4@5 f4@3 e4@2]/3",
  BP: "[~ d4@3 c4@3 f3@17 f3@17 f3@3 ~@4]/3", BQ: "[~@11 f3@17 ~ f3@17 e3@2]/3",
  BR: "[f4@34 g4@34 ~ f4@34 e4@17 ~@8]/8", BS: "~@4 a3@3 ~@9",
})).s("gm_tenor_sax").gain(0.39)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  ~@17 A ~ A ~ A ~ A ~ B C D E F G H I J G K I K L M N O@2 P@2 Q@2 R S T ~@3 T ~@3 U@2 V@2 W@2 V@2 U@2 V@2 W@2 V@2 U@2
  V@2 W@2 V@2 U@2 V@2 W@2 X Y Z@2 AA@2 Z@2 AB Y ~@3 AC AD AE AF AG AH@7 AI AJ AK AL AM AJ AN AL AO ~@4 AP AQ AR AS AT AU
  AV AW AP AQ AR AS ~ AX ~ AX AY AZ BA BB T ~ BC@2 BD@2 BE@2 BF@7 V@2 BG@2 BH@8 BI@3 W@2 BJ BK BL@2 BM@7 ~@17 BN ~ BO BP
  BQ BR BS@2 BT BU BV BW
>`.pickRestart({
  A: "f2@3 ~@13", B: "f2 a2", C: "f2 d2", D: "g2 a#2", E: "g2 e2", F: "a2 c3", G: "a2 f2", H: "a#2 d3", I: "a#2 g2",
  J: "c3 a#2", K: "d3 c3", L: "a#2 f2", M: "g2", N: "g2@13 f2@3", O: "[f3@29 f2@3]/2", P: "[e3@29 f2@3]/2",
  Q: "f3@13 f2@3", R: "g3@13 f2@3", S: "g3@13 e2@3", T: "d2@3 ~@13", U: "d2/2", V: "g2/2", W: "a2/2", X: "a#2", Y: "c3",
  Z: "d3/2", AA: "g3/2", AB: "c#3", AC: "~ [c2,c3]", AD: "f2 e2", AE: "d2 a2", AF: "g2 f2", AG: "e2 [c2,c3]",
  AH: "f3@3 ~@5 f3@3 ~@5", AI: "f3@3 ~@5 f3@3 ~@2 c3@3", AJ: "a2@5 f2@3 f2@5 f2@3", AK: "a2@5 a#2@3 c3@3 a#2@2 a2@3",
  AL: "a#2@5 g2@3 g2@5 g2@3", AM: "a#2@5 c3@3 d3@3 c3@2 a#2@3", AN: "f3@5 f3@3 e3@3 d3@2 c3@3", AO: "g3@3 ~@13",
  AP: "g#2 a2", AQ: "a#2 b2", AR: "c3 c#3", AS: "d3 d#3", AT: "[c2,c3] c#2", AU: "d2 d#2", AV: "e2 f2", AW: "f#2 g2",
  AX: "~@8 f2@3 ~@5", AY: "~@8 d#2@3 ~@5", AZ: "~@8 d2@3 ~@5", BA: "~@8 c#2@3 ~@5", BB: "~@8 [c2,c3]@3 ~@5",
  BC: "[~ g2@15]/2", BD: "[~@5 a2@27]/2", BE: "[~@7 g2@25]/2", BF: "[~@9 d2@34 g2@34 ~ a2@34]/7", BG: "[~ d2@15]/2",
  BH: "[~@5 g2@34 a2@34 g2@17 e2@17 d3@17 ~@4]/8", BI: "[~@7 g2@17]/3", BJ: "~ a#2@7", BK: "~@3 a#2@13",
  BL: "[~@5 d3@27]/2", BM: "[~@7 g3@34 d3@34 c3@34 ~@3]/7", BN: "a2@2 ~@2 f2@2 ~@3 f2@2 ~@5",
  BO: "~@2 a#2@2 ~@7 g2@2 ~@3", BP: "~@3 g2@2 ~@11", BQ: "~@13 d3@2 ~", BR: "~@5 c3 ~ a#2",
  BS: "[~@3 a2@2 ~@2 g2@2 ~@6 g3@2 ~@15]/2", BT: "~ f3@2 ~@6 e3@2 ~@5", BU: "~ d3 ~@6", BV: "~@3 c3@2 ~@11",
  BW: "~@4 f2 ~@11",
})).s("gm_baritone_sax").gain(0.3)

// other · baritone sax · "Baritone Saxophone" · soft notes
const baritone_sax_soft = note("<~@121 A B C D ~@62 E@8 ~ F@2 G@2 H I@4 ~@12>".pickRestart({
  A: "[c2,c3] c#2", B: "d2 d#2", C: "e2 f2", D: "f#2 g2", E: "[~@7 f2@57]/8",
  F: "[~@4 c3@3 a2@6 f2@2 f2@6 f2@3 a2@6 a#2@2]/2", G: "[~ c3@2 a#2@3 a2@3 a#2@6 g2@3 g2@5 g2@3 a#2@6]/2",
  H: "c3@3 d3@3 c3@3 a#2@2 a2@5",
  I: "[~ f2@3 f2@6 f2@3 f3@5 f3@3 e3@3 d3@3 c3@3 a#2@5 g2@3 g2@6 g2@3 g3@6 f3@2 e3@3 d3@3 c3@3]/4",
})).s("gm_baritone_sax").gain(0.2)

stack(alto_sax, tenor_sax, baritone_sax, baritone_sax_soft)

More by Gustav Holst