Strudelify

christmas songs

Owen Richards

KeyF majorTempo72 bpm
0:00/0:00
// christmas songs — Owen Richards
// 72 bpm, 4/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: Transcription provider: pdmx. https://musescore.com/score/5889485; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 39 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(72/4)

// 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 · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB E F G H I J AC@2 AD AE@2
>`.pickRestart({
  A: "f4 eb4 d4 eb4 g4 bb4 d5 f5", B: "gb5@4 ab4 eb4 ab4 eb4 ab4@2 gb4@6", C: "g4 f4 eb4 f4 ab4 c5 b4 bb4",
  D: "db5 b4 bb4 ab4 gb4@2 e4@2", E: "~ g4!2 ab4", F: "f4 e4 eb4 d4", G: "~ d4 f4 eb4", H: "c4!2 b3@2",
  I: "bb3@3 b3 c4@4", J: "eb4@3 g4@2 ab4@3 g4@4 gb4@4", K: "g4@2 gb4@2 bb4 ab4 eb4 e4", L: "~@2 ab4@2 ab3 c4 d4 f4",
  M: "eb4@3 g4 bb4 ab4 g4 f4", N: "d4 db4 c4 b3", O: "eb4@2 eb4 c5 bb4 ab4 g4 f4", P: "eb4@2 eb4!2",
  Q: "bb3@6 bb3@2 c4@5 bb3 ~ c4", R: "d4@3 f4@2 e4@3 c4@6 g4@2", S: "f4 eb4 e4 f4 eb4@2 b3@2",
  T: "~ g3 ab3 gb3 g3@2 ~@2", U: "~ c4 db4 f4", V: "f4 db4 ~@2", W: "~@2 f4 ~@3 d4 ~", X: "bb4 ~@3 bb3@2 c4@2",
  Y: "eb5!2 eb5@2 b3@2 f4@2", Z: "ab4@2 ~@6 db5@4 eb5 f5 ~ eb5", AA: "d5@2 d5@2 eb5!2 ~ eb5 db5@2 db5@3 db5 ~ db5",
  AB: "eb5@2 g4 d4", AC: "g4 eb4 c4 d4", AD: "g4@2 eb4@2 c4@2 d4 eb4", AE: "[~@5 d4@8 ~@3]/2",
})).s("gm_alto_sax").gain(0.4)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB E F G H I J AC@2 AD AE@2
>`.pickRestart({
  A: "d4 c4 b3 c4 eb4 g4 gb4 f4", B: "db4@3 bb3", C: "d4 c4 bb3 c4 eb4 ab4 g4 f4", D: "e4", E: "~ bb3@3 eb4 c4@3",
  F: "bb3 db4 ab3 b3", G: "~ bb3@3 c4@2 b3@2", H: "g3!2 f3@2", I: "g3@3 gb3 ab3@4", J: "d4@3 eb4@2 db4@3 c4@8",
  K: "e4@2 d4@2 f4 eb4 b3 bb3", L: "~ db4@3 eb3@2 ab3@2", M: "~ bb3@3 f4 eb4 d4 ab3", N: "bb3!2 ab3!2",
  O: "g3 bb3@3 bb3@2 eb3@2", P: "~@4 f4@2 eb4 d4 b3@4 b3@4", Q: "g3@6 g3@2 ab3@5 g3 ~ ab3",
  R: "a3@3 d4@2 c4@3 e4@6 e4@2", S: "d4 db4 d4!2 c4@2 g3@2", T: "~ bb3 b3 a3 bb3@4", U: "~ ab3 f3 b3",
  V: "db4@4 bb3 a3 ~ ab3 g3@8", W: "~@2 db4 ~@3 bb3 ~", X: "~@2 b2 d3 g3 b3 d4 g4 c5@4 bb4@4", Y: "b3!2 b3@2 f3@2 b2@2",
  Z: "gb3@2 c3 eb3 ab3 c4 eb4 ab4 bb4@4 gb4 ab4 ~ gb4", AA: "bb4@2 bb4@2 c5!2 ~ c5 ab4@2 ab4@3 ab4 ~ ab4",
  AB: "ab4@6 c4 eb4 d4@4 bb3@4", AC: "bb2 eb3 c3 b2", AD: "bb2@2 eb3@2 c4@2 b3 ab3", AE: "[~@5 bb3@8 ~@3]/2",
})).s("gm_tenor_sax").gain(0.35)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB E F G H I J AC@2 AD AE@2
>`.pickRestart({
  A: "eb2 bb2@7", B: "ab2 eb3@3 bb2@2 eb2@2", C: "ab2 eb2@7", D: "ab2", E: "eb2 f2", F: "g2 c3 f2 bb2",
  G: "eb2@2 d2 g2", H: "c2 db3", I: "bb2!4", J: "bb2!2 a2 d2", K: "g2!2 ab2 db3", L: "gb2@2 f2 bb2", M: "eb2@2 f2!2",
  N: "g2 e2 f2 bb2", O: "eb2@2 bb2 eb2", P: "c3@2 g2@2 ab2 ab3@2 ab3", Q: "eb3@6 eb3@2 f3@5 eb3 ~ db3",
  R: "bb2@3 bb3@2 a3@3 d3@6 c4@2", S: "bb3 g3 c4 bb3 f3@2 bb2@2", T: "eb2", U: "bb2@2 eb2 g2", V: "bb2!2 eb2 g2",
  W: "bb2 ~ c4 ~ eb2 ~ g3 ~", X: "ab2@2 ab3 c3", Y: "ab2 eb3 ab3 eb3 db2 db3 f3 ab2", Z: "gb2 ~@3 g3@4",
  AA: "f2 f3 bb3 f3 b2@2 eb2@2", AB: "g2@4 ab2 bb2@3 ab3@2 bb2@2 ab3@2 bb2@2", AC: "g2 c3 f3!2",
  AD: "g2@2 c3@2 f2@2 f2 e2", AE: "[~@5 eb2@8 ~@3]/2",
})).s("gm_baritone_sax").gain(0.3)

stack(alto_sax, tenor_sax, baritone_sax)