Strudelify

Dance of the Sugar Plum Fairy

Peter Ilyich Tchaikovsky

KeyE majorTempo110 bpm
0:00/0:00
// Dance of the Sugar Plum Fairy — Peter Ilyich Tchaikovsky
// 110 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5834577; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 48 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/4)

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

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

// other · pizzicato strings
const pizzicato_strings = note("<A B A B A C B D ~@24 E F G H ~@12>".pickRestart({
  A: "e3 g3 e3 a3", B: "e3 a#3 e3 a3", C: "e3 a#3 e3 b3", D: "e3@2 e3@2 e3 ~@3", E: "~@2 g3 ~ e3 ~ a3 ~",
  F: "e3 ~ a#3 ~ e3 ~ b3 ~", G: "e3 ~ a#3 ~ e3 ~ a3 ~", H: "e3 ~ e3 ~ e2 ~@3",
})).s("gm_pizzicato_strings").gain(0.3)

stack(cello, pizzicato_strings)