Strudelify

Carol of the Bells

Mykola Leontovych

KeyA majorTempo180 bpm
0:00/0:00
// Carol of the Bells — Mykola Leontovych
// 180 bpm, 3/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/37381; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 69 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(180/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.

// chords · violin · "s"
const violin = note(`<
  A@4 B C D E B C D E F@4 G@4 H I J K L M L M E@2 C D E A@3 B C D E B C D E F@4 G@4 H I J K L M L M E@2 C D N@3 O@2
>`.pickRestart({
  A: "a4@5 g#4@3 a4@3 f#4@5", B: "a4@5 g#4@3 a4@3 f#4@5, f#4@11 ~@5", C: "a4@5 g#4@3 a4@3 f#4@5, e4",
  D: "a4@5 g#4@3 a4@3 f#4@5, d4", E: "a4@5 g#4@3 a4@3 f#4@5, c#4", F: "[f#4,a4]@5 [f#4,g#4]@3 [f#4,a4]@3 f#4@5",
  G: "[a4,c#5]@5 [g#4,b4]@3 [a4,c#5]@3 [f#4,a4]@5", H: "[f#4,f#5]@5 [f#4,f#5]@3 [f#4,f#5]@3 [f#4,e5]@2 [f#4,d5]@3",
  I: "[f#4,c#5]@5 [f#4,c#5]@3 [f#4,c#5]@3 [f#4,b4]@2 [f#4,a4]@3", // F#5 B5 F#m
  J: "[f#4,b4]@5 [f#4,b4]@3 [f#4,b4]@3 [f#4,c#5]@2 [f#4,b4]@3", K: "f#4@5 f#4@3 f#4@3 f#4@5",
  L: "~@3 d#4@2 f4@3 f#4@3 g#4@2 a4@3, c#4", M: "b4@3 c#5@2 [f4,b4]@5 ~ [f#4,a4]@5, d#4@5 ~@11", N: "[c#4,f#4]",
  O: "[[a4,c#5]@7 [g#4,b4]@4 [a4,c#5]@4 f#4@11 ~@6]/2", // A G#m A
})).s("gm_violin").gain(0.3)

// chords · cello · "Staff-1"
const cello = note(`<
  ~@8 A B C D E F G F@2 H I J K L M N O@3 P Q R S T U ~@7 A B C D E F G F@2 H I J K L M N O@3 P Q R S T V@3 ~@2
>`.pickRestart({
  A: "d4", B: "c#4", C: "b3", D: "f#3", E: "[d3,b3]@5 [d3,b3]@3 [d3,b3]@3 [d3,b3]@5",
  F: "[f#3,c#4]@5 [f#3,c#4]@3 [f#3,c#4]@3 [f#3,c#4]@5", G: "[b3,d4]@5 [b3,d4]@3 [b3,d4]@3 [b3,d4]@5",
  H: "[f#3,d#4]@5 [f#3,d#4]@3 [f#3,d#4]@3 [f#3,d#4]@5", I: "[f#3,e4]@5 [f#3,d4]@3 [f#3,d4]@3 [f#3,c#4]@5",
  J: "f#4@3 e4@2 [f#3,d4]@3 [f#3,d4]@3 [f#3,c#4]@5, f#3@5 ~@11", // D F#5
  K: "[a3,c#4]@5 [g#3,d4]@3 [a3,d4]@3 [f#3,c#4]@2 [f#3,b3]@3", // A G#dim D5 F#5 B5
  L: "[a3,c#4]@5 [g#3,c#4]@3 [a3,c#4]@3 [f#3,c#4]@2 [f#3,c#4]@3", // A C#5 A F#5
  M: "[a3,d4]@5 [g#3,d4]@3 [a3,d4]@3 [f#3,e4]@2 [f#3,d4]@3", N: "[a3,c#4]@5 [g#3,c#4]@3 [a3,c#4]@3 [f#3,c#4]@5",
  O: "a3@5 g#3@3 a3@3 f#3@5, c#3", P: "a3@5 g#3@3 a3@3 [d3,f#3]@5, c#3@11 ~@5", Q: "[e3,f#3]", R: "[d3,f#3]",
  S: "[c#3,f#3]", T: "[b2,f#3]", U: "[f#2,f#3]", V: "a3@5 g#3@3 a3@3 f#3@5, f#2",
})).s("gm_cello").gain(0.35)

stack(violin, cello)