Strudelify

Frosty the Snowman

Steve Nelson and Jack Rollins

KeyC majorTempo170 bpm
0:00/0:00
// Frosty the Snowman — Steve Nelson and Jack Rollins
// 170 bpm, 2/2, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5903327; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(170/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 · oboe
const oboe = note(`<
  A B C D E F G H I J K L E F G H I M N O P Q R S T U V W E F G H I M N O X Y Z@2 AA AB AC AD AE AF K AG K AH AI O P Q R
  S T U V AJ E F G H I M N O AK AL AM AN AO AP AQ AR
>`.pickRestart({
  A: "g4!3 ~ g4 ~ g4 ~", B: "a4@2 g4 ~ g4@2 ~@2 g4@2 ~@2 g4@2 ~@2", C: "a4@2 g4 ~ a4@2 g4 ~", D: "a4@2 g4 ~@5",
  E: "~@2 e4 ~@3 c4 ~", F: "~@2 g4 ~@3 g4 ~", G: "~@2 a4 ~@3 f4 ~", H: "~@2 e4 ~@3 b4 ~", I: "~@2 a4 ~@3 a4 ~",
  J: "~@2 c5 ~@3 g4 ~", K: "~@2 f4 ~@3 f4 ~", L: "~@2 e4 ~@3 f4 ~", M: "~@2 g4 ~@3 e4 ~", N: "~@2 f4 ~@3 d4 ~",
  O: "c4@3 ~", P: "a4 f4", Q: "e4 g4", R: "f4 e4", S: "c4", T: "b3 d4", U: "g4 f4", V: "g4 f#4", W: "d4",
  X: "g4@4 e4@3 f4", Y: "g4@2 c5@4 b4 c5", Z: "[d5@2 c5@2 b4@2 a4 g4@7 b4 c5]/2", AA: "d5@2 c5@2 b4@2 a4!2",
  AB: "g4 c5@2 e4@3 g4 a4", AC: "g4 f4 e4 f4", AD: "g4@3 ~", AE: "~@2 c4 ~@3 c4 ~", AF: "~@2 e4 ~@3 e4 ~",
  AG: "~@2 c4 ~@3 g4 ~", AH: "~@2 e4 ~@3 c#4 ~", AI: "~@2 c4 ~@3 b3 ~", AJ: "d4 ~@3 d4@4", AK: "e4!3 ~ e4 ~ e4 ~",
  AL: "f4 e4!2 ~ e4 ~ e4 ~", AM: "f4 e4 c4 e4", AN: "f4", AO: "f4!3 ~ f4 ~ f4 ~", AP: "g4 f4!2 ~ f4 ~ f4 ~",
  AQ: "f4!3 ~ g4 ~ a4 ~", AR: "g4 ~",
})).s("gm_oboe").gain(0.25)

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  A B C D A E F G F H I J A E F G F K J L M N O P Q R S T A E F G F K J L A E F G F H I J U V W@2 X Y Z AA M N O P Q R S
  AB A E F G F K J L AC AD AE P AF AG AH AI
>`.pickRestart({
  A: "~@2 c4 ~@3 c4 ~", B: "~@2 a#3 ~@3 a#3 ~", C: "b3 a#3", D: "b3 ~", E: "~@2 e4 ~@3 e4 ~", F: "~@2 f4 ~@3 f4 ~",
  G: "~@2 c4 ~@3 g4 ~", H: "~@2 g4 ~@3 e4 ~", I: "~@2 b3 ~@3 b3 ~", J: "~@2 c4 ~@3 b3 ~", K: "~@2 e4 ~@3 c#4 ~",
  L: "g3@3 ~", M: "f4 c4", N: "c4 e4", O: "c4 b3", P: "g3", Q: "g3 b3", R: "d4!2", S: "e4 c4", T: "b3",
  U: "g4@4 e4@3 f4", V: "g4@2 c5@4 b4 c5", W: "[d5@2 c5@2 b4@2 a4 g4@7 b4 c5]/2", X: "d5@2 c5@2 b4@2 a4!2",
  Y: "g4 c5@2 e4@3 g4 a4", Z: "g4 f4 e4 d4", AA: "c4@3 ~", AB: "b3 ~@3 b3@4", AC: "c4!3 ~ c4 ~ c4 ~",
  AD: "d4 c4!2 ~ c4 ~ c4 ~", AE: "d4 c4 a3 c4", AF: "b3!3 ~ b3 ~ b3 ~", AG: "c4 b3!2 ~ b3 ~ b3 ~",
  AH: "d4!3 ~ e4 ~ d4 ~", AI: "e4 ~",
})).s("gm_clarinet").gain(0.25)

// other · french horn · "Horn in F"
const french_horn = note(`<
  A@2 ~ B C D E F G H C@3 D E F G I J K L M N O P Q R S C D E F G I J T C D E F G H C@3 D E F G I J T U V W X Y Z AA AB
  C D E F G I J T AC@3 AD AE AF@2 AG
>`.pickRestart({
  A: "~@4 g3 ~@3", B: "~@2 g4@2 g3 ~@3", C: "~@2 g3 ~@3 g3 ~", D: "~ a#3", E: "a3 f3", F: "~@2 g3 ~@3 e4 ~",
  G: "~@2 c4 ~@3 c4 ~", H: "~@2 e4 ~@3 c4 ~", I: "~@2 c4 ~@3 a3 ~", J: "~@2 a3 ~@3 f3 ~", K: "e3@3 d4", L: "a4!2 c5!2",
  M: "b4 a4 g4 e4", N: "f4 a4 g4 f4", O: "e4@3 e4", P: "d4!2 g4!2", Q: "b4@2 b4@2 d5@3 b4", R: "d5 c5 b4 a4", S: "g4",
  T: "e3@3 ~", U: "f4 c4", V: "e4 g3", W: "d4 g3", X: "c4 g3", Y: "d4 d3", Z: "d4 g#4", AA: "a4 d4", AB: "g4 ~@3 g3@4",
  AC: "~@2 c4 ~@3 g3 ~", AD: "~@2 b3 ~@3 g3 ~", AE: "d4 ~@5 g3 ~", AF: "~@2 d4 ~@3 g3 ~", AG: "c4@4 c3 ~@3",
})).s("gm_french_horn").gain(0.25)

// other · bassoon
const bassoon = note(`<
  A B C D E F G H G I J K E F G H G I L M N O J P Q R S T E F G H G I L M E F G H G I J K E F G H G I L U V W X Y Z AA
  AB AC E F G H G I L M E@3 AD AE L@2 AF
>`.pickRestart({
  A: "e3", B: "c#3", C: "d3 c#3", D: "d3@4 g2 ~@3", E: "c3 ~ g2 ~", F: "c3 ~ a#2 ~", G: "f3 ~ c3 ~", H: "e3 ~ c3 ~",
  I: "e3 ~ g2 ~", J: "d3 g2", K: "e3 d3", L: "d3 ~ g2 ~", M: "c3 g2 c2 ~", N: "f3 c3", O: "e3 g2", P: "c3 g2",
  Q: "d3 d2", R: "d3 g#3", S: "a3 d3", T: "g3 g2", U: "c3 g2 c2 d3", V: "a3!2 c4!2", W: "b3 a3 g3 e3", X: "f3 a3 g3 f3",
  Y: "e3@3 e3", Z: "d3!2 g3!2", AA: "b3@2 b3@2 d4@2 d4 b3", AB: "d4 c4 b3 a3", AC: "g3 ~@7", AD: "b2 ~ g2 ~",
  AE: "~ d3 g2 ~", AF: "c3 ~ g2 ~ c2 ~@3",
})).s("gm_bassoon").gain(0.3)

stack(oboe, clarinet, french_horn, bassoon)