Strudelify
KeyG majorTempo120 bpm
0:00/0:00
// let it snow — adapted from Roger Friedman's version
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5901967; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 37 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · trumpet · "B♭ Trumpet"
const trumpet = note("<A B C D E ~ F G H I J K L M@2 N O ~@15 P Q R S T>".pickRestart({
  A: "~@9 c5@2 c5", B: "c6@2 c6 a#5@3 a5@3 g5@2 f5", C: "~@2 c5@4 ~@3 c5@2 c5", D: "g5@5 f5 g5@5 f5", E: "e5@2 c5 ~@9",
  F: "~ e5@2 d5", G: "c5!2 a#4 a4!2 g4", H: "f4 ~@3", I: "a#4@6 a#4@5 a4", J: "~ c4@2 ~", K: "b4 d5", L: "c5",
  M: "[a#4@2 a#4 a4@3 g4@3 f4@2 e4@4 ~@3 d5@6]/2", N: "c5 ~ g4 ~", O: "f4@3 ~", P: "~@3 a#4 a4@2", Q: "a4 g4",
  R: "g#4 g4 g#4 a#4 g#4 a#4", S: "c5@2 ~ a4@2 ~ c5@3 d5 d#5 e5", T: "f5 ~@3",
})).s("gm_trumpet").gain(0.25)

// other · trumpet · "B♭ Trumpet"
const trumpet_2 = note("<A B C D E ~ F G H I J K L M@2 N O ~@15 P Q R S T>".pickRestart({
  A: "~@9 c5@2 c5", B: "f5@2 f5 f5@3 e5@3 e5@2 d5", C: "~@2 a4@4 ~@3 c5@2 c5", D: "c5@5 c5 b4@5 b4", E: "f#4@2 g4 ~@9",
  F: "~ c5@2 a#4", G: "a4!2 g4 f#4!2 c#4", H: "d4 ~@3", I: "f4@6 e4@5 d4", J: "~ c4@2 ~", K: "g4 g#4", L: "a#4 a4",
  M: "[g4@2 g4 f4@3 e4@3 d4@2 d4@4 ~@3 b4@6]/2", N: "a#4 ~ e4 ~", O: "d4@3 ~", P: "~@3 c4 c#4 d4 f4@2 e4@4", Q: "f4 e4",
  R: "f4 d#4 f4 g4 f4 g4", S: "a4@2 ~ f4@2 ~ a4@3 a4@2 g4", T: "f4 ~@3",
})).s("gm_trumpet").gain(0.25)

// other · alto sax · "Alto Saxophone"
const alto_sax = note("<A B C D E F G H I J K L M N@2 O P ~@15 Q R S T I>".pickRestart({
  A: "~@9 c5@2 c5", B: "a#4@2 a#4 c5@3 a#4@3 a#4@2 a4", C: "~@2 g4@4 ~@3 c5@2 c5", D: "a4@5 a4 g#4@5 g4",
  E: "d#4@2 e4 ~@6 c4@3", F: "d4@2 d4 c4@3 a#3@3 a3@2 g3", G: "~ f#4@2 f#4", H: "f4 ~ c#4 ~", I: "c4 ~@3",
  J: "d4@6 c#4@5 c4", K: "~ c4@2 ~", L: "e4 f4", M: "g4 f#4", N: "[f4@2 f4 e4@3 d4@3 c4@2 a#3@4 ~@3 g#4@6]/2",
  O: "g4 ~ c#4 ~", P: "c4@3 ~", Q: "a3 a#3 b3 c4 c#4 d4 c#4@2 c4@4", R: "a#3 d4", S: "c#4 c4 c#4 d#4 c#4 d#4",
  T: "f4@2 ~ d4@2 ~ e4@3 e4@2 d4",
})).s("gm_alto_sax").gain(0.25)

stack(trumpet, trumpet_2, alto_sax)