Strudelify

christmas medley

Kirsten Sutantyo

KeyG majorTempo70 bpm
0:00/0:00
// christmas medley — Kirsten Sutantyo
// 70 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 3/4 at bar 18, 4/4 at bar 27) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5868354; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 51 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(70/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 D L M N O P@7 Q R S T@2 U@2 V W X@5 Y Z@2 AA AB AC AD AE@2 AF@3 AG AH
>`.pickRestart({
  A: "~@12 c5@11 ~ b4@11 ~ b4@11 ~", B: "c5@17 ~ g4@6 d5@6 c5@6 b4@6 c5@6", C: "d5@9 d5@3 c5@11 ~ d#5@6 b4@17 ~",
  D: "~ f5 g5 a5!3 g5 f5", E: "b4@11 ~ c5@11 ~ b4@17 ~ g#4@6", F: "c5@11 ~ c5@11 ~ c5@6 e5@11 ~ e5@6",
  G: "a4@11 ~ a4@11 ~ a4@6 d5@11 ~ b4@6", H: "c5@11 ~ c5@11 ~ d5@6 c5@6 b4@6 a4@6", I: "b4@23 ~ g4@6 g4@6 g4@6 g4@6",
  J: "c5@17 ~ b4@6 d5@6 c5@6 b4@6 c5@6", K: "d5@9 d5@3 d5@11 ~ d#5@6 d5@17 ~", L: "b4@23 ~ g#4@17 ~ f5@6",
  M: "c5@17 ~ c5@6 c5@6 e5@11 ~ e5@6", N: "g5@11 ~ g5@11 ~ f#5@11 ~ a4@11 ~", O: "g4@11 ~ b4@11 ~ f4@11 ~ b4@11 ~",
  P: "[g4@15 a4@15 ~ a4@15 d5@15 c5@14 ~ a#4@14 ~@2 g#4@14 ~ g4@14 ~ g5@14 ~ f5@14 ~@2 d#5@14 ~ d5@14 ~ g5@5 f5@2 ~ g5@2 d#5@5 ~ g5@5 f5@2 g5@2 ~ d#5@5 g5@5 f5@2 g5@2 ~ d#5@5 g5@5 f5@2 ~ g5@2 d#5@5 c5@5 a#4@2 ~ c5@2 ~ g4@5 c5@5 a#4@2 c5@2 ~ g4@5 c5@5 a#4@2 ~ c5@2 g4@5 c5@5 a#4@2 ~ c5@2 g4@5 g5@5 ~ g5@2 g5@2 ~ f5@2 f5@2 ~ d#5@5 d#5@2 d#5@2 ~ d5@2 c5@2 ~]/7",
  Q: "d5@5 d5@2 ~ d5@2 d#5@2 ~ d5@2 g4@5 g4@2 ~ g4@2 g4@5 ~ d5@14 ~ d5@2",
  R: "d#5@2 ~ d5@5 c5@5 d5@14 ~ d5@2 ~ d#5@2 d5@5 ~ c5@5 c5@4",
  S: "~ a#4@2 c5@2 ~ g4@5 c5@5 a#4@2 ~ c5@2 g4@5 c5@6 a#4@6 a4@6 g4@4",
  T: "[~@2 f#4@6 f#4@6 ~@5 b4 b4@4 ~@7 b4@2 b4@4 ~@6 c5@2 ~ a4@4 ~@2 b4@4 b4@2 ~ a4@4 f#4@2 g4@6 ~@5 g4@2 b4@6 ~@5 b4@2 a4@5]/2",
  U: "[~@6 a4@2 c5@4 c5@2 ~ a4@4 f#4@2 g4@6 ~@4 g4@2 ~ b4@6 ~@4 b4@2 ~ a4@6 ~@4 a4@2 ~ c5@4 c5@2 a4@4 f#4@2 ~ g4@6 ~@4 g4@2 ~ b4@6 ~@4]/2",
  V: "b4@2 ~ a4@6 ~@4 a4@2 ~ c5@3 c5@2 ~ a4@4 f#4@2 ~@4 g4@2 ~ f#4@4 g4@2 ~@4 b4@2 ~",
  W: "g4@2 f#4@2 f4@2 e4@4 e4@2 ~ e4@4 g4@2 ~@4 f#4@6 ~ c5@2 d5@6 ~ d5@4 g5@2 e5@3",
  X: "[~ g5@2 ~@4 d5@2 ~ a#5@4 b5@2 a#5@4 b5@2 ~ a5@4 g5@2 e5@4 d5@9 g5@4 e5@9 ~@13 a#5@4 b5@2 ~ a5@4 g5@2 e5@4 d5@9 d5@4 g5@2 e5@4 g5@2 ~@5 b5@2 d6@4 d6@2 ~ c6@4 c6@2 b5@4 d5@2 ~ e5@4 g5@2 g5@12 ~ g5@4 a5@4 ~ a#5@4 b5@12 ~ a5@6 d5@6 ~ d#5@6 ~@4 d#5@2 ~ d#5@6 ~@4 d#5@2 ~ d#5@6 ~@4 d#5@9 ~@4]/5",
  Y: "d#5@2 ~ e5@6 ~@4 e5@2 ~ e5@6 ~@4 e5@2 g#5@18 ~@2",
  Z: "[g#5@4 e5@2 c#5@6 ~ c#5@6 d5@6 ~ d5@6 d#5@6 ~ d#5@6 e5@6 ~ e5@6 f#5@6 ~@32]/2",
  AA: "~@5 d5@2 e5@4 f#5@2 ~ g4@6 b4@6 d5@6 f#5@3 g5@8 ~ f#5@4",
  AB: "~@2 e5@3 d5@8 ~ a5@6 g5@6 g5@6 f#5@3 g5@8 ~ f#5@4", AC: "~@2 e5@3 d5@8 ~ c5@6 e5@6 g5@3 a5@8 ~ b5@6 a5@4",
  AD: "~@2 g5@3 e5@8 ~ c5@6 d#5@6 g5@3 a5@8 ~ a#5@6 a5@4",
  AE: "[~@2 d#5@3 d5@8 ~ g4@9 a4@2 ~ b4@9 b4@2 ~ b4@6 a4@9 b4@8 ~ g5@11 ~ e5@9 b4@2 ~ g4@6 g4@4]/2",
  AF: "[~@2 a#4@3 c5@8 ~ g4@11 ~ d#5@11 ~ g5@9 d#5@2 ~ c5@9 a4@2 ~ d5@9 c5@2 ~ b4@9 d5@2 ~ c5@23 ~ d5@17 ~ d5@6 d5@6 b4@2 a#4@2]/3",
  AG: "b4@2 c5@2 d5@2 e5@2 f#5@2 e5@2 f#5@2 f#5@3 g5@8 ~ f#5@6 d5@11 ~ d#5@4", AH: "~ d5@17 ~@6",
})).s("gm_flute").gain(0.3)

// other · flute
const flute_2 = note(`<
  A B C D E F G H I J K D L M N O P@2 Q@3 R@2 S T U V@3 W X Y@2 Z AA@3 AB AC@2 AD@2 AE@2 AF AG AH@3 AI AJ
>`.pickRestart({
  A: "~@36 g4@11 ~", B: "g4@17 ~ c5@6 a4@6 g4@6 f#4@6 g4@6", C: "a4@9 a4@3 a4@11 ~ a4@6 g4@17 ~",
  D: "~ c5 d5 e5 f5 e5 d5 c5", E: "e5@11 ~ e5@11 ~ g#4@17 ~ f4@6", F: "a4@11 ~ a4@11 ~ g4@6 c5@11 ~ b4@6",
  G: "g4@11 ~ f4@11 ~ f#4@6 a4@11 ~ g#4@6", H: "g4@11 ~ g4@11 ~ a4@6 g4@6 g4@6 g4@6",
  I: "g4@23 ~ b4@11 ~ g4@3 a4@3 b4@3 c5@3", J: "g4@17 ~ g4@6 a4@6 g4@6 f#4@6 g4@6", K: "a4@9 a4@3 a4@11 ~ a4@6 b4@17 ~",
  L: "e5@23 ~ b4@17 ~ b4@6", M: "a4@17 ~ a4@6 g4@6 c5@11 ~ c5@6", N: "f5@11 ~ e5@11 ~ d5@11 ~ f#4@6 f4@6",
  O: "e4@11 ~ g#4@11 ~ d5@11 ~ g4@11 ~", P: "[e4@15 f#4@15 ~ f#4@15 g#4@15 ~@35]/2",
  Q: "[~@26 c5@14 ~ a#4@14 ~@2 g#4@14 ~ g4@14 ~ c5@14 ~@2 a#4@14 ~ g#4@14 ~ g4@11]/3",
  R: "[~@4 g5@5 f5@2 ~ g5@2 ~ d#5@5 g5@5 f5@2 g5@2 ~ d#5@5 g5@5 f5@2 ~ g5@2 d#5@5 g5@5 f5@2 ~ g5@2 d#5@5 d#5@5 ~ d#5@2 d#5@2 ~ d5@2 c5@2 ~ c5@5 c5@2 c5@2 ~ a#4@2 g4@2 ~]/2",
  S: "a#4@5 a#4@2 ~ a#4@2 c5@2 ~ a#4@2 d#5@5 d#5@2 ~ d#5@2 d#5@5 ~ b4@14 ~ b4@2",
  T: "b4@2 ~ b4@5 g4@5 b4@14 ~ b4@2 ~ b4@2 b4@5 ~ g4@5 g5@4",
  U: "~ f5@2 g5@2 ~ d#5@5 g5@5 f5@2 ~ g5@2 d#5@5 g4@6 g4@6 f#4@6 d5@4",
  V: "[~@2 d5@6 d5@6 ~@5 d5 d5@4 ~@7 e5@2 e5@4 ~@6 e5@2 ~ e5@4 ~@22 d5@4 g5@2 e5@4 g5@2 ~@5 d5@2 a#5@4 b5@2 ~ a#5@4 b5@2 a5@4 g5@2 ~ e5@4 d5@9 g5@3 e5@9 ~@8]/3",
  W: "~@5 a#5@4 b5@2 ~ a5@4 g5@2 e5@4 d5@9 d5@4 g5@2 ~ e5@4 g5@2 ~@4",
  X: "b5@2 ~ d6@4 d6@2 c6@4 c6@2 ~ b5@3 d5@2 ~ e5@4 g5@2 ~@4 b4@2 ~ a#4@4 b4@2 ~@4 d5@2 ~",
  Y: "[a#4@2 a4@2 g#4@2 g4@4 g4@2 ~ g4@4 a#4@2 ~@4 a4@6 ~ a4@2 b4@6 ~@5 b4@2 d5@6 ~@4 d5@2 ~ c5@6 ~@4 c5@2 ~ d5@4 d5@2 c5@4 a4@2 ~ b4@6 ~@4 b4@2]/2",
  Z: "~ d5@6 ~@4 d5@2 ~ c5@6 ~@4 c5@2 ~ d5@4 d5@2 c5@4 a4@2 ~ b4@6 ~@2",
  AA: "[~@2 b4@2 d5@6 ~@5 d5@2 c5@6 ~@5 c5@2 d5@4 d5@2 ~ c5@4 a4@2 d5@12 ~ e5@4 f#5@4 ~ g5@4 g5@12 ~ f#5@6 a4@6 ~ b4@6 ~@4 b4@2 ~ b4@6 ~@4 b4@2 ~ b4@6 ~@4 b4@9 ~@4]/3",
  AB: "b4@2 ~ g#5@6 ~@4 g#5@2 ~ g#5@6 ~@4 g#5@2 e5@18 ~@2",
  AC: "[e5@4 g#4@2 g4@6 ~ g4@6 g4@6 ~ g4@6 g4@6 ~ g4@6 g4@6 ~ g4@6 a4@6 ~@32]/2",
  AD: "[~ d5@12 ~ g4@9 a4@2 ~ b4@9 a4@2 ~ d5@9 c5@2 ~ b4@9 f#5@2 ~ c5@6 b4@6 b4@6 a4@3 b4@8 ~ a4@4]/2",
  AE: "[~@2 g4@3 f#4@8 ~ e5@9 c5@8 ~ c5@3 d5@2 ~ c5@9 d5@8 ~ c5@6 a4@9 a4@8 ~ a4@6 d#5@6 d#5@4]/2",
  AF: "~@2 c5@3 c5@8 ~ g5@6 a5@6 f#5@6 g5@3 e5@8 ~ f#5@4", AG: "~@2 e5@3 d#5@6 ~@3 b5@6 a5@6 g5@3 f#5@8 ~ e5@6 f#5@4",
  AH: "[~@2 e5@3 d#5@8 ~ a4@11 ~ b4@11 ~ d#5@9 c5@2 ~ a4@9 f#4@2 ~ b4@9 a4@2 ~ d5@9 b4@2 ~ a4@23 ~ f#5@17 ~ f#5@6 b4@6 g4@2 f#4@2]/3",
  AI: "g4@2 a4@2 b4@2 c5@2 d5@2 c5@2 d5@2 c#5@3 d5@8 ~ d5@6 a4@11 ~ a#4@4", AJ: "~ b4@17 ~@6",
})).s("gm_flute").gain(0.3)

stack(flute, flute_2)