Strudelify

santa claus is coming to town

John Frederick Coots

KeyD majorTempo120 bpm
0:00/0:00
// santa claus is coming to town — John Frederick Coots
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5868415; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 85 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. 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 · flute
const flute = note(`<
  A B C D E F G H I J K L E F G H I J K M N@2 O@2 P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP
  AQ ~@3 A B C D E F G H I J K M N@2 O@2 P Q R S T U V W X AR AS@3 ~
>`.pickRestart({
  A: "~@4 a5 ~ a5 ~", B: "a5 ~ a5 ~ a5 ~ a5 ~", C: "a5 ~@7", D: "~@12 a5@11 ~", E: "f#5@4 g5@2 a5@3 ~@3 a5@11 ~",
  F: "b5@4 c#6@2 d6@3 ~@3 d6@11 ~", G: "d5@4 e5@2 f#5@3 ~@3 f5@3 ~@3 f#5@3 ~@3", H: "g5@2 f#5 d#5@2 e5 ~@2 c#5@3 a4",
  I: "f#5 ~ a5 ~ d5 ~ f#5 ~", J: "e5@3 g5@3 ~@2 c#5@4", K: "d5@23 ~", L: "~@2 b4 c5@2 c#5 ~@2 a5@3 a5",
  M: "d5@4 e5@2 f5@4 f#5@2 ~@4 d6@5 ~ d6@2", N: "[e6@3 ~ e6@2 d6@3 ~@3 c#6@3 ~@3 d6@4 b5@19 ~ d6@3 ~ d6@2]/2",
  O: "[e6@3 ~ e6@2 d6@3 ~@3 c#6@3 ~@3 d6@4 b5@19 ~ e6@3 ~ e6@2]/2", P: "f#6@3 ~ f#6@2 e6@3 ~@3 d#6@3 ~@3 e6@4 c#6@2",
  Q: "~@4 c#6@8 ~@4 c#6@5 ~ d6@2", R: "e6@3 ~ e6@2 d6@3 ~@3 c#6@3 ~@3 b5@3 ~@3", S: "a5@3 ~@7 a4@2 b4@3 ~@3 c#5@3 ~@3",
  T: "d5@2 e5 f#5@2 f5 f#5@2 d5 a4@2 f#4", U: "g4@2 d5 a5@2 g5 a#5@2 g5 f#5@2 e5",
  V: "e5@2 d5 ~@2 c#5 c5@2 d#5 g5@2 f#5", W: "~@2 d#5 e5@2 b4 ~@2 d5@3 c#5",
  X: "d5@2 e5@2 f5@2 f#5@3 ~@3 b4@2 a#4@2 a4@2 g#4@3 ~@3", Y: "g4@2 a4 a#4@2 b4 ~@2 a4@3 g4",
  Z: "f#4@3 ~@3 b5@2 a5 ~@2 g5", AA: "f#5@3 ~@9 d6@9 ~ d6@2", AB: "b5@3 ~ b5@2 d6@3 ~@3 g5@3 ~@3 b5@3 ~@3",
  AC: "a5@3 ~ a5@2 c6@3 ~@3 f#5@3 ~@3 a5@3 ~@3", AD: "g5@3 ~ g5@2 b5@3 ~@3 e5@3 ~@3 g5@3 ~@3",
  AE: "f#5@4 g5@2 a5@3 ~ d5@8 ~@6", AF: "d#5@3 ~ d#5@2 g5@3 ~@3 c5@3 ~@3 d#5@3 ~@3",
  AG: "d5@3 ~ d5@2 f5@3 ~@3 a#4@3 ~@3 d5@3 ~@3", AH: "a4@3 ~ a4@2 d5@3 ~@3 f5@3 ~ e5@8", AI: "d5@6 ~@6 d6@9 ~ d6@2",
  AJ: "a#5@4 c6@2 d6@3 ~@3 d6@11 ~", AK: "d5@2 c5 b4@2 c5 ~@2 d#5@3 c5", AL: "a5@4 a#5@2 c6@3 ~@3 c6@11 ~",
  AM: "c5@2 a#4 a4@2 a#4 ~@2 d5@3 a#4", AN: "g5@3 ~ g5@2 a#5@3 ~@3 e5@3 ~@3 g5@3 ~@3",
  AO: "f5@3 ~ f5@2 a5@3 ~@3 d5@3 ~@3 f5@3 ~@3", AP: "e5@3 ~@3 g5@4 g#5@2 ~@4 e6@6 d6@2", AQ: "c#6 ~@7", AR: "~@2 e6",
  AS: "[d6@51 ~@3 g#5@4 a5@2 ~@4 f5@2 f#5@6]/3",
})).s("gm_flute").gain(0.3)

// other · flute · soft notes
const flute_soft = note("<A ~@51 B C D A ~@24 E ~@3 F>".pickRestart({
  A: "a5 ~ a5 ~@5", B: "~@2 a#4 ~ b4 ~ c5 ~", C: "c#5 ~ a5 ~ a5 ~ a5 ~", D: "a5 ~ a5 ~ a5 ~ a5 ~",
  E: "g4@2 a4 a#4@2 b4 ~@6", F: "d5 ~@3 d6 ~@3",
})).s("gm_flute").gain(0.2)

stack(flute, flute_soft)