Strudelify

Carol of the Bells

ARZ

KeyB♭ majorTempo160 bpm
0:00/0:00
// Carol of the Bells — ARZ
// 160 bpm, 3/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5830927; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 83 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/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 · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@5 B@2 C D ~@4 E F E G A@4 H@2 I D ~@3 J K L M N A@4 O P Q R ~@4 K L M L S T U T V@2 W
  X Y Z Y J E AA K AB E AC V
>`.pickRestart({
  A: "ab4@5 g4@3 ab4@3 f4@5", B: "ab4@11 g4@2 g4@3", C: "f4@11 g4@2 f4@3", D: "c4@5 db4@3 db4@3 c4@5", E: "f4@5 ~@11",
  F: "~@11 e4@5", G: "g4@5 eb4@5 ~ e4@5", H: "ab4", I: "f4", J: "g4@8 g4@3 f4@2 e4@3", K: "c4@5 ~@11", L: "d4@5 ~@11",
  M: "eb4@5 ~@11", N: "db4@5 ~@11", O: "c5@3 c5@3 ~@2 c5@3 bb4@2 bb4@3", P: "ab4@3 ab4@3 ~@2 ab4@3 f4@2 f4@3",
  Q: "g4@3 g4@3 ~@2 g4@3 ab4@2 g4@3", R: "f4@5 eb4@3 f4@3 c4@5", S: "c4", T: "d4", U: "eb4", V: "ab4@5 ~@11",
  W: "g4@5 ~@6 e4@5", X: "f4@5 db4@3 db4@3 c4@5", Y: "e4", Z: "f4@5 f4@5 ~ g4@2 f4@3", AA: "~@5 f4@5 ~ eb4@2 f4@3",
  AB: "~@5 f4@5 ~ eb4@2 g4@3", AC: "g4@5 ~@11",
})).s("gm_alto_sax").gain(0.3)

// other · alto sax · "Alto Saxophone" · soft notes
const alto_sax_soft = note("<~@24 A B A ~@13 C D A ~@13 A D A E ~@23>".pickRestart({
  A: "e4", B: "f4@3 ~@2 f4@5 ~ g4@2 f4@3", C: "e4 ~", D: "f4@5 f4@5 ~ g4@2 f4@3", E: "g4@5 f4@5 ~ e4@5",
})).s("gm_alto_sax").gain(0.2)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@4 A B C D C D E F G E G H D C B C I J K L ~@4 M@4 N@3 O P Q R S ~@3 T U V W V X C Y C Z AA AB AC ~@4 U V W V F E D E
  W AD AE AF AG AH AG AI U AJ AK AL U V W
>`.pickRestart({
  A: "f4", B: "eb4", C: "db4", D: "c4", E: "bb3", F: "ab3", G: "bb3@5 bb3@11", H: "c4@11 ab3@2 bb3@3",
  I: "c4@11 bb3@2 bb3@3", J: "c4@11 ab3@2 ab3@3", K: "bb3@11 bb3@2 bb3@3", L: "ab3@5 ab3@3 ab3@3 ab3@5",
  M: "ab3@5 g3@3 ab3@3 f3@5", N: "c4@5 bb3@3 c4@3 ab3@5", O: "c4@5 bb3@3 c4@3 db4@2 eb4@3",
  P: "f4@5 f4@3 f4@3 eb4@2 db4@3", Q: "c4@5 c4@3 c4@3 bb3@2 ab3@3", R: "bb3@5 bb3@3 bb3@3 c4@2 bb3@3",
  S: "f3@5 bb3@3 bb3@3 ab3@5", T: "bb3@8 db4@3 c4@2 bb3@3", U: "ab3@5 ~@11", V: "bb3@5 ~@11", W: "c4@5 ~@11",
  X: "c4@5 c4@11", Y: "eb4@5 eb4@11", Z: "ab3@3 ab3@3 ~@2 ab3@3 bb3@2 bb3@3", AA: "ab3@3 ab3@3 ~@2 ab3@3 f3@2 f3@3",
  AB: "g3@3 g3@3 ~@2 g3@3 bb3@2 bb3@3", AC: "c4@5 c4@3 c4@3 ab3@5", AD: "eb4@5 ~@11", AE: "db4@5 ~@6 bb3@5",
  AF: "c4@5 bb3@3 bb3@3 ab3@5", AG: "g3", AH: "ab3@5 ab3@5 ~ bb3@2 ab3@3", AI: "bb3@3 ~@5 db4@3 c4@2 bb3@3",
  AJ: "~@5 ab3@5 ~ g3@2 ab3@3", AK: "f3@5 ~@11", AL: "~@5 ab3@5 ~ g3@2 bb3@3",
})).s("gm_tenor_sax").gain(0.3)

// other · tenor sax · "Tenor Saxophone" · soft notes
const tenor_sax_soft = note("<~@24 A B A ~@13 A C A ~@13 A C A D ~@23>".pickRestart({
  A: "g3", B: "ab3@3 ~@2 ab3@5 ~ bb3@2 ab3@3", C: "ab3@5 ab3@5 ~ bb3@2 ab3@3", D: "bb3@5 db4@5 ~ c4@5",
})).s("gm_tenor_sax").gain(0.2)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  ~@8 A B C D E F E G D@4 H@2 I J ~@4 K L M N K L M O G@2 I J ~@3 P K M@3 Q@4 R@2 S J ~@4 K M@3 T D@2 G M@2 U V W@2 X@2
  K Y Z Y M AA K
>`.pickRestart({
  A: "bb3", B: "ab3", C: "g3", D: "f3", E: "db3", F: "c3", G: "f3@11 c3@5", H: "f2@11 c3@5", I: "db3@11 eb3@5",
  J: "f3@5 f3@3 f3@3 f3@5", K: "f2@5 ~@11", L: "~@11 c3@5", M: "f3@5 ~@11", N: "db3@5 c3@5 ~ c3@5",
  O: "db3@5 c3@5 ~ eb3@5", P: "c3@5 bb2@5 ~ g2@5", Q: "f3@5 f2@11", R: "f3@3 f3@3 ~@2 f3@3 c3@2 c3@3",
  S: "db3@3 db3@3 ~@2 db3@3 eb3@2 eb3@3", T: "f2", U: "f3@5 ~@6 c3@5", V: "f3@5 c3@3 c3@3 f2@5", W: "[c3@27 g2@5]/2",
  X: "[c3@21 bb2@5 ~ g2@5]/2", Y: "~@5 c3@5 ~ bb2@2 c3@3", Z: "ab2@5 ~@11", AA: "c3@5 ~@11",
})).s("gm_baritone_sax").gain(0.4)

// other · baritone sax · "Baritone Saxophone" · soft notes
const baritone_sax_soft = note("<~@24 A B A ~@13 A B A ~@13 C@2 D@2 ~@23>".pickRestart({
  A: "c3", B: "c3@11 g2@5", C: "[c3@27 g2@5]/2", D: "[c3@21 bb2@5 ~ g2@5]/2",
})).s("gm_baritone_sax").gain(0.2)

stack(alto_sax, alto_sax_soft, tenor_sax, tenor_sax_soft, baritone_sax, baritone_sax_soft)