Strudelify

A Little Light Snowfall

Kazumi Totakaarr. Zac Rawls

KeyB♭ majorTempo91 bpm
0:00/0:00
// A Little Light Snowfall — Kazumi Totakaarr. Zac Rawls
// 91 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 9 "Double Bass" named as a bass, played on acoustic bass (its contrabass patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5834937; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 64 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(91/4)

// 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.

// other · flute
const flute = note(`<
  ~@3 A B A B ~ C D E F@2 G F H I J K L M N O P Q R S ~@3 T U V U W X Y X Z AA AB F@2 G F H I J K L M N O P Q R S AC AD
  AC AE AF@3
>`.pickRestart({
  A: "d5 eb5 f5@2 f5@2 bb5@2 f5@4 ~@2 eb5@2", B: "d5 bb4 c5 f5 d5 bb4 c5@2", C: "d6 c6 d6 eb6 f6 d6 bb5 f5",
  D: "g5 a5 bb5 ~ a5 bb5 c6 ~", E: "eb6 d6 c6 bb5 bb5@2 a5 ~", F: "e5 ~ f5 ~ e5 ~ f5 ~",
  G: "e5@2 ~@2 f5@2 ~@2 e5@2 ~@2 f5@2 c5 d5", H: "a4 b4 c5 ~ b4 c5 d5 ~", I: "e5 d5 e5 f5 g5 e5 c5 g4",
  J: "[a4,c5] b4 [a4,c5] ~ b4 c5 d5 ~", K: "f5 e5 d5 c5 c5@2 b4@2", L: "e4@3 g4 a4@3 ~", M: "d4@3 g4 e4@3 ~",
  N: "f4@4 e4@3 c5", O: "d5@3 c5 b4@4, g4@11 ~@5", P: "[g4,g5]@3 bb4 c5@3 ~", Q: "[f4,f5]@6 bb4@2 g4@6 g4 bb4",
  R: "c5 bb4 ab4 g4 ab4 g4 f4 eb4", S: "[db4,gb4]@3 ~ [eb4,ab4]@4", T: "~@7 g5", U: "ab5 g5 f5 eb5 eb5@2 bb4@2",
  V: "ab4@3 c5 bb4@3 g5", W: "db5@4 eb5@3 ~", X: "g4 eb4 f4 bb4 g4 eb4 f4@2",
  Y: "c4 d4 eb4@2 eb4@2 ~@2 d4 eb4 f4 g4 bb4@2 bb4@2", Z: "c4 d4 eb4@2 eb4@2 ~@2 d4 eb4 f4@2 f4@2 g4@2",
  AA: "g4 bb4 ab4 bb4 g4 bb4 ab4 bb4", AB: "g4 bb4 ab4 bb4 g4@2 d5@2", AC: "a4 f4 g4 c5 a4 f4 g4@2",
  AD: "d4 e4 f4@2 f4@2 ~@2 e4 f4 g4 a4 g4 a4 bb4 c5", AE: "d4 e4 f4@2 f4@2 ~@2 e4 f4 g4@2 g4@2 a4@2",
  AF: "[a4@2 c5@2 bb4@2 c5@2 a4@2 c5@2 ~ bb4@2 c5@2 a4@2 ~ c5@2 bb4@2 ~ c5@2 f5@10 ~@11]/3",
})).s("gm_flute").gain(0.23)

// other · bassoon
const bassoon = note(`<
  ~ A B C D C D E F G H I@4 J K L M N O P Q R S T U V W V X ~@3 Y Z AA Z AB AC AD I@4 J K L M N O P Q R S T U AE AF AE
  AF ~ AG@2
>`.pickRestart({
  A: "bb2 ~ bb2 ~ bb2 ~ bb2 ~", B: "bb2 ~ bb2 ~ bb2 ~ f3@2", C: "bb2 ~ f3 ~ bb2 ~ f3 ~", D: "bb2 ~ f3 ~ bb2 ~ c3 ~",
  E: "eb3!3 ~ f3!3 ~", F: "bb2@2 ~@2 f2@2 ~ d3 bb2 ~ bb2@2 f2@2 bb2@2", G: "eb3@3 ~ f3@3 ~", H: "c3 ~ c3 ~@5",
  I: "c3 ~ f3 ~ c3 ~ f3 ~", J: "f3 ~@2 a3 g3 ~@2 g3", K: "c3 ~ c2 ~ c3 ~ c2 ~", L: "f3 ~@2 f3 g3 ~@2 g3",
  M: "bb3 ~ bb3 ~ g3 ~ g3 ~", N: "c3 g2", O: "g2 c3", P: "f2@4 c3@3 c3", Q: "b2@3 ~", R: "eb2 ab2", S: "bb2 eb2",
  T: "eb3 ab3 c4 ab3 eb3 ab3 c4 ab3", U: "gb3 eb3", V: "g3 eb3 f3 bb3 g3 eb3 f3@2",
  W: "c3 d3 eb3@2 eb3@2 ~@2 d3 eb3 f3 g3 bb3@2 bb3@2", X: "c3 d3 eb3@2 eb3@2 ~@2 d3 eb3 f3@2 f3@2 ~@2",
  Y: "db3@4 bb2@3 bb3", Z: "eb3 bb2 eb3!2", AA: "ab2!2 bb2!2", AB: "ab2@2 ab2@2 bb2@2 bb2 eb3",
  AC: "g3 bb3 ab3 bb3 g3 bb3 ab3 bb3", AD: "g3 bb3 ab3 bb3 g3@2 b3@2", AE: "f2 c3 f2 bb2", AF: "bb2!2 c3!2",
  AG: "[~ a3@3 c4@2 bb3@3 c4@2 f3@10 ~@11]/2",
})).s("gm_bassoon").gain(0.25)

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~@3 A B A B ~@2 C D E F E F ~@4 G H I J K L M N O P O Q ~@3 R O P O S T U E F E F ~@4 G H I J K L M N V W V X Y@3
>`.pickRestart({
  A: "d4 eb4 f4@2 f4@2 bb4@2 f4@4 ~@2 eb4@2", B: "d4 bb3 c4 f4 d4 bb3 c4@2", C: "g4 a4 bb4 ~ a4 bb4 c5 ~",
  D: "eb5 d5 c5 bb4 bb4@2 a4 ~", E: "e4 f4 g4@2 g4@2 c5@2 g4@4 ~@2 f4@2", F: "e4 c4 d4 g4 e4 c4 d4@2", G: "g3 f3",
  H: "d3 g3", I: "a3@4 g3@3 g3", J: "g3@3 ~", K: "bb3 ab3", L: "bb3 g3", M: "eb3 ab3 c4 ab3 eb3 ab3 c4 ab3",
  N: "db4 eb4", O: "g4 eb4 f4 bb4 g4 eb4 f4@2", P: "ab3 d4 eb4@2 eb4@2 ~@2 d4 eb4 f4 g4 f4@2 g4@2",
  Q: "ab3 d4 eb4@2 eb4@2 ~@2 d4 eb4 f4@2 f4@2 ~@2", R: "db4@4 eb4@3 bb4",
  S: "ab3 d4 eb4@2 eb4@2 ~@2 d4 eb4 f4@2 f4@2 g3@2", T: "g3 bb3 ab3 bb3 g3 bb3 ab3 bb3", U: "g3 bb3 ab3 bb3 g3@2 d4@2",
  V: "a4 f4 g4 c5 a4 f4 g4@2", W: "d4 e4 f4@2 f4@2 ~@2 e4 f4 g4 a4 c5@2 c5@2",
  X: "d4 e4 f4@2 f4@2 ~@2 e4 f4 g4@2 g4@2 a4@2",
  Y: "[a3@2 c4@2 bb3@2 c4@2 a3@2 c4@2 ~ bb3@2 c4@2 a3@3 c4@2 bb3@3 c4@2 a3@10 ~@11]/3",
})).s("gm_alto_sax").gain(0.25)

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  A B C D ~ E ~@5 F G F G ~@9 H I J K L K M ~@3 N K L K M ~@2 F G F G ~@9 H I J O P O Q ~@3
>`.pickRestart({
  A: "~@7 f4", B: "bb4 f4 c5 f5 d5 bb4 c5 f4", C: "bb4@2 f4@2 c5@2 f5@2 d5@4 eb5 d5 f5 g5",
  D: "d5@2 ~@8 bb4 a4 bb4 ~@3", E: "~@10 bb4 a4 bb4 ~@3", F: "e5 f5 g5@2 g5@2 c6@2 g5@4 ~@2 f5@2",
  G: "e5 c5 d5 g5 e5 c5 d5@2", H: "~@14 ab4 bb4", I: "c5 bb4 ab4 g4 ab4 g4 f4 eb4", J: "db5 eb5",
  K: "g5 eb5 f5 bb5 g5 eb5 f5@2", L: "c5 d5 eb5@2 eb5@2 ~@2 d5 eb5 f5 g5 bb5@2 bb5@2",
  M: "c5 d5 eb5@2 eb5@2 ~@2 d5 eb5 f5@2 f5@2 ~@2", N: "ab4@4 bb4@3 bb4", O: "a4 f4 g4 c5 a4 f4 g4@2",
  P: "bb3 e4 f4@2 f4@2 ~@2 e4 f4 g4 a4 g4@2 a4@2", Q: "bb3 e4 f4@2 f4@2 ~@2 e4 f4 g4@2 g4@2 a3@2",
})).s("gm_trumpet").gain(0.14)

// other · trumpet · "B♭ Trumpet"
const trumpet_2 = note(`<
  A B C D ~ E ~@5 F G F G ~@11 H I J I K ~@3 L I J I K ~@2 F G F G ~@11 H M N M O ~@3
>`.pickRestart({
  A: "~@7 f4", B: "bb4 f4 c5 f5 d5 bb4 c5 f4", C: "bb4@2 f4@2 c5@2 f5@2 d5@4 bb4 d5 c5 a4",
  D: "bb4@2 ~@8 bb4 a4 bb4 ~@3", E: "~@10 bb4 a4 bb4 ~@3", F: "e4 f4 g4@2 g4@2 c5@2 g4@4 ~@2 f4@2",
  G: "e4 c4 d4 g4 e4 c4 d4@2", H: "gb4 bb4", I: "g4 eb4 f4 bb4 g4 eb4 f4@2",
  J: "ab3 d4 eb4@2 eb4@2 ~@2 d4 eb4 f4 g4 f4@2 g4@2", K: "ab3 d4 eb4@2 eb4@2 ~@2 d4 eb4 f4@2 f4@2 ~@2",
  L: "db4@4 eb4@3 d4", M: "a5 f5 g5 c6 a5 f5 g5@2", N: "d5 e5 f5@2 f5@2 ~@2 e5 f5 g5 a5 c6@2 c6@2",
  O: "d5 e5 f5@2 f5@2 ~@2 e5 f5 g5@2 g5@2 ~@2",
})).s("gm_trumpet").gain(0.14)

// other · french horn · "Horn in F"
const french_horn = note(`<
  ~ A B C D C E ~@4 F G F G ~@4 H I J K L M ~ N O P O P Q R S T U V U W ~@2 F G F G ~@4 H I J K L M ~ N X Y X Z AA@3
>`.pickRestart({
  A: "bb3 ~ bb3 ~ bb3 ~ bb3 ~", B: "bb3 ~ bb3 ~ bb3 ~ c4@2", C: "f4 ~ eb4 ~ f4 ~ eb4 ~", D: "f4 ~ eb4 ~ f4 ~ c4 ~",
  E: "f4 ~ eb4 ~ f4 ~ bb3 ~", F: "e4 f4 g4@2 g4@2 c5@2 g4@4 ~@2 f4@2", G: "e4 c4 d4 g4 e4 c4 d4@2", H: "e3 b3",
  I: "b3 g3", J: "f3@4 e3@3 e3", K: "d3@3 ~", L: "g3 eb3", M: "f3 eb3", N: "gb3 eb4", O: "bb3 ~ eb3 ~ bb3 ~ ab3 ~",
  P: "ab3 ~ ab3 ~ bb3 ~ bb3 ~", Q: "ab3 bb3 ab3 c3", R: "ab3@3 g3 eb3@3 g3", S: "ab3 eb3!4 ~ eb3@2", T: "ab2 bb2",
  U: "g3 eb3 f3 bb3 g3 eb3 f3@2", V: "c3 d3 eb3@2 eb3@2 ~@2 d3 eb3 f3 g3 bb3@2 bb3@2",
  W: "c3 d3 eb3@2 eb3@2 ~@2 d3 eb3 f3@2 f3@2 ~@2", X: "a3 f3 g3 c4 a3 f3 g3@2",
  Y: "bb2 e3 f3@2 f3@2 ~@2 e3 f3 g3 a3 g3@2 a3@2", Z: "bb2 e3 f3@2 f3@2 ~@2 e3 f3 g3@2 g3@2 ~@2",
  AA: "[a3@2 c4@2 bb3@2 c4@2 a3@2 c4@2 ~ bb3@2 c4@2 a3@3 c4@2 bb3@3 c4@2 f3@10 ~@11]/3",
})).s("gm_french_horn").gain(0.25)

// other · trombone
const trombone = note(`<
  ~@7 A B C D E@4 ~@4 F G H I J K ~ L M N M N O P Q R S T S U V W E@4 ~@4 F G H I J K ~ L X Y X Z ~@3
>`.pickRestart({
  A: "eb3!3 ~ f3!3 ~", B: "bb2@2 ~@2 f2@2 ~ d3 bb2 ~ bb2@2 f2@2 bb2@2", C: "eb3@3 ~ f3@3 ~", D: "ab3 ~ ab3 ~@5",
  E: "c3 ~ f3 ~ c3 ~ f3 ~", F: "g3 f3", G: "d3 c3", H: "a3@4 g3@3 g3", I: "g3@3 ~", J: "eb3 ab3", K: "d3 g3",
  L: "gb3 bb3", M: "eb3 ~ bb2 ~ eb3 ~ c3 ~", N: "eb3 ~ eb3 ~ f3 ~ f3 ~", O: "eb4 f4 eb4 bb3", P: "ab3@3 c4 bb3@3 d4",
  Q: "eb4 ab3!3 eb3 ~ eb4@2", R: "db3 eb3", S: "eb3 bb2 eb3!2", T: "ab2!2 bb2!2", U: "ab2@2 ab2@2 bb2@2 bb2 eb3",
  V: "eb3 ~@6 eb3", W: "eb3 ~@5 gb3@2", X: "a3 f3 g3 c4 a3 f3 g3@2", Y: "d3 e3 f3@2 f3@2 ~@2 e3 f3 g3 a3 c4@2 c4@2",
  Z: "d3 e3 f3@2 f3@2 ~@2 e3 f3 g3@2 g3@2 ~@2",
})).s("gm_trombone").gain(0.25)

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

// other · glockenspiel
const glockenspiel = note(`<
  A B C D ~ E ~ F G F H I J I J K L K M N O P Q R S T U ~@3 V W X Y ~ Z AA Z AB AC AD I J I J K L K M N O P Q R S T U AE
  AF AE AG ~@3
>`.pickRestart({
  A: "~@7 f6", B: "bb6 f6 c7 f7 d7 bb6 c7 f6", C: "bb6@2 f6@2 c7@2 f7@2 d7@4 eb7 d7 f7 g7",
  D: "bb7@2 ~@8 bb7 a7 bb7@2 ~@2", E: "~@10 bb7 a7 bb7@2 ~@2", F: "g6 a6 bb6 ~ a6 bb6 c7 ~",
  G: "d7 c7 d7 eb7 f7 d7 bb6 f6", H: "eb7 d7 c7 bb6 bb6@2 a6 ~", I: "e6 f6 g6@2 g6@2 c7@2 g6@4 ~@2 f6@2",
  J: "e6@2 c6@2 d6@2 g6@2 e6 g6 a6 b6 c7 d7 e7 f7", K: "a6 b6 c7 ~ b6 c7 d7 ~", L: "e7 d7 e7 f7 g7 e7 c7 g6",
  M: "f7@2 e7@2 d7@2 c7@2 c7@2 g7 e7 c7 a6 g6 e6", N: "c6 d6 e6 g6 c6 d6 e6 g6 c6 d6 e6 a6 c6 d6 e6 a6",
  O: "b5 d6 e6 g6 b5 d6 e6 g6 c6 d6 e6 g6 c6 d6 e6 g6", P: "a5 c6 e6 a6 a5 c6 e6 a6 c6 d6 e6 g6 c6 d6 e6 g6",
  Q: "b5 c6 e6 g6 b5 c6 e6 g6 b5 c6 e6 g6 a6 c7 d7 e7", R: "eb6 f6 g6 bb6 eb6 f6 g6 bb6 eb6 f6 ab6@2 eb6 f6 ab6@2",
  S: "f6 d6@2 bb6 c6 d6 ab6 bb6 eb6 f6 g6 bb6 eb6 f6 ab6 bb6", T: "c7 bb6 ab6 g6 ab6 g6 f6 eb6", U: "db6@3 ~@5",
  V: "~@12 f6 ab6 g6 d6", W: "ab6@2 g6 bb6 eb7@2 bb6@2 ab6@2 ab6 bb6 c7@2 bb6@2", X: "ab6@3 g6 eb6@3 g6",
  Y: "ab6@2 g6@2 f6@2 eb6@2 g6@2 c7 d7 eb7@4", Z: "g7 eb7 f7 bb7 g7 eb7 f7@2",
  AA: "c7 d7 eb7@2 eb7@2 ~@2 d7 eb7 f7 g7 bb7@2 bb7@2", AB: "c7 d7 eb7@2 eb7@2 ~@2 d7 eb7 f7@2 f7@2 g7@2",
  AC: "g7 bb7 ab7 bb7 g7 bb7 ab7 bb7", AD: "g7 bb7 ab7 bb7 g7@2 ~@2", AE: "a6 f6 g6 c7 a6 f6 g6@2",
  AF: "d6 e6 f6@2 f6@2 ~@2 e6 f6 g6 a6 g6 a6 bb6 c7", AG: "d6 e6 f6@2 f6@2 ~@2 e6 f6 g6@2 g6@2 a6@2",
})).s("gm_glockenspiel").gain(0.3)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~ A@16 ~@9 B A@4 ~@3 C A@6 ~@15 B A@4 D E ~>".pickRestart({
  A: "x!8", B: "~@4 x!4", C: "~@6 x!2", D: "x ~ x ~ x ~ x ~ x ~ x ~@2 x ~ x", E: "~ x ~@2 x ~ x ~@2 x ~@6",
})).gain(0.3)

stack(flute, bassoon, alto_sax, trumpet, trumpet_2, french_horn, trombone, bass, glockenspiel, jingle_bells)