Strudelify

Jupiter Chorale

Holst

KeyF majorTempo50 bpm
0:00/0:00
// Jupiter Chorale — Holst
// 50 bpm, 3/4, key F 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/4 at bar 1, 3/4 at bar 2) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/3394996; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 42 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(50/3)

// 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 · french horn · "Horn in F"
const french_horn = note("<~ A B C@2 D E F G ~@6 H I J K L M J N O P@2 Q@4 R@6 ~ S@5>".pickRestart({
  A: "c4!2 d4", B: "bb3 g3 bb3", C: "[c4@2 c4 eb4 f4@4 eb4@2 d4@2]/2", D: "c4 ab3 eb3 ab3 f3@2",
  E: "d4@4 g4@2 bb3 d4 f4@4", F: "eb4@2 eb4 g4 f4@2", G: "d4@2 ~", H: "~@2 bb3", I: "f3@4 g3 bb3",
  J: "c4@4 c4@2 eb4@2 d4@3 bb3", K: "eb4 f4 eb4@2 d4@2", L: "c4 d4 c4@2 bb3@2", M: "g3@4 g3 bb3", N: "eb4 f4 g4@2 g4@2",
  O: "g4 f4 eb4@2 f4@2", P: "[eb4@32 g4@7 eb4@7 d4@7 d4@14 ~ d4@7 eb4@14 f4@7]/2",
  Q: "[f4@14 ~ f4@7 eb4@14 f4@7 f4@14 f4@7 ~ eb4@7 g4@7 ab4@28 ab4@14 ~ g4@14 g4@14 eb4@14 ~ eb4@14 bb4@13]/4",
  R: "[~ ab4@14 bb4@14 ~ g4@14 ab4@14 f4@29 g4@16 eb4@16 ~@16 d4@16 bb4@16 ~@16 bb4@16 ab4@16 ~@16 f4@32 eb4@16 ~@9]/6",
  S: "[~@39 eb4@16 eb4@8 f4@8 eb4@16 eb4@32 d4@32 bb3@48 ~@41]/5",
})).s("gm_french_horn").gain(0.45)

// other · french horn · "Horn in F" · soft notes
const french_horn_soft = note("<~@8 A B C D E F G H ~@26>".pickRestart({
  A: "~@2 bb3", B: "bb3 f3 bb3 d4 g3 c4", C: "bb3@2 bb3", D: "bb3 f3 bb3 d4 bb3@2", E: "ab3@2 ab3", F: "g3!2 eb3",
  G: "eb3 c4 bb3", H: "c4 ab3 ~",
})).s("gm_french_horn").gain(0.2)

// other · trombone · "Alto Trombone"
const trombone = note("<~ A B C D E F G H I J K L M N O P Q R S T U V@2 W@6 X@6 ~ Y@5>".pickRestart({
  A: "eb4 ab4 f4", B: "g4 bb4 eb4", C: "eb4@2 eb4 c4 d4 f4", D: "ab4 c5@2 c5 g4 f4", E: "eb4@4 d4 f4",
  F: "g4@6 eb4 g4 bb4@4", G: "eb4@2 f4@2 f4 ab4", H: "g4@4 bb3 g3", I: "f3@3 f3 eb3 g3", J: "f3@2 bb2@2 bb3 g3",
  K: "f3@3 f3 g3 bb3", L: "c4@4 c4 d4", M: "eb4 d4 c4", N: "bb3 eb4 g3", O: "f3 eb3 f3@2 g3@2", P: "bb3@2 d4",
  Q: "eb4 ~ eb4@4 eb4 ~ f4@4", R: "g4 ~ g4@4 bb4 ~ bb4@4", S: "c4 ab3 c4 ab3 d4@2", T: "c4@2 f3", U: "eb3@2 f3",
  V: "[g3 eb3 f3]/2",
  W: "[g3@32 bb4@7 g4@7 f4@21 ~ f4@7 eb4@7 g4@7 f4@14 bb3@14 ~ bb4@7 g4@7 f4@21 f4@7 ~ g4@7 bb4@7 c5@28 f4@14 ~ eb4@14 g4@14 ab4@14 ~ bb4@14 ab4@13]/6",
  X: "[~ g4@14 f4@7 ~ eb4@7 f4@14 g4@14 bb4@29 d4@16 eb4@16 ~@16 f4@16 g4@16 ~@16 g4@16 eb4@16 ~@16 d4@16 c4@32 ~@9]/6",
  Y: "[~@39 bb3@16 c4@32 bb3@48 ab3@16 g3@48 ~@41]/5",
})).s("gm_trombone").gain(0.3)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note("<~ A B A C A D A E ~@6 F G A H A C A D A I@6 J@6 ~ K@5>".pickRestart({
  A: "ab2@2 bb2", B: "eb3 eb2 g2", C: "c3@2 bb2", D: "eb3@4 eb2 g2", E: "eb3 eb2 ~", F: "~ f3 eb3", G: "d3 c3 bb2",
  H: "eb2@2 g2",
  I: "[eb2@32 g2@14 bb2@29 c3@14 d3@29 g2@14 bb2@29 eb3@7 g3@7 ab3@14 g3@14 f3@14 ~ c3@14 bb2@14 ab2@14 ~ g2@14 f2@13]/6",
  J: "[~ eb2@14 ab2@14 ~ f3@14 eb3@14 d3@14 ~ c3@14 bb2@16 ab2@16 ~@16 bb2@16 eb2@16 ~@16 g2@16 ab2@16 ~@16 bb2@16 c3@32 ~@9]/6",
  K: "[~@39 eb2@8 g2@8 ab2@32 bb2@16 bb1@48 eb2@48 ~@41]/5",
})).s("gm_baritone_sax").gain(0.4)

// other · baritone sax · "Baritone Saxophone" · soft notes
const baritone_sax_soft = note("<~@8 A B C D E F G H ~@26>".pickRestart({
  A: "~@2 g2", B: "bb2@2 c3", C: "d3@2 g2", D: "bb2@4 eb3 g3", E: "ab3 g3 f3", F: "c3 bb2 ab2", G: "g2 f2 eb2",
  H: "ab2 ~@2",
})).s("gm_baritone_sax").gain(0.2)

stack(french_horn, french_horn_soft, trombone, baritone_sax, baritone_sax_soft)