Strudelify

Spooky Silent Night

Jack GThomas S

KeyE♭ majorTempo120 bpm
0:00/0:00
// Spooky Silent Night — Jack GThomas S
// 120 bpm, 3/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/4855557; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 50 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 2"
const french_horn = note(`<
  ~@2 A B A C D E F ~@10 G H I F J K L K M F@2 N D ~@2 O P ~@2 O P F Q E L ~ R@5
>`.pickRestart({
  A: "f3", B: "c3@8 bb2@3 c3@5", C: "g3@8 f3@3 g3@5", D: "ab3", E: "bb3@11 bb3@5", F: "bb3", G: "ab3@8 g3@3 f3@5",
  H: "g3@11 g3@5", I: "c4@8 ab3@3 bb3@5", J: "ab3@11 ~@5", K: "eb4@8 f4@3 eb4@5", L: "c4", M: "f4",
  N: "a3@5 bb3@3 c4@3 bb3@5", O: "f3@8 g3@3 f3@5", P: "c3", Q: "db4", R: "[~ ab3@6 g3@2 bb3@4 ab3@24 ~@3]/5",
})).s("gm_french_horn").gain(0.3)

// other · french horn · "Horn 3"
const french_horn_2 = note(`<
  ~@5 A B C D ~@6 E F G H I J K L@2 M D M N O P Q D ~@2 M D ~@2 M D ~@3 R ~ S@5
>`.pickRestart({
  A: "g3@11 g3@5", B: "f3@8 g3@3 e3@5", C: "f3@11 g3@5", D: "f3", E: "c4@11 c4@5", F: "bb3@8 c4@3 bb3@5",
  G: "db4@8 eb4@3 e4@5", H: "f4@5 db4@5 ~ bb3@5", I: "c4", J: "db4", K: "ab3@11 eb3@5", L: "[c3@27 ~@5]/2",
  M: "ab3@8 bb3@3 ab3@5", N: "ab3", O: "bb2@8 c3@3 bb2@5", P: "c3@5 eb3@5 ~ db3@5", Q: "c3@5 db3@5 ~ e3@5", R: "eb4",
  S: "[~@7 db4@2 db4@4 c4@24 ~@3]/5",
})).s("gm_french_horn").gain(0.3)

// other · french horn · "Horn 4"
const french_horn_3 = note("<~@4 A@4 B C D E F G H I ~@6 J@2 ~@4 K I L M ~@2 K I ~@2 K I ~ N O N ~@3 P@3>".pickRestart({
  A: "c3@8 db3@3 c3@5", B: "db3@11 db3@5", C: "bb2", D: "c3@11 c3@5", E: "ab2", F: "bb2@11 bb2@5",
  G: "db3@8 c3@3 bb2@5", H: "ab2@8 bb2@3 ab2@5", I: "f2", J: "[f2@27 ~@5]/2", K: "f2@11 f2@5", L: "f2@5 c3@5 ~ f3@5",
  M: "ab3", N: "f3", O: "c3@5 db3@5 ~ e3@5", P: "[~@5 c3@4 f2@12 ~@3]/3",
})).s("gm_french_horn").gain(0.25)

stack(french_horn, french_horn_2, french_horn_3)