Strudelify

Christmas Yee in Three

Rory Mosher

KeyB♭ majorTempo155 bpm
0:00/0:00
// Christmas Yee in Three — Rory Mosher
// 155 bpm, 3/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5926253; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 151 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(155/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · trumpet
const trumpet = note(`<
  A B C B A B C B A B C B A B C B A B C B A B D E ~@16 F G H I E J K L M N O K P Q R S T U V W X Y Z AA AB AC AD AE AF
  AG AH AI AJ ~@15 AJ ~@31 F G H I E J K L M N O K P Q R E AK A ~@9 AL AM ~ AN
>`.pickRestart({
  A: "~@3 f5 ~@7 f5@5", B: "~@3 g5 ~@7 g5@5", C: "~@3 a5 ~@7 a5@5", D: "d5@3 bb4@2 c5@3 ~ d5@2 eb5@3 e5@2", E: "f5 ~@7",
  F: "~@5 bb4@11", G: "~@5 d5@11", H: "~@5 eb5@11", I: "~@5 f5@11", J: "~@3 d5@2 ~@11", K: "eb5", L: "c5 ~@7",
  M: "~@3 g4 ~@7 g4@5", N: "~@3 c5 ~@7 c5@5", O: "f5", P: "d5@3 ~@13", Q: "d5@8 ~ c5@7", R: "d5",
  S: "f5@2 ~@3 g4@4 ~@2 a4@4 ~", T: "bb4@7 d4", U: "g4@5 ~@9 d4@2", V: "c4@3 d4@2 eb4@3 ~ e4@2 f4@3 f3 ~", W: "~@7 d4",
  X: "c4@3 d4@2 ~@4 eb4@2 ~@3 eb4@2", Y: "d4@3 eb4@2 ~@4 f4@2 ~@3 f4@2", Z: "eb4@3 f4@2 ~@4 g4@2 ~@3 g4@2",
  AA: "bb4@3 g4@2 ~@4 bb4@2 ~@3 bb4@2", AB: "d5@5 d5@5 ~@6", AC: "bb4@4 ~@7 a4@3 bb4@2",
  AD: "c5@3 d5@2 eb5@3 ~ f5@2 eb5@3 d5@2", AE: "c5@3 bb4@2 a4@3 ~ g4@2 a4@3 g4@2", AF: "f4@11 d4@5",
  AG: "c4@5 d4@5 ~ eb4@5", AH: "f4@3 g4@2 a4@2 bb4@2 c5@2 d5@3 eb5@2", AI: "f5@2 ~@7 g5@7", AJ: "f5@3 ~@13",
  AK: "~@3 d5 ~@7 d5@5", AL: "~@11 eb5@5", AM: "bb5 ~@3", AN: "c5",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · soft notes
const trumpet_soft = note("<~@138 A B C D A B C D A E ~@3>".pickRestart({
  A: "~@3 g5 ~@7 g5@5", B: "~@3 f5 ~@7 eb5@5", C: "~@3 d5 ~@7 d5@5", D: "~@3 f5 ~@7 f5@5", E: "~@3 f5 ~@12",
})).s("gm_trumpet").gain(0.15)

// other · trombone
const trombone = note(`<
  A B C B A B C B A B C B A B C B A B C B A B D E ~@16 F G H I J K L M N B O P Q R P S T U V W X Y Z AA AB AC AD AE AF
  AG AH AI Q ~@15 Q ~@31 F G H I J K L M N B O P Q R P AJ A B C AK A ~@6 AL AM ~ AN
>`.pickRestart({
  A: "~@3 bb3 ~@7 bb3@5", B: "~@3 c4 ~@7 c4@5", C: "~@3 d4 ~@7 d4@5", D: "d4@3 bb3@2 c4@3 ~ d4@2 eb4@3 e4@2",
  E: "f4 ~@7", F: "~@5 f3@11", G: "~@5 a3@11", H: "~@5 g3@11", I: "~@5 c4@11", J: "eb4 ~@7", K: "~@3 g3@2 ~@11",
  L: "g3", M: "f3 ~@7", N: "~@3 g3 ~@7 g3@5", O: "d4", P: "c4", Q: "bb3@3 ~@13", R: "bb3@8 ~ d4@7",
  S: "a3@2 ~@3 g3@4 ~@2 a3@4 ~", T: "bb3@7 d3", U: "g3@5 ~@9 d3@2", V: "c3@3 d3@2 eb3@3 ~ e3@2 f3@3 f2 ~", W: "~@7 d3",
  X: "c3@3 d3@2 ~@4 eb3@2 ~@3 eb3@2", Y: "d3@3 eb3@2 ~@4 f3@2 ~@3 f3@2", Z: "eb3@3 f3@2 ~@4 g3@2 ~@3 g3@2",
  AA: "bb3@3 g3@2 ~@4 bb3@2 ~@3 bb3@2", AB: "d4@5 d4@5 ~@6", AC: "bb3@4 ~@7 a3@3 bb3@2",
  AD: "c4@3 d4@2 eb4@3 ~ f4@2 g4@3 d4@2", AE: "eb4@3 d4@2 c4@3 ~ bb3@2 a3@3 g3@2", AF: "a3@11 g3@5",
  AG: "c3@5 d3@5 ~ eb3@5", AH: "f3@3 g3@2 a3@2 bb3@2 c4@2 d4@3 eb4@2", AI: "f4@2 ~@7 f3@7", AJ: "a3 ~@7",
  AK: "~@3 c4 ~@7 a3@5", AL: "~@11 a3@5", AM: "d4 ~@3", AN: "f3",
})).s("gm_trombone").gain(0.25)

// other · trombone · soft notes
const trombone_soft = note("<~@141 A B C D A B E ~@3>".pickRestart({
  A: "~@3 c4 ~@7 c4@5", B: "~@3 d4 ~@7 d4@5", C: "~@3 c4 ~@7 a3@5", D: "~@3 bb3 ~@7 bb3@5", E: "~@3 c4 ~@12",
})).s("gm_trombone").gain(0.15)

// chords · piano
const piano = note(`<
  A B C D A B C D A B C D A B C D A B C D A B E ~ F G H I J K L M N O P Q N O R S F G H I J K L M N O P Q N O R S F G H
  I J K L M N O P Q N O R S F G H I J K L M N O P Q N O R S F G H I J K L M N O P Q N O R S F G H I J K L M N O P Q N O
  R S F G H I J K L M N O P Q N O R S N O R S N O R S N O R S ~@2 T
>`.pickRestart({
  A: "[bb2,d3,bb4,d5,f5]", B: "[c3,eb3,c5,eb5,g5]", C: "[d3,f3,d5,f5,a5]", D: "[c3,eb3,c5,eb5,g5]@15 ~",
  E: "[d3,f3,d5,f5,a5]@15 ~", F: "[a3,c4,d4,f4]@15 ~", G: "[c4,f4,gb4,bb4]@15 ~", H: "[bb3,eb4,f4,a4]@15 ~",
  I: "[f3,b3,eb4,g4]@15 ~", J: "[bb3,d4,eb4,g4]@15 ~", K: "[f3,b3,ab4,eb5]@15 ~", L: "[bb3,eb4,g4,d5]@15 ~",
  M: "[a3,eb4,g4,c5]@15 ~", N: "[d4,a4,c5,f5]@15 ~", O: "[db4,bb4,e5,a5]@15 ~", P: "[c4,g4,bb4,e5]@15 ~",
  Q: "[c4,f4,a4,e5]@15 ~", R: "[eb4,g4,bb4,c5]@15 ~", S: "[eb4,gb4,a4,d5]@15 ~", T: "[bb3,f4,a4,d5]@15 ~",
})).s("gm_piano").gain(0.4)

// bass · acoustic bass · "Bass"
const bass = note(`<
  A B C D E D F G A B C D E D F G A B C D E D H I J K L M L N O P Q R L S K L T U J K L M L N O P Q R L S K L T L J K L
  M L N O P Q R L S K L T U J K L M L N O P Q R L S K L T L J K L M L N O P Q R L S K L T L J K L M L N O P Q R L S K L
  T U J K L M L N O P Q R L S K L T L K L T L K L T L K L T L V W X
>`.pickRestart({
  A: "bb2@11 a2@5", B: "g2@11 f2@5", C: "d2@11 f2@5", D: "c2@11 f2@5", E: "bb1@11 d2@5", F: "d2@11 g2@5",
  G: "f2@11 a2@5", H: "d2@5 eb2@5 ~ g2@5", I: "~@3 f1@13", J: "bb1@5 c2@5 ~ db2@5", K: "d2@5 c2@5 ~ bb1@5",
  L: "c2@5 d2@5 ~ eb2@5", M: "g2@5 eb2@5 ~ c2@5", N: "d2@5 eb2@5 ~ f2@5", O: "eb2@5 f2@5 ~ g2@5",
  P: "a2@5 eb2@5 ~ g2@5", Q: "bb2@5 a2@5 ~ g2@5", R: "f2@5 eb2@5 ~ d2@5", S: "f2@5 a2@5 ~ f2@5", T: "f2@5 g2@5 ~ eb2@5",
  U: "d2@5 c2@5 ~ f2@5", V: "~@5 c2@3 ~ d2@2 eb2@3 e2@2", W: "f2@3 f1@7 ~ bb1@4 ~", X: "a1",
})).s("gm_acoustic_bass").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@148 x ~@2>").gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B C D B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A D ~@2
>`.pickRestart({
  A: "~@5 x ~@5 x ~@4", B: "~@3 x ~@7 x ~@4", C: "~@5 x ~@5 x ~@2 x ~", D: "x",
})).gain(0.25)

// drums · ride
const ride = s("rd").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A ~ B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A ~@3
>`.pickRestart({
  A: "x ~@4 x ~@3 x ~ x ~@4", B: "x ~@4 x ~@5 x ~@4",
})).gain(0.25)

stack(trumpet, trumpet_soft, trombone, trombone_soft, piano, bass, kick, snare, ride)

More by Rory Mosher