Strudelify

carol of the bells

Pentatonix

KeyF majorTempo170 bpm
0:00/0:00
// carol of the bells — Pentatonix
// 170 bpm, 3/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/2990141; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 179 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(170/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 · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@12 A B C D E F G H I J K L M F G H I J K L M N@4 O@2 H D P@2 Q R@3 S T ~@4 U V W X Y Z Y Z R@4 AA AB T D AC H AD H
  AE AF F G H I J K L M F G H I J K L M AF AG AH@2 P@2 AI AJ H T AK AL AM H AC D AF I D AN H T AK AO AD AP@3 T AQ AR AS
  AL AT AQ AC AA AB AU AV AW AX AY AZ BA BB BC BD BE BF BG AC T BH AU AV AW AX AY AZ BA BB AU AV AW AX AY AZ BA BB ~@13
  BI BJ BK BL@2
>`.pickRestart({
  A: "g4@5 f4@3 eb4@3 d4@2 eb4@3", B: "f4@3 ~@2 c4@3 ~@3 g4@2 f4@3", C: "f4@3 ~@2 c4@3 ~@3 eb4@5", D: "f4",
  E: "d4@5 eb4@5 ~ f4@5", F: "g3", G: "g4@5 f4@8 eb4@3", H: "eb4", I: "eb4@5 f4@5 ~ g4@5", J: "ab4@11 f4@2 eb4@3",
  K: "f4@11 ab4@2 bb4@3", L: "ab4@5 g4@5 ~ g4@5", M: "g4@5 f4@5 ~ f4@5", N: "g4/2", O: "f4/2", P: "c4/2", Q: "bb3",
  R: "eb4@5 d4@3 eb4@3 c4@5", S: "eb4@5 g4@5 ~ ab4@5", T: "g4", U: "c5@5 c5@3 c5@3 bb4@2 ab4@3",
  V: "g4@5 g4@3 g4@3 f4@2 eb4@3", W: "f4@5 f4@3 f4@3 g4@2 f4@3", X: "eb4@5 c4@3 c4@3 c4@5",
  Y: "g3@3 a3@2 b3@3 c4@3 d4@2 eb4@3", Z: "f4@3 g4@2 f4@5 ~ eb4@5", AA: "g4@5 ~@3 g4@5 ~@3", AB: "g4@5 ~@11", AC: "ab4",
  AD: "d4", AE: "b3", AF: "c4", AG: "c4 eb4", AH: "[d4@21 eb4@5 ~ d4@5]/2", AI: "f4@5 eb4@5 ~ d4@5", AJ: "eb4@5 f4@11",
  AK: "bb4", AL: "c5", AM: "~@5 c4@5 ~ d4@5", AN: "g4@3 f4@2 eb4@5 ~ d4@5", AO: "g4@11 f4@2 eb4@3", AP: "g4/3",
  AQ: "a4", AR: "b4", AS: "d5", AT: "c5 bb4", AU: "g4@3 f4@2 eb4@3 d4@3 c4@5", AV: "ab4@3 g4@2 f4@3 eb4@3 f4@5",
  AW: "d4@3 bb3@2 bb4@3 ab4@3 g4@2 f4@3", AX: "g4@3 bb3@2 g4@3 ab4@3 g4@5", AY: "eb4@3 d4@2 c4@3 d4@3 eb4@5",
  AZ: "f4@3 g4@2 f4@3 eb4@3 f4@5", BA: "d4@3 c4@2 b3@3 c4@3 d4@2 f4@3", BB: "e4@3 f4@2 e4@3 d4@3 e4@5", BC: "eb4 d4",
  BD: "c4@11 d4@2 f4@3", BE: "eb4 f4", BF: "eb4@5 c4@5 ~ eb4@5", BG: "g4@3 f4@2 eb4@3 f4@3 g4@5",
  BH: "c5@5 g4@5 ~ g4@2 f4@3", BI: "g4@3 b4@2 c5@3 d5@3 c5@2 b4@3", BJ: "c5@8 d5@3 eb5@5", BK: "g4@5 a4@5 ~ b4@5",
  BL: "c5/2",
})).s("gm_trumpet").gain(0.3)

// other · french horn · "Horn in F"
const french_horn = note(`<
  ~@7 A B C D E F G H I J K L M N O P Q R K L M N O P Q R S@11 T@2 U S M V W X Y ~@6 Z AA ~@4 AB AC AD I AE M AF J@3 K L
  M N O P Q R K L M N O P Q R J AG AH@2 AI@2 AJ AK J AE I AD AL AE@2 M S@4 ~@8 Z AA AM AN S@4 AB AC ~@16 AO AP AQ AR AS
  AT AU AV ~@2 AQ AR AS AT AU AV ~@8 A B C D E AW AX AY AZ@2
>`.pickRestart({
  A: "d4@11 d4@2 c4@3", B: "b3@5 c4@5 ~ d4@5", C: "c4 g3", D: "c4 eb4", E: "g4 eb4", F: "f4@5 eb4@5 ~ d4@2 eb4@3",
  G: "c4@11 ab3@2 g3@3", H: "f3@11 b3@2 c4@3", I: "d4", J: "g3", K: "g4", L: "eb4@5 d4@8 c4@3", M: "bb3",
  N: "g4@5 f4@5 ~ eb4@5", O: "c4@11 f4@2 g4@3", P: "ab4@11 f4@2 g4@3", Q: "ab4@5 g4@5 ~ f4@5", R: "eb4@5 d4@5 ~ b3@5",
  S: "eb4@5 d4@3 eb4@3 c4@5", T: "g3/2", U: "f3", V: "eb3", W: "g3@5 a3@5 ~ bb3@5", X: "a3",
  Y: "c4@3 bb3@2 ab3@5 ~ f3@5", Z: "g3@3 a3@2 b3@3 c4@3 d4@2 eb4@3", AA: "f4@3 g4@2 f4@5 ~ eb4@5",
  AB: "eb4@5 ~@3 eb4@5 ~@3", AC: "eb4@5 ~@11", AD: "eb4", AE: "c4", AF: "ab3", AG: "g3 c4",
  AH: "[bb3@21 c4@5 ~ bb3@5]/2", AI: "ab3/2", AJ: "f4@5 eb4@5 ~ d4@5", AK: "c4@5 bb3@11", AL: "~@5 ab3@5 ~ bb3@5",
  AM: "d4 eb4", AN: "f4 d4", AO: "g4@3 f4@2 eb4@3 d4@3 c4@5", AP: "ab4@3 g4@2 f4@3 eb4@3 f4@5",
  AQ: "d4@3 bb3@2 bb4@3 ab4@3 g4@2 f4@3", AR: "g4@3 bb3@2 g4@3 ab4@3 g4@5", AS: "eb4@3 d4@2 c4@3 d4@3 eb4@5",
  AT: "f4@3 g4@2 f4@3 eb4@3 f4@5", AU: "d4@3 c4@2 b3@3 c4@3 d4@2 f4@3", AV: "e4@3 f4@2 e4@3 d4@3 e4@5",
  AW: "eb4@3 d4@2 c4@3 bb3@3 c4@2 d4@3", AX: "c4@8 c4@3 c4@5", AY: "g3@5 g3@5 ~ g3@5", AZ: "g4/2",
})).s("gm_french_horn").gain(0.3)

// other · trombone
const trombone = note(`<
  A B@3 C D E F ~ B@3 C G H I J K L M N O P Q R K L M N O P Q R S@6 T U V@2 W X@2 ~ Y Z@5 AA W AB AC AD AE AF AG AH AI
  AJ AK AL AM T W AK AA AN AC AO AC K L M N O P Q R K L M N O P Q R AH AP AQ@2 AR@2 AS AT AH ~@7 AC AU AJ AV AA W AB AC
  AW AX AY AZ AW AX@2 BA T BB V@2 AL AM ~@16 BC BD BE BF T BG BH AA BC BD BE BF T BG BH AA BI@2 B@3 C D E F ~ B@3 BJ BK
  BL BM@2
>`.pickRestart({
  A: "~@5 c3@3 d3@3 eb3@2 f3@3", B: "g3@3 ~@2 g3@3 ~@3 g3@3 ~@2", C: "g3@3 ~@2 f3@3 eb3@3 d3@2 eb3@3",
  D: "f3@3 ~@2 f3@3 ~@3 f3@3 ~@2", E: "eb3@3 ~@2 eb3@3 ~@3 d3@2 c3@3", F: "b2@3 ~@2 b2@3 ~@3 b2@3 ~@2",
  G: "f3@3 ~@2 f3@3 g3@3 f3@2 eb3@3", H: "d3@5 d3@3 ~@3 d3@2 c3@3", I: "b2@5 d3@5 ~ f3@5", J: "b3@5 c4@5 ~ d4@5",
  K: "eb3@3 ~@5 eb3@3 ~@5", L: "eb3@3 ~@5 d3@3 eb3@2 f3@3", M: "g3@3 ~@5 g3@3 ~@5", N: "g3@3 ~@8 g3@2 bb3@3",
  O: "ab3@3 ~@5 ab3@3 ~@5", P: "ab3@3 ~@5 eb3@3 f3@2 g3@3", Q: "c4@5 c4@5 ~ c4@5", R: "ab3@5 g3@5 ~ d3@5", S: "eb4/2",
  T: "c4", U: "d4", V: "c4/2", W: "bb3", X: "[g3@5 d3@27]/2", Y: "ab2@5 eb3@11", Z: "eb4@5 d4@3 eb4@3 c4@5", AA: "g3",
  AB: "f3@11 g3@2 f3@3", AC: "eb3", AD: "g3 b3", AE: "c4 f3", AF: "d3 g3", AG: "ab3 f3", AH: "c3", AI: "g3 bb3",
  AJ: "a3", AK: "ab3", AL: "eb4@5 ~@3 eb4@5 ~@3", AM: "eb4@5 ~@11", AN: "f3", AO: "d3", AP: "eb3 g3",
  AQ: "[f3@21 g3@5 ~ f3@5]/2", AR: "[eb3@8 f3@13 f3@5 ~ g3@5]/2", AS: "ab3@5 g3@5 ~ f3@5", AT: "eb3@5 d3@11",
  AU: "g3@5 a3@5 ~ bb3@5", AV: "c4@3 bb3@2 g3@5 ~ f3@5", AW: "g3 a3", AX: "b3 c4", AY: "d4 eb4", AZ: "d4 c4",
  BA: "d4 b3", BB: "eb4 d4", BC: "c4 bb3", BD: "ab3 g3", BE: "f3@11 bb3@2 ab3@3", BF: "g3@5 ab3@5 ~ bb3@5",
  BG: "d4@3 eb4@2 d4@3 c4@3 d4@5", BH: "b3", BI: "[g3@21 ~@3 d3@3 eb3@2 f3@3]/2", BJ: "g3@3 f3@2 eb3@3 d3@3 c3@2 d3@3",
  BK: "eb3@8 d3@3 c3@5", BL: "b2@5 a2@5 ~ b2@5", BM: "c3/2",
})).s("gm_trombone").gain(0.3)

// bass · tuba · "B♭ Tuba"
const bass = note(`<
  ~@8 A@2 ~@6 B C D E F G H I J C D E F G H K L ~@11 M N O P ~ Q R Q R S O T U V P V N W@2 X@2 Y Z AA V P AB N S V AA C
  D E F G H I J C D E F G H K L ~@9 AC AD@2 AE@2 AF AG Q R Q S@2 O T U ~@4 AH@4 AI@2 X@2 Y Z AJ AK AL O AM AN AO AP AJ
  AK AL O AM AN AO AP AJ AK AL O AM AN AO AP AJ AK AL O AM AN AO AP AQ@2 ~@7 A@2 ~@6 S
>`.pickRestart({
  A: "g2@3 ~@2 g2@3 ~@3 g2@3 ~@2", B: "g1@5 a1@5 ~ b1@5", C: "c2@3 ~@5 c2@3 ~@5", D: "c2@3 ~@5 bb1@3 c2@2 d2@3",
  E: "eb2@3 ~@5 eb2@3 ~@5", F: "eb2@3 ~@8 eb2@2 g2@3", G: "f2@3 ~@5 f2@3 ~@5", H: "f2@3 ~@5 c2@3 d2@2 eb2@3",
  I: "f2@5 eb2@5 ~ d2@5", J: "c2@5 b1@5 ~ g1@5", K: "f2@5 eb2@5 ~ d3@5", L: "c3@5 b2@5 ~ g2@5", M: "~@5 d3@5 ~ g2@5",
  N: "f2", O: "eb2@5 f2@5 ~ g2@5", P: "ab2", Q: "c2@8 c2@3 ~@2 c2@3", R: "c2@8 ~@3 c2@2 c2@3", S: "c2", T: "bb1",
  U: "ab1", V: "g2", W: "[c2@21 eb2@3 f2@3 g2@5]/2", X: "c3/2", Y: "c2@5 ~@3 c2@5 ~@3", Z: "c2@5 ~@11", AA: "c3",
  AB: "eb2", AC: "c2@5 eb2@5 ~ g2@5", AD: "[f2@21 f2@5 ~ g2@5]/2", AE: "[ab2@21 f2@5 ~ g2@5]/2",
  AF: "ab2@5 g2@5 ~ f2@5", AG: "eb2@5 d2@11", AH: "g2/4", AI: "c2/2", AJ: "c3@11 c3@2 bb2@3", AK: "ab2@11 f2@5",
  AL: "bb2", AM: "ab2@8 g2@3 f2@2 eb2@3", AN: "d2@5 eb3@5 ~ ab2@5", AO: "g2 d3", AP: "c2@3 g2@2 e3@5 ~ d3@5",
  AQ: "[c3@21 ~@11]/2",
})).s("gm_tuba").gain(0.4)

stack(trumpet, french_horn, trombone, bass)